{
  "version": 3,
  "sources": ["../../../../.pnpm/tslib@1.14.1/node_modules/tslib/tslib.js", "../../../../.pnpm/lru_map@0.3.3/node_modules/lru_map/lru.js", "../../../../.pnpm/ms@2.1.2/node_modules/ms/index.js", "../../../../.pnpm/debug@4.3.1/node_modules/debug/src/common.js", "../../../../.pnpm/debug@4.3.1/node_modules/debug/src/browser.js", "../../../../.pnpm/has-flag@4.0.0/node_modules/has-flag/index.js", "../../../../.pnpm/supports-color@7.2.0/node_modules/supports-color/index.js", "../../../../.pnpm/debug@4.3.1/node_modules/debug/src/node.js", "../../../../.pnpm/debug@4.3.1/node_modules/debug/src/index.js", "../../../../.pnpm/debug@4.3.4/node_modules/debug/src/common.js", "../../../../.pnpm/debug@4.3.4/node_modules/debug/src/browser.js", "../../../../.pnpm/debug@4.3.4/node_modules/debug/src/node.js", "../../../../.pnpm/debug@4.3.4/node_modules/debug/src/index.js", "../../../../.pnpm/agent-base@6.0.2/node_modules/agent-base/src/promisify.ts", "../../../../.pnpm/agent-base@6.0.2/node_modules/agent-base/src/index.ts", "../../../../.pnpm/https-proxy-agent@5.0.0/node_modules/https-proxy-agent/src/parse-proxy-response.ts", "../../../../.pnpm/https-proxy-agent@5.0.0/node_modules/https-proxy-agent/src/agent.ts", "../../../../.pnpm/https-proxy-agent@5.0.0/node_modules/https-proxy-agent/src/index.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/constants/metadata_keys.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/constants/literal_types.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/utils/id.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/bindings/binding.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/constants/error_msgs.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/metadata_reader.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/bindings/binding_count.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/utils/exceptions.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/utils/serialization.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/context.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/metadata.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/plan.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/decorator_utils.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/inject.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/queryable_string.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/target.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/reflection_utils.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/request.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/planning/planner.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/resolution/instantiation.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/resolution/resolver.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/constraint_helpers.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/binding_when_syntax.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/binding_on_syntax.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/binding_when_on_syntax.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/binding_in_syntax.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/binding_in_when_on_syntax.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/syntax/binding_to_syntax.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/container/container_snapshot.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/container/lookup.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/container/container.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/container/container_module.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/injectable.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/tagged.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/named.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/optional.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/unmanaged.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/multi_inject.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/target_name.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/annotation/post_construct.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/utils/binding_utils.ts", "../../../../.pnpm/inversify@5.1.1/node_modules/inversify/src/inversify.ts", "../../../../.pnpm/@vue+shared@3.2.1/node_modules/@vue/shared/dist/shared.esm-bundler.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/util.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/array-set.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/binary-search.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-node.js", "../../../../.pnpm/source-map@0.6.1/node_modules/source-map/source-map.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/tokenizer/types.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/whitespace.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/location.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/base.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/comments.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/error-codes.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/error-message.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/error.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/estree.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/tokenizer/context.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/identifier.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/scopeflags.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/scope.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/flow/scope.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/tokenizer/state.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/tokenizer/index.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/class-scope.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/expression-scope.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/util/production-parameter.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/util.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/node.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/flow/index.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/jsx/xhtml.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/jsx/index.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/typescript/scope.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/typescript/index.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/placeholders.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugins/v8intrinsic.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/plugin-utils.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/options.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/lval.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/expression.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/statement.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/parser/index.js", "../../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/src/index.js", "../../../../.pnpm/estree-walker@2.0.2/node_modules/estree-walker/dist/umd/estree-walker.js", "../../../../.pnpm/@vue+compiler-core@3.2.1/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/tokenizer/types.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/scopeflags.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/whitespace.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/location.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/base.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/comments.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/error-message.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/error.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/estree.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/tokenizer/context.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/babel-helper-validator-identifier/src/identifier.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/babel-helper-validator-identifier/src/keyword.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/identifier.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/flow.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/jsx/xhtml.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/jsx/index.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/scope.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/typescript/scope.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/production-parameter.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/typescript/index.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/placeholders.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugins/v8intrinsic.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/plugin-utils.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/options.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/tokenizer/state.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/tokenizer/index.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/util.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/node.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/lval.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/expression.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/statement.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/util/class-scope.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/parser/index.js", "../../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/src/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/utils/shallowEqual.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/generated/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/matchesPattern.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/react/isReactComponent.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/react/isCompatTag.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheClear.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/eq.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_assocIndexOf.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheDelete.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheGet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheHas.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheSet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_ListCache.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackClear.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackDelete.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackGet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackHas.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_freeGlobal.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_root.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Symbol.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getRawTag.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_objectToString.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseGetTag.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isObject.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isFunction.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_coreJsData.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isMasked.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_toSource.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsNative.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getValue.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getNative.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Map.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nativeCreate.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashClear.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashDelete.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashGet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashHas.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashSet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Hash.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheClear.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isKeyable.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getMapData.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheDelete.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheGet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheHas.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheSet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_MapCache.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackSet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Stack.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayEach.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_defineProperty.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseAssignValue.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_assignValue.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copyObject.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseTimes.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isObjectLike.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsArguments.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isArguments.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/stubFalse.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isBuffer.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isIndex.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isLength.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsTypedArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseUnary.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nodeUtil.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isTypedArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayLikeKeys.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isPrototype.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_overArg.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nativeKeys.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseKeys.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isArrayLike.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/keys.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseAssign.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nativeKeysIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseKeysIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/keysIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseAssignIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneBuffer.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copyArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayFilter.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/stubArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getSymbols.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copySymbols.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayPush.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getPrototype.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getSymbolsIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copySymbolsIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseGetAllKeys.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getAllKeys.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getAllKeysIn.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_DataView.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Promise.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Set.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_WeakMap.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getTag.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_initCloneArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Uint8Array.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneArrayBuffer.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneDataView.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneRegExp.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneSymbol.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneTypedArray.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_initCloneByTag.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseCreate.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_initCloneObject.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsMap.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isMap.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsSet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isSet.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseClone.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/clone.js", "../../../../.pnpm/to-fast-properties@2.0.0/node_modules/to-fast-properties/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isType.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isPlaceholderType.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/is.js", "../../../../.pnpm/@babel+helper-validator-identifier@7.10.4/node_modules/@babel/helper-validator-identifier/lib/identifier.js", "../../../../.pnpm/@babel+helper-validator-identifier@7.10.4/node_modules/@babel/helper-validator-identifier/lib/keyword.js", "../../../../.pnpm/@babel+helper-validator-identifier@7.10.4/node_modules/@babel/helper-validator-identifier/lib/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isValidIdentifier.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/constants/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/validate.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/utils.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/core.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/flow.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/jsx.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/placeholders.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/misc.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/experimental.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/typescript.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/builder.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/generated/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/react/buildChildren.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isNode.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/asserts/assertNode.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/asserts/generated/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneNode.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/clone.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneDeep.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/addComments.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/addComment.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/utils/inherit.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritInnerComments.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritLeadingComments.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritTrailingComments.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritsComments.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/removeComments.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/constants/generated/index.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toBlock.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/ensureBlock.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toIdentifier.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toComputedKey.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toExpression.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/traverse/traverseFast.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/removeProperties.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toKeyAlias.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toSequenceExpression.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toStatement.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isPlainObject.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsRegExp.js", "../../../../.pnpm/lodash@4.17.20/node_modules/lodash/isRegExp.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/valueToNode.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/inherits.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/traverse/traverse.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isBinding.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isLet.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isBlockScoped.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isImmutable.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isNodesEquivalent.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isReferenced.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isScope.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isSpecifierDefault.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isValidES3Identifier.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isVar.js", "../../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/index.js", "../../../../.pnpm/node-ipc@10.1.0/node_modules/node-ipc/node-ipc.cjs", "../../../../.pnpm/reflect-metadata@0.1.13/node_modules/reflect-metadata/Reflect.js", "../../../../.pnpm/sourcemap-codec@1.4.8/node_modules/sourcemap-codec/src/sourcemap-codec.ts", "../../../../.pnpm/tslib@1.14.1/node_modules/tslib/modules/index.js", "../../../../.pnpm/@sentry+types@5.30.0/node_modules/@sentry/types/src/session.ts", "../../../../.pnpm/@sentry+types@5.30.0/node_modules/@sentry/types/src/severity.ts", "../../../../.pnpm/@sentry+types@5.30.0/node_modules/@sentry/types/src/status.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/async.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/is.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/browser.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/polyfill.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/error.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/dsn.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/memo.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/stacktrace.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/string.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/object.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/node.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/misc.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/logger.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/path.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/syncpromise.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/promisebuffer.ts", "../../../../.pnpm/@sentry+utils@5.30.0/node_modules/@sentry/utils/src/time.ts", "../../../../.pnpm/@sentry+hub@5.30.0/node_modules/@sentry/hub/src/scope.ts", "../../../../.pnpm/@sentry+hub@5.30.0/node_modules/@sentry/hub/src/session.ts", "../../../../.pnpm/@sentry+hub@5.30.0/node_modules/@sentry/hub/src/hub.ts", "../../../../.pnpm/@sentry+minimal@5.30.0/node_modules/@sentry/minimal/src/index.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/api.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/integration.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/baseclient.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/transports/noop.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/basebackend.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/request.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/sdk.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/integrations/index.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/integrations/functiontostring.ts", "../../../../.pnpm/@sentry+core@5.30.0/node_modules/@sentry/core/src/integrations/inboundfilters.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/parsers.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/stacktrace.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/transports/base.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/version.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/transports/http.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/transports/https.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/backend.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/client.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/sdk.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/index.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/console.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/utils/http.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/http.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/handlers.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/onuncaughtexception.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/onunhandledrejection.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/linkederrors.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/integrations/modules.ts", "../../../../.pnpm/@sentry+node@5.30.0/node_modules/@sentry/node/src/index.ts", "../../../shared/src/any.ts", "../../../shared/src/assert.ts", "../../../shared/src/array.ts", "../../../shared/src/cache.ts", "../../../shared/src/path.ts", "../../../shared/src/string.ts", "../../../shared/src/component.ts", "../../../shared/src/debug.ts", "../../../shared/src/fileName.ts", "../../../shared/src/html.ts", "../../../shared/src/memoize.ts", "../../../shared/src/number.ts", "../../../shared/src/object.ts", "../../../shared/src/reactivity/cleanup.ts", "../../../shared/src/reactivity/effect.ts", "../../../shared/src/reactivity/emitter.ts", "../../../shared/src/reactivity/model.ts", "../../../shared/src/reactivity/computed.ts", "../../../shared/src/rpc/channel.ts", "../../../shared/src/rpc/message.ts", "../../../shared/src/rpc/types.ts", "../../../shared/src/rpc/value.ts", "../../../shared/src/rpc/handlers.ts", "../../../shared/src/rpc/create.ts", "../../../shared/src/rpc/expose.ts", "../../../shared/src/rpc/set.ts", "../../../shared/src/set.ts", "../../../shared/src/source.ts", "../../../shared/src/telemetry.ts", "../../../shared/src/performance.ts", "../../../../.pnpm/vscode-languageserver-textdocument@1.0.1/node_modules/vscode-languageserver-textdocument/lib/esm/main.js", "../../../template-ast-types/src/node.ts", "../../../template-ast-types/src/assert.ts", "../../../template-ast-types/src/create.ts", "../../../template-ast-types/src/traverse.ts", "../../../template-ast-types/src/helpers.ts", "../../../template-ast-types/src/stringify.ts", "../../../../.pnpm/@vue+compiler-core@3.2.1/node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js", "../../../../.pnpm/@vue+compiler-dom@3.2.1/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js", "../../../compiler-sfc/src/parse.ts", "../../../transforms/src/createProgram.ts", "../../../transforms/src/findIdentifiers.ts", "../../../transforms/src/tsTransformScript.ts", "../../../transforms/src/tsTransformScriptSetup.ts", "../../../compiler-tsx/src/utils.ts", "../../../compiler-tsx/src/template/runtime.ts", "../../../compiler-tsx/src/template/generate.ts", "../../../compiler-tsx/src/vue/blocks/transformCustomBlock.ts", "../../../compiler-tsx/src/vue/blocks/transformScript.ts", "../../../compiler-tsx/src/vue/blocks/transformScriptSetup.ts", "../../../compiler-tsx/src/vue/blocks/transformStyle.ts", "../../../compiler-tsx/src/template/transforms/transformFor.ts", "../../../compiler-tsx/src/template/scope/Scope.ts", "../../../compiler-tsx/src/template/scope/ScopeManager.ts", "../../../compiler-tsx/src/template/transforms/transformComponent.ts", "../../../compiler-tsx/src/template/transforms/transformIf.ts", "../../../compiler-tsx/src/template/builtins.ts", "../../../compiler-tsx/src/template/transforms/transformResolveComponent.ts", "../../../compiler-tsx/src/template/transforms/transformSlot.ts", "../../../compiler-tsx/src/template/namedChars.ts", "../../../compiler-tsx/src/template/decodeEntities.ts", "../../../compiler-tsx/src/template/parserOptions.ts", "../../../compiler-tsx/src/template/parse.ts", "../../../compiler-tsx/src/template/compile.ts", "../../../compiler-tsx/src/vue/blocks/transformTemplate.ts", "../../../compiler-tsx/src/vue/compile.ts", "../../../vue-virtual-textdocument/src/VueSFCDocument.ts", "../../../../.pnpm/json5@2.2.0/node_modules/json5/dist/index.mjs", "../../../projectconfig/src/config/ProjectConfig.ts", "../../../projectconfig/src/project/deepDefaults.ts", "../../../projectconfig/src/project/FilesystemHost.ts", "../../../projectconfig/src/project/resolveComponents.ts", "../../../projectconfig/src/project/resolveDirectives.ts", "../../../projectconfig/src/project/VueProject.ts", "../../../projectconfig/src/index.ts", "../../../.pnpm/tslib@2.4.0/node_modules/tslib/tslib.es6.js", "../src/constants.ts", "../src/helpers/overrideMethod.ts", "../src/helpers/areOverlappingTextSpans.ts", "../src/services/LoggerService.ts", "../src/helpers/createFilesystemProvider.ts", "../../../.pnpm/quick-lru@6.0.1/node_modules/quick-lru/index.js", "../src/services/CacheService.ts", "../src/services/FilesystemService.ts", "../src/managers/ConfigManager.ts", "../src/services/TypescriptContextService.ts", "../src/features/CodeFixService.ts", "../../../.pnpm/@vue+shared@3.2.1/node_modules/@vue/shared/dist/shared.esm-bundler.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/util.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/array-set.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/binary-search.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-node.js", "../../../.pnpm/source-map@0.6.1/node_modules/source-map/source-map.js", "../../../.pnpm/@babel+parser@7.15.0/node_modules/@babel/parser/lib/index.js", "../../../.pnpm/estree-walker@2.0.2/node_modules/estree-walker/dist/umd/estree-walker.js", "../../../.pnpm/@vue+compiler-core@3.2.1/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js", "../../../.pnpm/@vue+compiler-core@3.2.1/node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js", "../../../.pnpm/@vue+compiler-dom@3.2.1/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js", "../../../.pnpm/@babel+parser@7.12.3/node_modules/@babel/parser/lib/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/utils/shallowEqual.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/generated/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/matchesPattern.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/react/isReactComponent.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/react/isCompatTag.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheClear.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/eq.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_assocIndexOf.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheDelete.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheGet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheHas.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_listCacheSet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_ListCache.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackClear.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackDelete.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackGet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackHas.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_freeGlobal.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_root.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Symbol.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getRawTag.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_objectToString.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseGetTag.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isObject.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isFunction.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_coreJsData.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isMasked.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_toSource.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsNative.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getValue.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getNative.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Map.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nativeCreate.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashClear.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashDelete.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashGet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashHas.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_hashSet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Hash.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheClear.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isKeyable.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getMapData.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheDelete.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheGet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheHas.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_mapCacheSet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_MapCache.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_stackSet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Stack.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayEach.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_defineProperty.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseAssignValue.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_assignValue.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copyObject.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseTimes.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isObjectLike.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsArguments.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isArguments.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/stubFalse.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isBuffer.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isIndex.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isLength.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsTypedArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseUnary.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nodeUtil.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isTypedArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayLikeKeys.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_isPrototype.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_overArg.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nativeKeys.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseKeys.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isArrayLike.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/keys.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseAssign.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_nativeKeysIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseKeysIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/keysIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseAssignIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneBuffer.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copyArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayFilter.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/stubArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getSymbols.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copySymbols.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_arrayPush.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getPrototype.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getSymbolsIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_copySymbolsIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseGetAllKeys.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getAllKeys.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getAllKeysIn.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_DataView.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Promise.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Set.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_WeakMap.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_getTag.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_initCloneArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_Uint8Array.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneArrayBuffer.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneDataView.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneRegExp.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneSymbol.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_cloneTypedArray.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_initCloneByTag.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseCreate.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_initCloneObject.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsMap.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isMap.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsSet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isSet.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseClone.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/clone.js", "../../../.pnpm/to-fast-properties@2.0.0/node_modules/to-fast-properties/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isType.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isPlaceholderType.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/is.js", "../../../.pnpm/@babel+helper-validator-identifier@7.10.4/node_modules/@babel/helper-validator-identifier/lib/identifier.js", "../../../.pnpm/@babel+helper-validator-identifier@7.10.4/node_modules/@babel/helper-validator-identifier/lib/keyword.js", "../../../.pnpm/@babel+helper-validator-identifier@7.10.4/node_modules/@babel/helper-validator-identifier/lib/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isValidIdentifier.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/constants/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/validate.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/utils.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/core.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/flow.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/jsx.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/placeholders.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/misc.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/experimental.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/typescript.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/definitions/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/builder.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/generated/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/react/buildChildren.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isNode.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/asserts/assertNode.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/asserts/generated/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneNode.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/clone.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneDeep.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/addComments.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/addComment.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/utils/inherit.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritInnerComments.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritLeadingComments.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritTrailingComments.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/inheritsComments.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/comments/removeComments.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/constants/generated/index.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toBlock.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/ensureBlock.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toIdentifier.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toComputedKey.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toExpression.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/traverse/traverseFast.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/removeProperties.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toKeyAlias.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toSequenceExpression.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/toStatement.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isPlainObject.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/_baseIsRegExp.js", "../../../.pnpm/lodash@4.17.20/node_modules/lodash/isRegExp.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/converters/valueToNode.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/inherits.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/traverse/traverse.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isBinding.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isLet.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isBlockScoped.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isImmutable.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isNodesEquivalent.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isReferenced.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isScope.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isSpecifierDefault.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isValidES3Identifier.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/validators/isVar.js", "../../../.pnpm/@babel+types@7.12.1/node_modules/@babel/types/lib/index.js", "../../compiler-tsx/lib/index.mjs", "../src/helpers/isOffsetInSourceLocation.ts", "../src/services/TemplateContextService.ts", "../src/services/TemplateSlotsService.ts", "../src/features/CompletionsService.ts", "../src/services/TemplateDeclarationsService.ts", "../src/features/DefinitionService.ts", "../src/features/DiagnosticsService.ts", "../src/features/FoldingRangeService.ts", "../src/features/ImplementationService.ts", "../src/features/QuickInfoService.ts", "../src/features/RefactorService.ts", "../src/features/ReferencesService.ts", "../src/features/RenameService.ts", "../src/features/SignatureHelpService.ts", "../src/services/EncodedClassificationsService.ts", "../src/services/PluginSideChannel.ts", "../src/services/IPCService.ts", "../src/services/TypescriptPluginService.ts", "../src/managers/PluginManager.ts", "../src/index.ts"],
  "sourcesContent": ["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n    var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n    if (typeof define === \"function\" && define.amd) {\r\n        define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n    }\r\n    else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n        factory(createExporter(root, createExporter(module.exports)));\r\n    }\r\n    else {\r\n        factory(createExporter(root));\r\n    }\r\n    function createExporter(exports, previous) {\r\n        if (exports !== root) {\r\n            if (typeof Object.create === \"function\") {\r\n                Object.defineProperty(exports, \"__esModule\", { value: true });\r\n            }\r\n            else {\r\n                exports.__esModule = true;\r\n            }\r\n        }\r\n        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n    }\r\n})\r\n(function (exporter) {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\n    __extends = function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n\r\n    __assign = Object.assign || function (t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n\r\n    __rest = function (s, e) {\r\n        var t = {};\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n            t[p] = s[p];\r\n        if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                    t[p[i]] = s[p[i]];\r\n            }\r\n        return t;\r\n    };\r\n\r\n    __decorate = function (decorators, target, key, desc) {\r\n        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n        if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n        return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n    };\r\n\r\n    __param = function (paramIndex, decorator) {\r\n        return function (target, key) { decorator(target, key, paramIndex); }\r\n    };\r\n\r\n    __metadata = function (metadataKey, metadataValue) {\r\n        if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n    };\r\n\r\n    __awaiter = function (thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    };\r\n\r\n    __generator = function (thisArg, body) {\r\n        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n        return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n        function verb(n) { return function (v) { return step([n, v]); }; }\r\n        function step(op) {\r\n            if (f) throw new TypeError(\"Generator is already executing.\");\r\n            while (_) try {\r\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n                if (y = 0, t) op = [op[0] & 2, t.value];\r\n                switch (op[0]) {\r\n                    case 0: case 1: t = op; break;\r\n                    case 4: _.label++; return { value: op[1], done: false };\r\n                    case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                    case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                    default:\r\n                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                        if (t[2]) _.ops.pop();\r\n                        _.trys.pop(); continue;\r\n                }\r\n                op = body.call(thisArg, _);\r\n            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n        }\r\n    };\r\n\r\n    __createBinding = function(o, m, k, k2) {\r\n        if (k2 === undefined) k2 = k;\r\n        o[k2] = m[k];\r\n    };\r\n\r\n    __exportStar = function (m, exports) {\r\n        for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n    };\r\n\r\n    __values = function (o) {\r\n        var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n        if (m) return m.call(o);\r\n        if (o && typeof o.length === \"number\") return {\r\n            next: function () {\r\n                if (o && i >= o.length) o = void 0;\r\n                return { value: o && o[i++], done: !o };\r\n            }\r\n        };\r\n        throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n    };\r\n\r\n    __read = function (o, n) {\r\n        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n        if (!m) return o;\r\n        var i = m.call(o), r, ar = [], e;\r\n        try {\r\n            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n        }\r\n        catch (error) { e = { error: error }; }\r\n        finally {\r\n            try {\r\n                if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n            }\r\n            finally { if (e) throw e.error; }\r\n        }\r\n        return ar;\r\n    };\r\n\r\n    __spread = function () {\r\n        for (var ar = [], i = 0; i < arguments.length; i++)\r\n            ar = ar.concat(__read(arguments[i]));\r\n        return ar;\r\n    };\r\n\r\n    __spreadArrays = function () {\r\n        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n        for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n                r[k] = a[j];\r\n        return r;\r\n    };\r\n\r\n    __await = function (v) {\r\n        return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n    };\r\n\r\n    __asyncGenerator = function (thisArg, _arguments, generator) {\r\n        if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n        var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n        return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }\r\n        function fulfill(value) { resume(\"next\", value); }\r\n        function reject(value) { resume(\"throw\", value); }\r\n        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n    };\r\n\r\n    __asyncDelegator = function (o) {\r\n        var i, p;\r\n        return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n    };\r\n\r\n    __asyncValues = function (o) {\r\n        if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n        var m = o[Symbol.asyncIterator], i;\r\n        return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n    };\r\n\r\n    __makeTemplateObject = function (cooked, raw) {\r\n        if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n        return cooked;\r\n    };\r\n\r\n    __importStar = function (mod) {\r\n        if (mod && mod.__esModule) return mod;\r\n        var result = {};\r\n        if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n        result[\"default\"] = mod;\r\n        return result;\r\n    };\r\n\r\n    __importDefault = function (mod) {\r\n        return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n    };\r\n\r\n    __classPrivateFieldGet = function (receiver, privateMap) {\r\n        if (!privateMap.has(receiver)) {\r\n            throw new TypeError(\"attempted to get private field on non-instance\");\r\n        }\r\n        return privateMap.get(receiver);\r\n    };\r\n\r\n    __classPrivateFieldSet = function (receiver, privateMap, value) {\r\n        if (!privateMap.has(receiver)) {\r\n            throw new TypeError(\"attempted to set private field on non-instance\");\r\n        }\r\n        privateMap.set(receiver, value);\r\n        return value;\r\n    };\r\n\r\n    exporter(\"__extends\", __extends);\r\n    exporter(\"__assign\", __assign);\r\n    exporter(\"__rest\", __rest);\r\n    exporter(\"__decorate\", __decorate);\r\n    exporter(\"__param\", __param);\r\n    exporter(\"__metadata\", __metadata);\r\n    exporter(\"__awaiter\", __awaiter);\r\n    exporter(\"__generator\", __generator);\r\n    exporter(\"__exportStar\", __exportStar);\r\n    exporter(\"__createBinding\", __createBinding);\r\n    exporter(\"__values\", __values);\r\n    exporter(\"__read\", __read);\r\n    exporter(\"__spread\", __spread);\r\n    exporter(\"__spreadArrays\", __spreadArrays);\r\n    exporter(\"__await\", __await);\r\n    exporter(\"__asyncGenerator\", __asyncGenerator);\r\n    exporter(\"__asyncDelegator\", __asyncDelegator);\r\n    exporter(\"__asyncValues\", __asyncValues);\r\n    exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n    exporter(\"__importStar\", __importStar);\r\n    exporter(\"__importDefault\", __importDefault);\r\n    exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n    exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "/**\n * A doubly linked list-based Least Recently Used (LRU) cache. Will keep most\n * recently used items while discarding least recently used items when its limit\n * is reached.\n *\n * Licensed under MIT. Copyright (c) 2010 Rasmus Andersson <http://hunch.se/>\n * See README.md for details.\n *\n * Illustration of the design:\n *\n *       entry             entry             entry             entry\n *       ______            ______            ______            ______\n *      | head |.newer => |      |.newer => |      |.newer => | tail |\n *      |  A   |          |  B   |          |  C   |          |  D   |\n *      |______| <= older.|______| <= older.|______| <= older.|______|\n *\n *  removed  <--  <--  <--  <--  <--  <--  <--  <--  <--  <--  <--  added\n */\n(function(g,f){\n  const e = typeof exports == 'object' ? exports : typeof g == 'object' ? g : {};\n  f(e);\n  if (typeof define == 'function' && define.amd) { define('lru', e); }\n})(this, function(exports) {\n\nconst NEWER = Symbol('newer');\nconst OLDER = Symbol('older');\n\nfunction LRUMap(limit, entries) {\n  if (typeof limit !== 'number') {\n    // called as (entries)\n    entries = limit;\n    limit = 0;\n  }\n\n  this.size = 0;\n  this.limit = limit;\n  this.oldest = this.newest = undefined;\n  this._keymap = new Map();\n\n  if (entries) {\n    this.assign(entries);\n    if (limit < 1) {\n      this.limit = this.size;\n    }\n  }\n}\n\nexports.LRUMap = LRUMap;\n\nfunction Entry(key, value) {\n  this.key = key;\n  this.value = value;\n  this[NEWER] = undefined;\n  this[OLDER] = undefined;\n}\n\n\nLRUMap.prototype._markEntryAsUsed = function(entry) {\n  if (entry === this.newest) {\n    // Already the most recenlty used entry, so no need to update the list\n    return;\n  }\n  // HEAD--------------TAIL\n  //   <.older   .newer>\n  //  <--- add direction --\n  //   A  B  C  <D>  E\n  if (entry[NEWER]) {\n    if (entry === this.oldest) {\n      this.oldest = entry[NEWER];\n    }\n    entry[NEWER][OLDER] = entry[OLDER]; // C <-- E.\n  }\n  if (entry[OLDER]) {\n    entry[OLDER][NEWER] = entry[NEWER]; // C. --> E\n  }\n  entry[NEWER] = undefined; // D --x\n  entry[OLDER] = this.newest; // D. --> E\n  if (this.newest) {\n    this.newest[NEWER] = entry; // E. <-- D\n  }\n  this.newest = entry;\n};\n\nLRUMap.prototype.assign = function(entries) {\n  let entry, limit = this.limit || Number.MAX_VALUE;\n  this._keymap.clear();\n  let it = entries[Symbol.iterator]();\n  for (let itv = it.next(); !itv.done; itv = it.next()) {\n    let e = new Entry(itv.value[0], itv.value[1]);\n    this._keymap.set(e.key, e);\n    if (!entry) {\n      this.oldest = e;\n    } else {\n      entry[NEWER] = e;\n      e[OLDER] = entry;\n    }\n    entry = e;\n    if (limit-- == 0) {\n      throw new Error('overflow');\n    }\n  }\n  this.newest = entry;\n  this.size = this._keymap.size;\n};\n\nLRUMap.prototype.get = function(key) {\n  // First, find our cache entry\n  var entry = this._keymap.get(key);\n  if (!entry) return; // Not cached. Sorry.\n  // As <key> was found in the cache, register it as being requested recently\n  this._markEntryAsUsed(entry);\n  return entry.value;\n};\n\nLRUMap.prototype.set = function(key, value) {\n  var entry = this._keymap.get(key);\n\n  if (entry) {\n    // update existing\n    entry.value = value;\n    this._markEntryAsUsed(entry);\n    return this;\n  }\n\n  // new entry\n  this._keymap.set(key, (entry = new Entry(key, value)));\n\n  if (this.newest) {\n    // link previous tail to the new tail (entry)\n    this.newest[NEWER] = entry;\n    entry[OLDER] = this.newest;\n  } else {\n    // we're first in -- yay\n    this.oldest = entry;\n  }\n\n  // add new entry to the end of the linked list -- it's now the freshest entry.\n  this.newest = entry;\n  ++this.size;\n  if (this.size > this.limit) {\n    // we hit the limit -- remove the head\n    this.shift();\n  }\n\n  return this;\n};\n\nLRUMap.prototype.shift = function() {\n  // todo: handle special case when limit == 1\n  var entry = this.oldest;\n  if (entry) {\n    if (this.oldest[NEWER]) {\n      // advance the list\n      this.oldest = this.oldest[NEWER];\n      this.oldest[OLDER] = undefined;\n    } else {\n      // the cache is exhausted\n      this.oldest = undefined;\n      this.newest = undefined;\n    }\n    // Remove last strong reference to <entry> and remove links from the purged\n    // entry being returned:\n    entry[NEWER] = entry[OLDER] = undefined;\n    this._keymap.delete(entry.key);\n    --this.size;\n    return [entry.key, entry.value];\n  }\n};\n\n// ----------------------------------------------------------------------------\n// Following code is optional and can be removed without breaking the core\n// functionality.\n\nLRUMap.prototype.find = function(key) {\n  let e = this._keymap.get(key);\n  return e ? e.value : undefined;\n};\n\nLRUMap.prototype.has = function(key) {\n  return this._keymap.has(key);\n};\n\nLRUMap.prototype['delete'] = function(key) {\n  var entry = this._keymap.get(key);\n  if (!entry) return;\n  this._keymap.delete(entry.key);\n  if (entry[NEWER] && entry[OLDER]) {\n    // relink the older entry with the newer entry\n    entry[OLDER][NEWER] = entry[NEWER];\n    entry[NEWER][OLDER] = entry[OLDER];\n  } else if (entry[NEWER]) {\n    // remove the link to us\n    entry[NEWER][OLDER] = undefined;\n    // link the newer entry to head\n    this.oldest = entry[NEWER];\n  } else if (entry[OLDER]) {\n    // remove the link to us\n    entry[OLDER][NEWER] = undefined;\n    // link the newer entry to head\n    this.newest = entry[OLDER];\n  } else {// if(entry[OLDER] === undefined && entry.newer === undefined) {\n    this.oldest = this.newest = undefined;\n  }\n\n  this.size--;\n  return entry.value;\n};\n\nLRUMap.prototype.clear = function() {\n  // Not clearing links should be safe, as we don't expose live links to user\n  this.oldest = this.newest = undefined;\n  this.size = 0;\n  this._keymap.clear();\n};\n\n\nfunction EntryIterator(oldestEntry) { this.entry = oldestEntry; }\nEntryIterator.prototype[Symbol.iterator] = function() { return this; }\nEntryIterator.prototype.next = function() {\n  let ent = this.entry;\n  if (ent) {\n    this.entry = ent[NEWER];\n    return { done: false, value: [ent.key, ent.value] };\n  } else {\n    return { done: true, value: undefined };\n  }\n};\n\n\nfunction KeyIterator(oldestEntry) { this.entry = oldestEntry; }\nKeyIterator.prototype[Symbol.iterator] = function() { return this; }\nKeyIterator.prototype.next = function() {\n  let ent = this.entry;\n  if (ent) {\n    this.entry = ent[NEWER];\n    return { done: false, value: ent.key };\n  } else {\n    return { done: true, value: undefined };\n  }\n};\n\nfunction ValueIterator(oldestEntry) { this.entry = oldestEntry; }\nValueIterator.prototype[Symbol.iterator] = function() { return this; }\nValueIterator.prototype.next = function() {\n  let ent = this.entry;\n  if (ent) {\n    this.entry = ent[NEWER];\n    return { done: false, value: ent.value };\n  } else {\n    return { done: true, value: undefined };\n  }\n};\n\n\nLRUMap.prototype.keys = function() {\n  return new KeyIterator(this.oldest);\n};\n\nLRUMap.prototype.values = function() {\n  return new ValueIterator(this.oldest);\n};\n\nLRUMap.prototype.entries = function() {\n  return this;\n};\n\nLRUMap.prototype[Symbol.iterator] = function() {\n  return new EntryIterator(this.oldest);\n};\n\nLRUMap.prototype.forEach = function(fun, thisObj) {\n  if (typeof thisObj !== 'object') {\n    thisObj = this;\n  }\n  let entry = this.oldest;\n  while (entry) {\n    fun.call(thisObj, entry.value, entry.key, this);\n    entry = entry[NEWER];\n  }\n};\n\n/** Returns a JSON (array) representation */\nLRUMap.prototype.toJSON = function() {\n  var s = new Array(this.size), i = 0, entry = this.oldest;\n  while (entry) {\n    s[i++] = { key: entry.key, value: entry.value };\n    entry = entry[NEWER];\n  }\n  return s;\n};\n\n/** Returns a String representation */\nLRUMap.prototype.toString = function() {\n  var s = '', entry = this.oldest;\n  while (entry) {\n    s += String(entry.key)+':'+entry.value;\n    entry = entry[NEWER];\n    if (entry) {\n      s += ' < ';\n    }\n  }\n  return s;\n};\n\n});\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n    const map = Object.create(null);\r\n    const list = str.split(',');\r\n    for (let i = 0; i < list.length; i++) {\r\n        map[list[i]] = true;\r\n    }\r\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\r\n}\n\n/**\r\n * dev only flag -> name mapping\r\n */\r\nconst PatchFlagNames = {\r\n    [1 /* TEXT */]: `TEXT`,\r\n    [2 /* CLASS */]: `CLASS`,\r\n    [4 /* STYLE */]: `STYLE`,\r\n    [8 /* PROPS */]: `PROPS`,\r\n    [16 /* FULL_PROPS */]: `FULL_PROPS`,\r\n    [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\r\n    [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\r\n    [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\r\n    [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\r\n    [512 /* NEED_PATCH */]: `NEED_PATCH`,\r\n    [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\r\n    [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\r\n    [-1 /* HOISTED */]: `HOISTED`,\r\n    [-2 /* BAIL */]: `BAIL`\r\n};\n\n/**\r\n * Dev only\r\n */\r\nconst slotFlagsText = {\r\n    [1 /* STABLE */]: 'STABLE',\r\n    [2 /* DYNAMIC */]: 'DYNAMIC',\r\n    [3 /* FORWARDED */]: 'FORWARDED'\r\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\r\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\r\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\r\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n    // Split the content into individual lines but capture the newline sequence\r\n    // that separated each line. This is important because the actual sequence is\r\n    // needed to properly take into account the full line length for offset\r\n    // comparison\r\n    let lines = source.split(/(\\r?\\n)/);\r\n    // Separate the lines and newline sequences into separate arrays for easier referencing\r\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\r\n    lines = lines.filter((_, idx) => idx % 2 === 0);\r\n    let count = 0;\r\n    const res = [];\r\n    for (let i = 0; i < lines.length; i++) {\r\n        count +=\r\n            lines[i].length +\r\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\r\n        if (count >= start) {\r\n            for (let j = i - range; j <= i + range || end > count; j++) {\r\n                if (j < 0 || j >= lines.length)\r\n                    continue;\r\n                const line = j + 1;\r\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\r\n                const lineLength = lines[j].length;\r\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\r\n                if (j === i) {\r\n                    // push underline\r\n                    const pad = start - (count - (lineLength + newLineSeqLength));\r\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\r\n                }\r\n                else if (j > i) {\r\n                    if (end > count) {\r\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\r\n                        res.push(`   |  ` + '^'.repeat(length));\r\n                    }\r\n                    count += lineLength + newLineSeqLength;\r\n                }\r\n            }\r\n            break;\r\n        }\r\n    }\r\n    return res.join('\\n');\r\n}\n\n/**\r\n * On the client we only need to offer special cases for boolean attributes that\r\n * have different names from their corresponding dom properties:\r\n * - itemscope -> N/A\r\n * - allowfullscreen -> allowFullscreen\r\n * - formnovalidate -> formNoValidate\r\n * - ismap -> isMap\r\n * - nomodule -> noModule\r\n * - novalidate -> noValidate\r\n * - readonly -> readOnly\r\n */\r\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\r\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\r\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\r\n    `loop,open,required,reversed,scoped,seamless,` +\r\n    `checked,muted,multiple,selected`);\r\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\r\nconst attrValidationCache = {};\r\nfunction isSSRSafeAttrName(name) {\r\n    if (attrValidationCache.hasOwnProperty(name)) {\r\n        return attrValidationCache[name];\r\n    }\r\n    const isUnsafe = unsafeAttrCharRE.test(name);\r\n    if (isUnsafe) {\r\n        console.error(`unsafe attribute name: ${name}`);\r\n    }\r\n    return (attrValidationCache[name] = !isUnsafe);\r\n}\r\nconst propsToAttrMap = {\r\n    acceptCharset: 'accept-charset',\r\n    className: 'class',\r\n    htmlFor: 'for',\r\n    httpEquiv: 'http-equiv'\r\n};\r\n/**\r\n * CSS properties that accept plain numbers\r\n */\r\nconst isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +\r\n    `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +\r\n    `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +\r\n    `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +\r\n    `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +\r\n    `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +\r\n    // SVG\r\n    `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +\r\n    `stroke-miterlimit,stroke-opacity,stroke-width`);\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\r\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\r\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\r\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\r\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\r\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\r\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\r\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\r\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\r\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\r\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\r\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\r\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\r\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\r\n    `value,width,wrap`);\r\n/**\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\r\n */\r\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\r\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\r\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\r\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\r\n    `color-interpolation-filters,color-profile,color-rendering,` +\r\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\r\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\r\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\r\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\r\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\r\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\r\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\r\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\r\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\r\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\r\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\r\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\r\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\r\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\r\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\r\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\r\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\r\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\r\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\r\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\r\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\r\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\r\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\r\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\r\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\r\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\r\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\r\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\r\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\r\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\r\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\r\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\r\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\r\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nfunction normalizeStyle(value) {\r\n    if (isArray(value)) {\r\n        const res = {};\r\n        for (let i = 0; i < value.length; i++) {\r\n            const item = value[i];\r\n            const normalized = isString(item)\r\n                ? parseStringStyle(item)\r\n                : normalizeStyle(item);\r\n            if (normalized) {\r\n                for (const key in normalized) {\r\n                    res[key] = normalized[key];\r\n                }\r\n            }\r\n        }\r\n        return res;\r\n    }\r\n    else if (isString(value)) {\r\n        return value;\r\n    }\r\n    else if (isObject(value)) {\r\n        return value;\r\n    }\r\n}\r\nconst listDelimiterRE = /;(?![^(]*\\))/g;\r\nconst propertyDelimiterRE = /:(.+)/;\r\nfunction parseStringStyle(cssText) {\r\n    const ret = {};\r\n    cssText.split(listDelimiterRE).forEach(item => {\r\n        if (item) {\r\n            const tmp = item.split(propertyDelimiterRE);\r\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\r\n        }\r\n    });\r\n    return ret;\r\n}\r\nfunction stringifyStyle(styles) {\r\n    let ret = '';\r\n    if (!styles || isString(styles)) {\r\n        return ret;\r\n    }\r\n    for (const key in styles) {\r\n        const value = styles[key];\r\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\r\n        if (isString(value) ||\r\n            (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {\r\n            // only render valid values\r\n            ret += `${normalizedKey}:${value};`;\r\n        }\r\n    }\r\n    return ret;\r\n}\r\nfunction normalizeClass(value) {\r\n    let res = '';\r\n    if (isString(value)) {\r\n        res = value;\r\n    }\r\n    else if (isArray(value)) {\r\n        for (let i = 0; i < value.length; i++) {\r\n            const normalized = normalizeClass(value[i]);\r\n            if (normalized) {\r\n                res += normalized + ' ';\r\n            }\r\n        }\r\n    }\r\n    else if (isObject(value)) {\r\n        for (const name in value) {\r\n            if (value[name]) {\r\n                res += name + ' ';\r\n            }\r\n        }\r\n    }\r\n    return res.trim();\r\n}\r\nfunction normalizeProps(props) {\r\n    if (!props)\r\n        return null;\r\n    let { class: klass, style } = props;\r\n    if (klass && !isString(klass)) {\r\n        props.class = normalizeClass(klass);\r\n    }\r\n    if (style) {\r\n        props.style = normalizeStyle(style);\r\n    }\r\n    return props;\r\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\r\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\r\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\r\n    'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\r\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\r\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\r\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\r\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\r\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\r\n    'option,output,progress,select,textarea,details,dialog,menu,' +\r\n    'summary,template,blockquote,iframe,tfoot';\r\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\r\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\r\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\r\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\r\n    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\r\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\r\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\r\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\r\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\r\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\r\n    'text,textPath,title,tspan,unknown,use,view';\r\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\r\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\r\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\r\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst escapeRE = /[\"'&<>]/;\r\nfunction escapeHtml(string) {\r\n    const str = '' + string;\r\n    const match = escapeRE.exec(str);\r\n    if (!match) {\r\n        return str;\r\n    }\r\n    let html = '';\r\n    let escaped;\r\n    let index;\r\n    let lastIndex = 0;\r\n    for (index = match.index; index < str.length; index++) {\r\n        switch (str.charCodeAt(index)) {\r\n            case 34: // \"\r\n                escaped = '&quot;';\r\n                break;\r\n            case 38: // &\r\n                escaped = '&amp;';\r\n                break;\r\n            case 39: // '\r\n                escaped = '&#39;';\r\n                break;\r\n            case 60: // <\r\n                escaped = '&lt;';\r\n                break;\r\n            case 62: // >\r\n                escaped = '&gt;';\r\n                break;\r\n            default:\r\n                continue;\r\n        }\r\n        if (lastIndex !== index) {\r\n            html += str.substring(lastIndex, index);\r\n        }\r\n        lastIndex = index + 1;\r\n        html += escaped;\r\n    }\r\n    return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\r\n}\r\n// https://www.w3.org/TR/html52/syntax.html#comments\r\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\r\nfunction escapeHtmlComment(src) {\r\n    return src.replace(commentStripRE, '');\r\n}\n\nfunction looseCompareArrays(a, b) {\r\n    if (a.length !== b.length)\r\n        return false;\r\n    let equal = true;\r\n    for (let i = 0; equal && i < a.length; i++) {\r\n        equal = looseEqual(a[i], b[i]);\r\n    }\r\n    return equal;\r\n}\r\nfunction looseEqual(a, b) {\r\n    if (a === b)\r\n        return true;\r\n    let aValidType = isDate(a);\r\n    let bValidType = isDate(b);\r\n    if (aValidType || bValidType) {\r\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\r\n    }\r\n    aValidType = isArray(a);\r\n    bValidType = isArray(b);\r\n    if (aValidType || bValidType) {\r\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\r\n    }\r\n    aValidType = isObject(a);\r\n    bValidType = isObject(b);\r\n    if (aValidType || bValidType) {\r\n        /* istanbul ignore if: this if will probably never be called */\r\n        if (!aValidType || !bValidType) {\r\n            return false;\r\n        }\r\n        const aKeysCount = Object.keys(a).length;\r\n        const bKeysCount = Object.keys(b).length;\r\n        if (aKeysCount !== bKeysCount) {\r\n            return false;\r\n        }\r\n        for (const key in a) {\r\n            const aHasKey = a.hasOwnProperty(key);\r\n            const bHasKey = b.hasOwnProperty(key);\r\n            if ((aHasKey && !bHasKey) ||\r\n                (!aHasKey && bHasKey) ||\r\n                !looseEqual(a[key], b[key])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return String(a) === String(b);\r\n}\r\nfunction looseIndexOf(arr, val) {\r\n    return arr.findIndex(item => looseEqual(item, val));\r\n}\n\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nconst toDisplayString = (val) => {\r\n    return val == null\r\n        ? ''\r\n        : isArray(val) || (isObject(val) && val.toString === objectToString)\r\n            ? JSON.stringify(val, replacer, 2)\r\n            : String(val);\r\n};\r\nconst replacer = (_key, val) => {\r\n    // can't use isRef here since @vue/shared has no deps\r\n    if (val && val.__v_isRef) {\r\n        return replacer(_key, val.value);\r\n    }\r\n    else if (isMap(val)) {\r\n        return {\r\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\r\n                entries[`${key} =>`] = val;\r\n                return entries;\r\n            }, {})\r\n        };\r\n    }\r\n    else if (isSet(val)) {\r\n        return {\r\n            [`Set(${val.size})`]: [...val.values()]\r\n        };\r\n    }\r\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\r\n        return String(val);\r\n    }\r\n    return val;\r\n};\n\n/**\r\n * List of @babel/parser plugins that are used for template expression\r\n * transforms and SFC script transforms. By default we enable proposals slated\r\n * for ES2020. This will need to be updated as the spec moves forward.\r\n * Full list at https://babeljs.io/docs/en/next/babel-parser#plugins\r\n */\r\nconst babelParserDefaultPlugins = [\r\n    'bigInt',\r\n    'optionalChaining',\r\n    'nullishCoalescingOperator'\r\n];\r\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n    ? Object.freeze({})\r\n    : {};\r\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst NOOP = () => { };\r\n/**\r\n * Always return false.\r\n */\r\nconst NO = () => false;\r\nconst onRE = /^on[^a-z]/;\r\nconst isOn = (key) => onRE.test(key);\r\nconst isModelListener = (key) => key.startsWith('onUpdate:');\r\nconst extend = Object.assign;\r\nconst remove = (arr, el) => {\r\n    const i = arr.indexOf(el);\r\n    if (i > -1) {\r\n        arr.splice(i, 1);\r\n    }\r\n};\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\r\nconst isArray = Array.isArray;\r\nconst isMap = (val) => toTypeString(val) === '[object Map]';\r\nconst isSet = (val) => toTypeString(val) === '[object Set]';\r\nconst isDate = (val) => val instanceof Date;\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst toRawType = (value) => {\r\n    // extract \"RawType\" from strings like \"[object RawType]\"\r\n    return toTypeString(value).slice(8, -1);\r\n};\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\nconst isIntegerKey = (key) => isString(key) &&\r\n    key !== 'NaN' &&\r\n    key[0] !== '-' &&\r\n    '' + parseInt(key, 10) === key;\r\nconst isReservedProp = /*#__PURE__*/ makeMap(\r\n// the leading comma is intentional so empty string \"\" is also included\r\n',key,ref,' +\r\n    'onVnodeBeforeMount,onVnodeMounted,' +\r\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\r\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\n/**\r\n * @private\r\n */\r\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\r\n/**\r\n * @private\r\n */\r\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\r\n/**\r\n * @private\r\n */\r\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\r\n// compare whether a value has changed, accounting for NaN.\r\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\r\nconst invokeArrayFns = (fns, arg) => {\r\n    for (let i = 0; i < fns.length; i++) {\r\n        fns[i](arg);\r\n    }\r\n};\r\nconst def = (obj, key, value) => {\r\n    Object.defineProperty(obj, key, {\r\n        configurable: true,\r\n        enumerable: false,\r\n        value\r\n    });\r\n};\r\nconst toNumber = (val) => {\r\n    const n = parseFloat(val);\r\n    return isNaN(n) ? val : n;\r\n};\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n    return (_globalThis ||\r\n        (_globalThis =\r\n            typeof globalThis !== 'undefined'\r\n                ? globalThis\r\n                : typeof self !== 'undefined'\r\n                    ? self\r\n                    : typeof window !== 'undefined'\r\n                        ? window\r\n                        : typeof global !== 'undefined'\r\n                            ? global\r\n                            : {}));\r\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, babelParserDefaultPlugins, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, invokeArrayFns, isArray, isBooleanAttr, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   \u201CsourceRoot\u201D, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n", "/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n", "// @flow\nimport type { TokContext } from \"./context\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the \u201Cargument\u201D subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string,\n  beforeExpr?: boolean,\n  startsExpr?: boolean,\n  rightAssociative?: boolean,\n  isLoop?: boolean,\n  isAssign?: boolean,\n  prefix?: boolean,\n  postfix?: boolean,\n  binop?: ?number,\n};\n\nexport class TokenType {\n  label: string;\n  keyword: ?string;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: ?number;\n  updateContext: ?(context: Array<TokContext>) => void;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    this.updateContext = null;\n  }\n}\n\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = new TokenType(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return new TokenType(name, { beforeExpr, binop });\n}\n\nexport const types: { [name: string]: TokenType } = {\n  num: new TokenType(\"num\", { startsExpr }),\n  bigint: new TokenType(\"bigint\", { startsExpr }),\n  decimal: new TokenType(\"decimal\", { startsExpr }),\n  regexp: new TokenType(\"regexp\", { startsExpr }),\n  string: new TokenType(\"string\", { startsExpr }),\n  name: new TokenType(\"name\", { startsExpr }),\n  privateName: new TokenType(\"#name\", { startsExpr }),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", { beforeExpr, startsExpr }),\n  bracketHashL: new TokenType(\"#[\", { beforeExpr, startsExpr }),\n  bracketBarL: new TokenType(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: new TokenType(\"]\"),\n  bracketBarR: new TokenType(\"|]\"),\n  braceL: new TokenType(\"{\", { beforeExpr, startsExpr }),\n  braceBarL: new TokenType(\"{|\", { beforeExpr, startsExpr }),\n  braceHashL: new TokenType(\"#{\", { beforeExpr, startsExpr }),\n  braceR: new TokenType(\"}\", { beforeExpr }),\n  braceBarR: new TokenType(\"|}\"),\n  parenL: new TokenType(\"(\", { beforeExpr, startsExpr }),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", { beforeExpr }),\n  semi: new TokenType(\";\", { beforeExpr }),\n  colon: new TokenType(\":\", { beforeExpr }),\n  doubleColon: new TokenType(\"::\", { beforeExpr }),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", { beforeExpr }),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", { beforeExpr }),\n  template: new TokenType(\"template\"),\n  ellipsis: new TokenType(\"...\", { beforeExpr }),\n  backQuote: new TokenType(\"`\", { startsExpr }),\n  dollarBraceL: new TokenType(\"${\", { beforeExpr, startsExpr }),\n  at: new TokenType(\"@\"),\n  hash: new TokenType(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: new TokenType(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", { beforeExpr, isAssign }),\n  assign: new TokenType(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: new TokenType(\"_=\", { beforeExpr, isAssign }),\n  // This is only needed to support % as a Hack-pipe topic token. If the proposal\n  // ends up choosing a different token, it can be merged with tt.assign.\n  moduloAssign: new TokenType(\"_=\", { beforeExpr, isAssign }),\n  incDec: new TokenType(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: new TokenType(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: new TokenType(\"~\", { beforeExpr, prefix, startsExpr }),\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: new TokenType(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: new TokenType(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: new TokenType(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _for: createKeyword(\"for\", { isLoop }),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _while: createKeyword(\"while\", { isLoop }),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n};\n", "// @flow\n\nimport * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n", "// @flow\n\nimport { lineBreakG } from \"./whitespace\";\n\nexport type Pos = {\n  start: number,\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n\n  constructor(line: number, col: number) {\n    this.line = line;\n    this.column = col;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: ?string;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // $FlowIgnore (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nexport function getLineInfo(input: string, offset: number): Position {\n  let line = 1;\n  let lineStart = 0;\n  let match;\n  lineBreakG.lastIndex = 0;\n  while ((match = lineBreakG.exec(input)) && match.index < offset) {\n    line++;\n    lineStart = lineBreakG.lastIndex;\n  }\n\n  return new Position(line, offset - lineStart);\n}\n", "// @flow\n\nimport type { Options } from \"../options\";\nimport type State from \"../tokenizer/state\";\nimport type { PluginsMap } from \"./index\";\nimport type ScopeHandler from \"../util/scope\";\nimport type ExpressionScopeHandler from \"../util/expression-scope\";\nimport type ClassScopeHandler from \"../util/class-scope\";\nimport type ProductionParameterHandler from \"../util/production-parameter\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<*>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: ?string;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n\n  hasPlugin(name: string): boolean {\n    return this.plugins.has(name);\n  }\n\n  getPluginOption(plugin: string, name: string) {\n    // $FlowIssue\n    if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n  }\n}\n", "// @flow\n\n/*:: declare var invariant; */\n\nimport BaseParser from \"./base\";\nimport type { Comment, Node } from \"../types\";\nimport * as charCodes from \"charcodes\";\n\n/**\n * A whitespace token containing comments\n * @typedef CommentWhitespace\n * @type {object}\n * @property {number} start - the start of the whitespace token.\n * @property {number} end - the end of the whitespace token.\n * @property {Array<Comment>} comments - the containing comments\n * @property {Node | null} leadingNode - the immediately preceding AST node of the whitespace token\n * @property {Node | null} trailingNode - the immediately following AST node of the whitespace token\n * @property {Node | null} containingNode - the innermost AST node containing the whitespace\n *                                         with minimal size (|end - start|)\n */\nexport type CommentWhitespace = {\n  start: number,\n  end: number,\n  comments: Array<Comment>,\n  leadingNode: Node | null,\n  trailingNode: Node | null,\n  containingNode: Node | null,\n};\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n *\n * @param {Node} node\n * @param {Array<Comment>} comments\n */\nfunction setTrailingComments(node: Node, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n *\n * @param {Node} node\n * @param {Array<Comment>} comments\n */\nexport function setInnerComments(node: Node, comments: Array<Comment> | void) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else if (comments !== undefined) {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n *\n * @param {Node} node\n * @param {Array<Node>} elements\n * @param {Array<Comment>} comments\n */\nfunction adjustInnerComments(\n  node: Node,\n  elements: Array<Node>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\n/** @class CommentsParser */\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.comments.push(comment);\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   *\n   * @param {Node} node\n   * @returns {void}\n   * @memberof CommentsParser\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   *\n   * @memberof CommentsParser\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        commentWS.trailingNode.leadingComments = comments;\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const { containingNode: node, start: commentStart } = commentWS;\n      if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaning commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   *\n   * @memberof CommentsParser\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterepret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing */\n  // async /* 1 */ function f() {}\n  /*\n   * the comment whitespace \"* 1 *\" has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark \"* 1 *\" as\n   * inner comments. So \"* 1 *\" should be detached from the Identifier node.\n   *\n   * @param {N.Node} node the last finished AST node _before_ current token\n   * @returns\n   * @memberof CommentsParser\n   */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n}\n", "// @flow\n\nexport const ErrorCodes = Object.freeze({\n  SyntaxError: \"BABEL_PARSER_SYNTAX_ERROR\",\n  SourceTypeModuleError: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\",\n});\n\nexport type ErrorCode = $Values<typeof ErrorCodes>;\n", "// @flow\n\nimport { makeErrorTemplates, ErrorCodes } from \"./error\";\n\n/* eslint sort-keys: \"error\" */\n\n/**\n * @module parser/error-message\n */\n\n// The Errors key follows https://cs.chromium.org/chromium/src/v8/src/common/message-template.h unless it does not exist\nexport const ErrorMessages = makeErrorTemplates(\n  {\n    AccessorIsGenerator: \"A %0ter cannot be a generator.\",\n    ArgumentsInClass:\n      \"'arguments' is only allowed in functions and class methods.\",\n    AsyncFunctionInSingleStatementContext:\n      \"Async functions can only be declared at the top level or inside a block.\",\n    AwaitBindingIdentifier:\n      \"Can not use 'await' as identifier inside an async function.\",\n    AwaitBindingIdentifierInStaticBlock:\n      \"Can not use 'await' as identifier inside a static block.\",\n    AwaitExpressionFormalParameter:\n      \"'await' is not allowed in async function parameters.\",\n    AwaitNotInAsyncContext:\n      \"'await' is only allowed within async functions and at the top levels of modules.\",\n    AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n    BadGetterArity: \"A 'get' accesor must not have any formal parameters.\",\n    BadSetterArity: \"A 'set' accesor must have exactly one formal parameter.\",\n    BadSetterRestParameter:\n      \"A 'set' accesor function argument must not be a rest parameter.\",\n    ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n    ConstructorClassPrivateField:\n      \"Classes may not have a private field named '#constructor'.\",\n    ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n    ConstructorIsAsync: \"Constructor can't be an async function.\",\n    ConstructorIsGenerator: \"Constructor can't be a generator.\",\n    DeclarationMissingInitializer: \"'%0' require an initialization value.\",\n    DecoratorBeforeExport:\n      \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.\",\n    DecoratorConstructor:\n      \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n    DecoratorExportClass:\n      \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n    DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n    DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n    DeletePrivateField: \"Deleting a private field is not allowed.\",\n    DestructureNamedImport:\n      \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n    DuplicateConstructor: \"Duplicate constructor in the same class.\",\n    DuplicateDefaultExport: \"Only one default export allowed per module.\",\n    DuplicateExport:\n      \"`%0` has already been exported. Exported identifiers must be unique.\",\n    DuplicateProto: \"Redefinition of __proto__ property.\",\n    DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n    ElementAfterRest: \"Rest element must be last element.\",\n    EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n    ExportBindingIsString:\n      \"A string literal cannot be used as an exported binding without `from`.\\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?\",\n    ExportDefaultFromAsIdentifier:\n      \"'from' is not allowed as an identifier after 'export default'.\",\n    ForInOfLoopInitializer:\n      \"'%0' loop variable declaration may not have an initializer.\",\n    ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n    ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n    GeneratorInSingleStatementContext:\n      \"Generators can only be declared at the top level or inside a block.\",\n    IllegalBreakContinue: \"Unsyntactic %0.\",\n    IllegalLanguageModeDirective:\n      \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n    IllegalReturn: \"'return' outside of function.\",\n    ImportBindingIsString:\n      'A string literal cannot be used as an imported binding.\\n- Did you mean `import { \"%0\" as foo }`?',\n    ImportCallArgumentTrailingComma:\n      \"Trailing comma is disallowed inside import(...) arguments.\",\n    ImportCallArity: \"`import()` requires exactly %0.\",\n    ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n    ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n    InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n    InvalidCodePoint: \"Code point out of bounds.\",\n    InvalidDecimal: \"Invalid decimal.\",\n    InvalidDigit: \"Expected number in radix %0.\",\n    InvalidEscapeSequence: \"Bad character escape sequence.\",\n    InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n    InvalidEscapedReservedWord: \"Escape sequence in keyword %0.\",\n    InvalidIdentifier: \"Invalid identifier %0.\",\n    InvalidLhs: \"Invalid left-hand side in %0.\",\n    InvalidLhsBinding: \"Binding invalid left-hand side in %0.\",\n    InvalidNumber: \"Invalid number.\",\n    InvalidOrMissingExponent:\n      \"Floating-point numbers require a valid exponent after the 'e'.\",\n    InvalidOrUnexpectedToken: \"Unexpected character '%0'.\",\n    InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n    InvalidPrivateFieldResolution: \"Private name #%0 is not defined.\",\n    InvalidPropertyBindingPattern: \"Binding member expression.\",\n    InvalidRecordProperty:\n      \"Only properties and spread elements are allowed in record definitions.\",\n    InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n    LabelRedeclaration: \"Label '%0' is already declared.\",\n    LetInLexicalBinding:\n      \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n    LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n    MalformedRegExpFlags: \"Invalid regular expression flag.\",\n    MissingClassName: \"A class name is required.\",\n    MissingEqInAssignment:\n      \"Only '=' operator can be used for specifying default value.\",\n    MissingSemicolon: \"Missing semicolon.\",\n    MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n    MixingCoalesceWithLogical:\n      \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n    ModuleAttributeDifferentFromType:\n      \"The only accepted module attribute is `type`.\",\n    ModuleAttributeInvalidValue:\n      \"Only string literals are allowed as module attribute values.\",\n    ModuleAttributesWithDuplicateKeys:\n      'Duplicate key \"%0\" is not allowed in module attributes.',\n    ModuleExportNameHasLoneSurrogate:\n      \"An export name cannot include a lone surrogate, found '\\\\u%0'.\",\n    ModuleExportUndefined: \"Export '%0' is not defined.\",\n    MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n    NewlineAfterThrow: \"Illegal newline after throw.\",\n    NoCatchOrFinally: \"Missing catch or finally clause.\",\n    NumberIdentifier: \"Identifier directly after number.\",\n    NumericSeparatorInEscapeSequence:\n      \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n    ObsoleteAwaitStar:\n      \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n    OptionalChainingNoNew:\n      \"Constructors in/after an Optional Chain are not allowed.\",\n    OptionalChainingNoTemplate:\n      \"Tagged Template Literals are not allowed in optionalChain.\",\n    OverrideOnConstructor:\n      \"'override' modifier cannot appear on a constructor declaration.\",\n    ParamDupe: \"Argument name clash.\",\n    PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n    PatternHasMethod: \"Object pattern can't contain methods.\",\n    PipeBodyIsTighter:\n      \"Unexpected %0 after pipeline body; any %0 expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n    PipeTopicRequiresHackPipes:\n      'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n    PipeTopicUnbound:\n      \"Topic reference is unbound; it must be inside a pipe body.\",\n    PipeTopicUnconfiguredToken:\n      'Invalid topic token %0. In order to use %0 as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"%0\" }.',\n    PipeTopicUnused:\n      \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n\n    // Messages whose codes start with \u201CPipeline\u201D or \u201CPrimaryTopic\u201D\n    // are retained for backwards compatibility\n    // with the deprecated smart-mix pipe operator proposal plugin.\n    // They are subject to removal in a future major version.\n    PipelineBodyNoArrow:\n      'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n    PipelineBodySequenceExpression:\n      \"Pipeline body may not be a comma-separated sequence expression.\",\n    PipelineHeadSequenceExpression:\n      \"Pipeline head should not be a comma-separated sequence expression.\",\n    PipelineTopicUnused:\n      \"Pipeline is in topic style but does not use topic reference.\",\n    PrimaryTopicNotAllowed:\n      \"Topic reference was used in a lexical context without topic binding.\",\n    PrimaryTopicRequiresSmartPipeline:\n      'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n\n    PrivateInExpectedIn:\n      \"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).\",\n    PrivateNameRedeclaration: \"Duplicate private name #%0.\",\n    RecordExpressionBarIncorrectEndSyntaxType:\n      \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n    RecordExpressionBarIncorrectStartSyntaxType:\n      \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n    RecordExpressionHashIncorrectStartSyntaxType:\n      \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n    RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n    RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n    SloppyFunction:\n      \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n    StaticPrototype: \"Classes may not have static property named prototype.\",\n    StrictDelete: \"Deleting local variable in strict mode.\",\n    StrictEvalArguments: \"Assigning to '%0' in strict mode.\",\n    StrictEvalArgumentsBinding: \"Binding '%0' in strict mode.\",\n    StrictFunction:\n      \"In strict mode code, functions can only be declared at top level or inside a block.\",\n    StrictNumericEscape:\n      \"The only valid numeric escape in strict mode is '\\\\0'.\",\n    StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n    StrictWith: \"'with' in strict mode.\",\n    SuperNotAllowed:\n      \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n    SuperPrivateField: \"Private fields can't be accessed on super.\",\n    TrailingDecorator: \"Decorators must be attached to a class element.\",\n    TupleExpressionBarIncorrectEndSyntaxType:\n      \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n    TupleExpressionBarIncorrectStartSyntaxType:\n      \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n    TupleExpressionHashIncorrectStartSyntaxType:\n      \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n    UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n    UnexpectedAwaitAfterPipelineBody:\n      'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n    UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n    UnexpectedImportExport:\n      \"'import' and 'export' may only appear at the top level.\",\n    UnexpectedKeyword: \"Unexpected keyword '%0'.\",\n    UnexpectedLeadingDecorator:\n      \"Leading decorators must be attached to a class declaration.\",\n    UnexpectedLexicalDeclaration:\n      \"Lexical declaration cannot appear in a single-statement context.\",\n    UnexpectedNewTarget:\n      \"`new.target` can only be used in functions or class properties.\",\n    UnexpectedNumericSeparator:\n      \"A numeric separator is only allowed between two digits.\",\n    UnexpectedPrivateField:\n      \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n    UnexpectedReservedWord: \"Unexpected reserved word '%0'.\",\n    UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n    UnexpectedToken: \"Unexpected token '%0'.\",\n    UnexpectedTokenUnaryExponentiation:\n      \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n    UnsupportedBind: \"Binding should be performed on object property.\",\n    UnsupportedDecoratorExport:\n      \"A decorated export must export a class declaration.\",\n    UnsupportedDefaultExport:\n      \"Only expressions, functions or classes are allowed as the `default` export.\",\n    UnsupportedImport:\n      \"`import` can only be used in `import()` or `import.meta`.\",\n    UnsupportedMetaProperty: \"The only valid meta property for %0 is %0.%1.\",\n    UnsupportedParameterDecorator:\n      \"Decorators cannot be used to decorate parameters.\",\n    UnsupportedPropertyDecorator:\n      \"Decorators cannot be used to decorate object literal properties.\",\n    UnsupportedSuper:\n      \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n    UnterminatedComment: \"Unterminated comment.\",\n    UnterminatedRegExp: \"Unterminated regular expression.\",\n    UnterminatedString: \"Unterminated string constant.\",\n    UnterminatedTemplate: \"Unterminated template.\",\n    VarRedeclaration: \"Identifier '%0' has already been declared.\",\n    YieldBindingIdentifier:\n      \"Can not use 'yield' as identifier inside a generator.\",\n    YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n    ZeroDigitNumericSeparator:\n      \"Numeric separator can not be used after leading 0.\",\n  },\n  /* code */ ErrorCodes.SyntaxError,\n);\n\nexport const SourceTypeModuleErrorMessages = makeErrorTemplates(\n  {\n    ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: \"module\"'`,\n    ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n  },\n  /* code */ ErrorCodes.SourceTypeModuleError,\n);\n", "// @flow\n/* eslint sort-keys: \"error\" */\nimport { getLineInfo, type Position } from \"../util/location\";\nimport CommentsParser from \"./comments\";\nimport { type ErrorCode, ErrorCodes } from \"./error-codes\";\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\ntype ErrorContext = {\n  pos: number,\n  loc: Position,\n  missingPlugin?: Array<string>,\n  code?: string,\n  reasonCode?: String,\n};\nexport type ParsingError = SyntaxError & ErrorContext;\n\nexport type ErrorTemplate = {\n  code: ErrorCode,\n  template: string,\n  reasonCode: string,\n};\nexport type ErrorTemplates = {\n  [key: string]: ErrorTemplate,\n};\n\nexport function makeErrorTemplates(\n  messages: {\n    [key: string]: string,\n  },\n  code: ErrorCode,\n): ErrorTemplates {\n  const templates: ErrorTemplates = {};\n  Object.keys(messages).forEach(reasonCode => {\n    templates[reasonCode] = Object.freeze({\n      code,\n      reasonCode,\n      template: messages[reasonCode],\n    });\n  });\n  return Object.freeze(templates);\n}\n\nexport { ErrorCodes };\nexport {\n  ErrorMessages as Errors,\n  SourceTypeModuleErrorMessages as SourceTypeModuleErrors,\n} from \"./error-message\";\n\nexport type raiseFunction = (number, ErrorTemplate, ...any) => void;\n\nexport default class ParserError extends CommentsParser {\n  // Forward-declaration: defined in tokenizer/index.js\n  /*::\n  +isLookahead: boolean;\n  */\n\n  getLocationForPosition(pos: number): Position {\n    let loc;\n    if (pos === this.state.start) loc = this.state.startLoc;\n    else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;\n    else if (pos === this.state.end) loc = this.state.endLoc;\n    else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;\n    else loc = getLineInfo(this.input, pos);\n\n    return loc;\n  }\n\n  raise(\n    pos: number,\n    { code, reasonCode, template }: ErrorTemplate,\n    ...params: any\n  ): Error | empty {\n    return this.raiseWithData(pos, { code, reasonCode }, template, ...params);\n  }\n\n  /**\n   * Raise a parsing error on given position pos. If errorRecovery is true,\n   * it will first search current errors and overwrite the error thrown on the exact\n   * position before with the new error message. If errorRecovery is false, it\n   * fallbacks to `raise`.\n   *\n   * @param {number} pos\n   * @param {string} errorTemplate\n   * @param {...any} params\n   * @returns {(Error | empty)}\n   * @memberof ParserError\n   */\n  raiseOverwrite(\n    pos: number,\n    { code, template }: ErrorTemplate,\n    ...params: any\n  ): Error | empty {\n    const loc = this.getLocationForPosition(pos);\n    const message =\n      template.replace(/%(\\d+)/g, (_, i: number) => params[i]) +\n      ` (${loc.line}:${loc.column})`;\n    if (this.options.errorRecovery) {\n      const errors = this.state.errors;\n      for (let i = errors.length - 1; i >= 0; i--) {\n        const error = errors[i];\n        if (error.pos === pos) {\n          return Object.assign(error, { message });\n        } else if (error.pos < pos) {\n          break;\n        }\n      }\n    }\n    return this._raise({ code, loc, pos }, message);\n  }\n\n  raiseWithData(\n    pos: number,\n    data?: {\n      missingPlugin?: Array<string>,\n      code?: string,\n    },\n    errorTemplate: string,\n    ...params: any\n  ): Error | empty {\n    const loc = this.getLocationForPosition(pos);\n    const message =\n      errorTemplate.replace(/%(\\d+)/g, (_, i: number) => params[i]) +\n      ` (${loc.line}:${loc.column})`;\n    return this._raise(Object.assign(({ loc, pos }: Object), data), message);\n  }\n\n  _raise(errorContext: ErrorContext, message: string): Error | empty {\n    // $FlowIgnore\n    const err: SyntaxError & ErrorContext = new SyntaxError(message);\n    Object.assign(err, errorContext);\n    if (this.options.errorRecovery) {\n      if (!this.isLookahead) this.state.errors.push(err);\n      return err;\n    } else {\n      throw err;\n    }\n  }\n}\n", "// @flow\n\nimport { TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport type { ExpressionErrors } from \"../parser/util\";\nimport * as N from \"../types\";\nimport type { Position } from \"../util/location\";\nimport { Errors } from \"../parser/error\";\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    parseRegExpLiteral({ pattern, flags }): N.Node {\n      let regex = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (e) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt;\n      try {\n        // $FlowIgnore\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T: N.Node>(value: any) {\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      return this.estreeParseLiteral(value);\n    }\n\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const directiveLiteral = directive.value;\n\n      const stmt = this.startNodeAt(directive.start, directive.loc.start);\n      const expression = this.startNodeAt(\n        directiveLiteral.start,\n        directiveLiteral.loc.start,\n      );\n\n      expression.value = directiveLiteral.extra.expressionValue;\n      expression.raw = directiveLiteral.extra.raw;\n\n      stmt.expression = this.finishNodeAt(\n        expression,\n        \"Literal\",\n        directiveLiteral.end,\n        directiveLiteral.loc.end,\n      );\n      stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n\n      return this.finishNodeAt(\n        stmt,\n        \"ExpressionStatement\",\n        directive.end,\n        directive.loc.end,\n      );\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(\n      node: N.BodilessFunctionOrMethodBase,\n      isAsync: ?boolean,\n    ): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        this.checkDeclaration(((node: any): N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return ((method: any): N.EstreeProperty | N.EstreeMethodDefinition).value\n        .params;\n    }\n\n    isValidDirective(stmt: N.Statement): boolean {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    stmtToDirective(stmt: N.Statement): N.Directive {\n      const value = stmt.expression.value;\n      const directive = super.stmtToDirective(stmt);\n\n      // Record the expression value as in estree mode we want\n      // the stmt to have the real value e.g. (\"use strict\") and\n      // not the raw value e.g. (\"use\\\\x20strict\")\n      this.addExtra(directive.value, \"expressionValue\", value);\n\n      return directive;\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      ...args: [?boolean, boolean, TokenType, void | (boolean => void)]\n    ): void {\n      super.parseBlockBody(node, ...args);\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      node.body = directiveStatements.concat(node.body);\n      // $FlowIgnore - directives isn't optional in the type definition\n      delete node.directives;\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      );\n      if (method.typeParameters) {\n        // $FlowIgnore\n        method.value.typeParameters = method.typeParameters;\n        delete method.typeParameters;\n      }\n      classBody.body.push(method);\n    }\n\n    parseMaybePrivateName(...args: [boolean]): any {\n      const node = super.parseMaybePrivateName(...args);\n      if (\n        node.type === \"PrivateName\" &&\n        this.getPluginOption(\"estree\", \"classFeatures\")\n      ) {\n        return this.convertPrivateNameToPrivateIdentifier(node);\n      }\n      return node;\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = (node: any);\n      delete node.id;\n      node.name = name;\n      node.type = \"PrivateIdentifier\";\n      return node;\n    }\n\n    isPrivateName(node: N.Node): boolean {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return super.isPrivateName(node);\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    getPrivateNameSV(node: N.Node): string {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return super.getPrivateNameSV(node);\n      }\n      return node.name;\n    }\n\n    parseLiteral<T: N.Node>(value: any, type: $ElementType<T, \"type\">): T {\n      const node = super.parseLiteral<T>(value, type);\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression: ?boolean,\n      isMethod?: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    parseMethod<T: N.MethodLike>(\n      node: T,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: string,\n      inClassScope: boolean = false,\n    ): T {\n      let funcNode = this.startNode();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      funcNode.type = \"FunctionExpression\";\n      delete funcNode.kind;\n      // $FlowIgnore\n      node.value = funcNode;\n      if (type === \"ClassPrivateMethod\") {\n        // $FlowIgnore\n        node.computed = false;\n      }\n      type = \"MethodDefinition\";\n      return this.finishNode(node, type);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = (super.parseClassProperty(...args): any);\n      if (this.getPluginOption(\"estree\", \"classFeatures\")) {\n        propertyNode.type = \"PropertyDefinition\";\n      }\n      return (propertyNode: N.EstreePropertyDefinition);\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = (super.parseClassPrivateProperty(...args): any);\n      if (this.getPluginOption(\"estree\", \"classFeatures\")) {\n        propertyNode.type = \"PropertyDefinition\";\n        propertyNode.computed = false;\n      }\n      return (propertyNode: N.EstreePropertyDefinition);\n    }\n\n    parseObjectMethod(\n      prop: N.ObjectMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n    ): ?N.ObjectMethod {\n      const node: N.EstreeProperty = (super.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ): any);\n\n      if (node) {\n        node.type = \"Property\";\n        if (((node: any): N.ClassMethod).kind === \"method\") node.kind = \"init\";\n        node.shorthand = false;\n      }\n\n      return (node: any);\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startPos: ?number,\n      startLoc: ?Position,\n      isPattern: boolean,\n      refExpressionErrors: ?ExpressionErrors,\n    ): ?N.ObjectProperty {\n      const node: N.EstreeProperty = (super.parseObjectProperty(\n        prop,\n        startPos,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ): any);\n\n      if (node) {\n        node.kind = \"init\";\n        node.type = \"Property\";\n      }\n\n      return (node: any);\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): N.Node {\n      if (node != null && this.isObjectProperty(node)) {\n        this.toAssignable(node.value, isLHS);\n\n        return node;\n      }\n\n      return super.toAssignable(node, isLHS);\n    }\n\n    toAssignableObjectExpressionProp(prop: N.Node, ...args) {\n      if (prop.kind === \"get\" || prop.kind === \"set\") {\n        this.raise(prop.key.start, Errors.PatternHasAccessor);\n      } else if (prop.method) {\n        this.raise(prop.key.start, Errors.PatternHasMethod);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, ...args);\n      }\n    }\n\n    finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(\n      node: T,\n      optional: boolean,\n    ): N.Expression {\n      super.finishCallExpression(node, optional);\n\n      if (node.callee.type === \"Import\") {\n        ((node: N.Node): N.EstreeImportExpression).type = \"ImportExpression\";\n        ((node: N.Node): N.EstreeImportExpression).source = node.arguments[0];\n        if (this.hasPlugin(\"importAssertions\")) {\n          ((node: N.Node): N.EstreeImportExpression).attributes =\n            node.arguments[1] ?? null;\n        }\n        // $FlowIgnore - arguments isn't optional in the type definition\n        delete node.arguments;\n        // $FlowIgnore - callee isn't optional in the type definition\n        delete node.callee;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(node: N.Node) {\n      super.parseExport(node);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            node.type = \"ExportAllDeclaration\";\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls: ?boolean,\n      state: N.ParseSubscriptState,\n    ) {\n      const node = super.parseSubscript(\n        base,\n        startPos,\n        startLoc,\n        noCalls,\n        state,\n      );\n\n      if (state.optionalChainMember) {\n        // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n        if (\n          node.type === \"OptionalMemberExpression\" ||\n          node.type === \"OptionalCallExpression\"\n        ) {\n          node.type = node.type.substring(8); // strip Optional prefix\n        }\n        if (state.stop) {\n          const chain = this.startNodeAtNode(node);\n          chain.expression = node;\n          return this.finishNode(chain, \"ChainExpression\");\n        }\n      } else if (\n        node.type === \"MemberExpression\" ||\n        node.type === \"CallExpression\"\n      ) {\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    isOptionalChain(node: N.Node): boolean {\n      return node.type === \"ChainExpression\";\n    }\n\n    isObjectProperty(node: N.Node): boolean {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    isObjectMethod(node: N.Node): boolean {\n      return node.method || node.kind === \"get\" || node.kind === \"set\";\n    }\n  };\n", "// @flow\n\n// The token context is used to track whether the apostrophe \"`\"\n// starts or ends a string template\n\nimport { types as tt } from \"./types\";\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nexport const types: {\n  [key: string]: TokContext,\n} = {\n  brace: new TokContext(\"{\"),\n  template: new TokContext(\"`\", true),\n};\n\n// Token-specific context update code\n// Note that we should avoid accessing `this.prodParam` in context update,\n// because it is executed immediately when last token is consumed, which may be\n// before `this.prodParam` is updated. e.g.\n// ```\n// function *g() { () => yield / 2 }\n// ```\n// When `=>` is eaten, the context update of `yield` is executed, however,\n// `this.prodParam` still has `[Yield]` production because it is not yet updated\n\ntt.braceR.updateContext = context => {\n  context.pop();\n};\n\n// we don't need to update context for tt.braceBarL because we do not pop context for tt.braceBarR\n// ideally only dollarBraceL \"${\" needs a non-template context\n// in order to indicate that the last \"`\" in `${`\" starts a new string template\n// inside a template element within outer string template.\n// but when we popped such context in `}`, we lost track of whether this\n// `}` matches a `${` or other tokens matching `}`, so we have to push\n// such context in every token that `}` will match.\ntt.braceL.updateContext =\n  tt.braceHashL.updateContext =\n  tt.dollarBraceL.updateContext =\n    context => {\n      context.push(types.brace);\n    };\n\ntt.backQuote.updateContext = context => {\n  if (context[context.length - 1] === types.template) {\n    context.pop();\n  } else {\n    context.push(types.template);\n  }\n};\n", "import * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet 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\\u08a0-\\u08b4\\u08b6-\\u08c7\\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\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\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-\\u170c\\u170e-\\u1711\\u1720-\\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-\\u1b4b\\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-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\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-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\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\";\n/* prettier-ignore */\nlet 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\\u08d3-\\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\\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\\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-\\u0ecd\\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-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\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-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\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\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\n/* prettier-ignore */\nconst 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,157,310,10,21,11,7,153,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,107,20,28,22,13,52,76,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,85,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,230,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,35,56,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,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,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,8952,286,50,2,18,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,2357,44,11,6,17,0,370,43,1301,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,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];\n/* prettier-ignore */\nconst 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,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,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,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,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,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n", "const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n", "/* eslint max-len: 0 */\n\n// @flow\n\nimport * as charCodes from \"charcodes\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(current: number, next: number): boolean {\n  return current === charCodes.atSign && next === charCodes.atSign;\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n", "// @flow\n\n// Each scope gets a bitset that may contain these flags\n// prettier-ignore\nexport const SCOPE_OTHER        = 0b000000000,\n             SCOPE_PROGRAM      = 0b000000001,\n             SCOPE_FUNCTION     = 0b000000010,\n             SCOPE_ARROW        = 0b000000100,\n             SCOPE_SIMPLE_CATCH = 0b000001000,\n             SCOPE_SUPER        = 0b000010000,\n             SCOPE_DIRECT_SUPER = 0b000100000,\n             SCOPE_CLASS        = 0b001000000,\n             SCOPE_STATIC_BLOCK = 0b010000000,\n             SCOPE_TS_MODULE    = 0b100000000,\n             SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\n\nexport type ScopeFlags =\n  | typeof SCOPE_OTHER\n  | typeof SCOPE_PROGRAM\n  | typeof SCOPE_FUNCTION\n  | typeof SCOPE_VAR\n  | typeof SCOPE_ARROW\n  | typeof SCOPE_SIMPLE_CATCH\n  | typeof SCOPE_SUPER\n  | typeof SCOPE_DIRECT_SUPER\n  | typeof SCOPE_CLASS\n  | typeof SCOPE_STATIC_BLOCK;\n\n// These flags are meant to be _only_ used inside the Scope class (or subclasses).\n// prettier-ignore\nexport const BIND_KIND_VALUE            = 0b000000_0000_01,\n             BIND_KIND_TYPE             = 0b000000_0000_10,\n             // Used in checkLVal and declareName to determine the type of a binding\n             BIND_SCOPE_VAR             = 0b000000_0001_00, // Var-style binding\n             BIND_SCOPE_LEXICAL         = 0b000000_0010_00, // Let- or const-style binding\n             BIND_SCOPE_FUNCTION        = 0b000000_0100_00, // Function declaration\n             BIND_SCOPE_OUTSIDE         = 0b000000_1000_00, // Special case for function names as\n                                                   // bound inside the function\n             // Misc flags\n             BIND_FLAGS_NONE            = 0b000001_0000_00,\n             BIND_FLAGS_CLASS           = 0b000010_0000_00,\n             BIND_FLAGS_TS_ENUM         = 0b000100_0000_00,\n             BIND_FLAGS_TS_CONST_ENUM   = 0b001000_0000_00,\n             BIND_FLAGS_TS_EXPORT_ONLY  = 0b010000_0000_00,\n             BIND_FLAGS_FLOW_DECLARE_FN = 0b100000_0000_00;\n\n// These flags are meant to be _only_ used by Scope consumers\n// prettier-ignore\n/*                              =    is value?    |    is type?    |      scope          |    misc flags    */\nexport const BIND_CLASS         = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_CLASS  ,\n             BIND_LEXICAL       = BIND_KIND_VALUE | 0              | BIND_SCOPE_LEXICAL  | 0                 ,\n             BIND_VAR           = BIND_KIND_VALUE | 0              | BIND_SCOPE_VAR      | 0                 ,\n             BIND_FUNCTION      = BIND_KIND_VALUE | 0              | BIND_SCOPE_FUNCTION | 0                 ,\n             BIND_TS_INTERFACE  = 0               | BIND_KIND_TYPE | 0                   | BIND_FLAGS_CLASS  ,\n             BIND_TS_TYPE       = 0               | BIND_KIND_TYPE | 0                   | 0                 ,\n             BIND_TS_ENUM       = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_TS_ENUM,\n             BIND_TS_AMBIENT    = 0               | 0              | 0            | BIND_FLAGS_TS_EXPORT_ONLY,\n             // These bindings don't introduce anything in the scope. They are used for assignments and\n             // function expressions IDs.\n             BIND_NONE          = 0               | 0              | 0                   | BIND_FLAGS_NONE   ,\n             BIND_OUTSIDE       = BIND_KIND_VALUE | 0              | 0                   | BIND_FLAGS_NONE   ,\n\n             BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n             BIND_TS_NAMESPACE  = 0               | 0              | 0            | BIND_FLAGS_TS_EXPORT_ONLY,\n\n             BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\n\nexport type BindingTypes =\n  | typeof BIND_NONE\n  | typeof BIND_OUTSIDE\n  | typeof BIND_VAR\n  | typeof BIND_LEXICAL\n  | typeof BIND_CLASS\n  | typeof BIND_FUNCTION\n  | typeof BIND_TS_INTERFACE\n  | typeof BIND_TS_TYPE\n  | typeof BIND_TS_ENUM\n  | typeof BIND_TS_AMBIENT\n  | typeof BIND_TS_NAMESPACE;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_FLAG_STATIC = 0b1_00,\n             CLASS_ELEMENT_KIND_GETTER = 0b0_10,\n             CLASS_ELEMENT_KIND_SETTER = 0b0_01,\n             CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_STATIC_GETTER   = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n             CLASS_ELEMENT_STATIC_SETTER   = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n             CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n             CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n             CLASS_ELEMENT_OTHER           = 0;\n\nexport type ClassElementTypes =\n  | typeof CLASS_ELEMENT_STATIC_GETTER\n  | typeof CLASS_ELEMENT_STATIC_SETTER\n  | typeof CLASS_ELEMENT_INSTANCE_GETTER\n  | typeof CLASS_ELEMENT_INSTANCE_SETTER\n  | typeof CLASS_ELEMENT_OTHER;\n", "// @flow\nimport {\n  SCOPE_ARROW,\n  SCOPE_DIRECT_SUPER,\n  SCOPE_FUNCTION,\n  SCOPE_SIMPLE_CATCH,\n  SCOPE_SUPER,\n  SCOPE_PROGRAM,\n  SCOPE_VAR,\n  SCOPE_CLASS,\n  SCOPE_STATIC_BLOCK,\n  BIND_SCOPE_FUNCTION,\n  BIND_SCOPE_VAR,\n  BIND_SCOPE_LEXICAL,\n  BIND_KIND_VALUE,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"./scopeflags\";\nimport * as N from \"../types\";\nimport { Errors, type raiseFunction } from \"../parser/error\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  declare flags: ScopeFlags;\n  // A set of var-declared names in the current lexical scope\n  var: Set<string> = new Set();\n  // A set of lexically-declared names in the current lexical scope\n  lexical: Set<string> = new Set();\n  // A set of lexically-declared FunctionDeclaration names in the current lexical scope\n  functions: Set<string> = new Set();\n\n  constructor(flags: ScopeFlags) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope: Scope = Scope> {\n  scopeStack: Array<IScope> = [];\n  declare raise: raiseFunction;\n  declare inModule: boolean;\n  undefinedExports: Map<string, number> = new Map();\n  undefinedPrivateNames: Map<string, number> = new Map();\n\n  constructor(raise: raiseFunction, inModule: boolean) {\n    this.raise = raise;\n    this.inModule = inModule;\n  }\n\n  get inFunction() {\n    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & SCOPE_STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlags): Scope {\n    return new Scope(flags);\n  }\n  // This method will be overwritten by subclasses\n  /*:: +createScope: (flags: ScopeFlags) => IScope; */\n\n  enter(flags: ScopeFlags) {\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit() {\n    this.scopeStack.pop();\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & SCOPE_FUNCTION ||\n      (!this.inModule && scope.flags & SCOPE_PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingTypes, pos: number) {\n    let scope = this.currentScope();\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.add(name);\n      } else {\n        scope.lexical.add(name);\n      }\n\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        scope.var.add(name);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingTypes,\n    pos: number,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.raise(pos, Errors.VarRedeclaration, name);\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return (\n        scope.lexical.has(name) ||\n        scope.functions.has(name) ||\n        scope.var.has(name)\n      );\n    }\n\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return (\n        scope.lexical.has(name) ||\n        (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\n      );\n    }\n\n    return (\n      (scope.lexical.has(name) &&\n        !(\n          scope.flags & SCOPE_SIMPLE_CATCH &&\n          scope.lexical.values().next().value === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (\n      !topLevelScope.lexical.has(name) &&\n      !topLevelScope.var.has(name) &&\n      // In strict mode, scope.functions will always be empty.\n      // Modules are strict by default, but the `scriptMode` option\n      // can overwrite this behavior.\n      !topLevelScope.functions.has(name)\n    ) {\n      this.undefinedExports.set(name, id.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  // $FlowIgnore\n  currentVarScopeFlags(): ScopeFlags {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & SCOPE_VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  // $FlowIgnore\n  currentThisScopeFlags(): ScopeFlags {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n        return flags;\n      }\n    }\n  }\n}\n", "// @flow\n\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n  BIND_FLAGS_FLOW_DECLARE_FN,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"../../util/scopeflags\";\nimport * as N from \"../../types\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlags): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingTypes, pos: number) {\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (super.isRedeclaredInScope(...arguments)) return true;\n\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      return (\n        !scope.declareFunctions.has(name) &&\n        (scope.lexical.has(name) || scope.functions.has(name))\n      );\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n", "// @flow\n\nimport type { Options } from \"../options\";\nimport * as N from \"../types\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location\";\n\nimport { types as ct, type TokContext } from \"./context\";\nimport { types as tt, type TokenType } from \"./types\";\nimport type { ParsingError, ErrorTemplate } from \"../parser/error\";\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number,\n\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0,\n};\n\nexport default class State {\n  strict: boolean;\n  curLine: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init(options: Options): void {\n    this.strict =\n      options.strictMode === false\n        ? false\n        : options.strictMode === true\n        ? true\n        : options.sourceType === \"module\";\n\n    this.curLine = options.startLine;\n    this.startLoc = this.endLoc = this.curPosition();\n  }\n\n  errors: ParsingError[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  maybeInArrowParameters: boolean = false;\n  inType: boolean = false;\n  noAnonFunctionType: boolean = false;\n  inPropertyName: boolean = false;\n  hasFlowComment: boolean = false;\n  isAmbientContext: boolean = false;\n  inAbstractClass: boolean = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  soloAwait: boolean = false;\n  inFSharpPipelineDirectBody: boolean = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: ?(\"loop\" | \"switch\"),\n    name?: ?string,\n    statementStart?: number,\n  }> = [];\n\n  // Leading decorators. Last element of the stack represents the decorators in current context.\n  // Supports nesting of decorators, e.g. @foo(@bar class inner {}) class outer {}\n  // where @foo belongs to the outer class and @bar to the inner\n  decoratorStack: Array<Array<N.Decorator>> = [[]];\n\n  // Comment store for Program.comments\n  comments: Array<N.Comment> = [];\n\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n  lineStart: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // $FlowIgnore this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // $FlowIgnore this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n  lastTokStart: number = 0;\n  lastTokEnd: number = 0;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n  // Used to track whether a JSX element is allowed to form\n  exprAllowed: boolean = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  containsEsc: boolean = false;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, ErrorTemplate> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  curPosition(): Position {\n    return new Position(this.curLine, this.pos - this.lineStart);\n  }\n\n  clone(skipArrays?: boolean): State {\n    const state = new State();\n    const keys = Object.keys(this);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // $FlowIgnore\n      let val = this[key];\n\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n\n      // $FlowIgnore\n      state[key] = val;\n    }\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number,\n  value: any,\n  type: TokenType,\n  start: number,\n  end: number,\n  /* Used only in readToken_mult_modulo */\n  inType: boolean,\n};\n", "// @flow\n\n/*:: declare var invariant; */\n\nimport type { Options } from \"../options\";\nimport * as N from \"../types\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier\";\nimport { types as tt, keywords as keywordTypes, type TokenType } from \"./types\";\nimport { type TokContext, types as ct } from \"./context\";\nimport ParserErrors, { Errors, type ErrorTemplate } from \"../parser/error\";\nimport { SourceLocation } from \"../util/location\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n} from \"../util/whitespace\";\nimport State from \"./state\";\nimport type { LookaheadState } from \"./state\";\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n]);\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\n\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: [\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ],\n  hex: [\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ],\n};\n\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [\n  // 0 - 1\n  charCodes.digit0,\n  charCodes.digit1,\n];\nallowedNumericSeparatorSiblings.oct = [\n  // 0 - 7\n  ...allowedNumericSeparatorSiblings.bin,\n\n  charCodes.digit2,\n  charCodes.digit3,\n  charCodes.digit4,\n  charCodes.digit5,\n  charCodes.digit6,\n  charCodes.digit7,\n];\nallowedNumericSeparatorSiblings.dec = [\n  // 0 - 9\n  ...allowedNumericSeparatorSiblings.oct,\n\n  charCodes.digit8,\n  charCodes.digit9,\n];\n\nallowedNumericSeparatorSiblings.hex = [\n  // 0 - 9, A - F, a - f,\n  ...allowedNumericSeparatorSiblings.dec,\n\n  charCodes.uppercaseA,\n  charCodes.uppercaseB,\n  charCodes.uppercaseC,\n  charCodes.uppercaseD,\n  charCodes.uppercaseE,\n  charCodes.uppercaseF,\n\n  charCodes.lowercaseA,\n  charCodes.lowercaseB,\n  charCodes.lowercaseC,\n  charCodes.lowercaseD,\n  charCodes.lowercaseE,\n  charCodes.lowercaseF,\n];\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default class Tokenizer extends ParserErrors {\n  // Forward-declarations\n  // parser/util.js\n  /*::\n  +hasPrecedingLineBreak: () => boolean;\n  +unexpected: (pos?: ?number, messageOrType?: ErrorTemplate | TokenType) => empty;\n  +expectPlugin: (name: string, pos?: ?number) => true;\n  */\n\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEnd = this.state.end;\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  // TODO\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  // TODO\n\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   *\n   * @param {State} state\n   * @returns {LookaheadState}\n   * @memberof Tokenizer\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      lastTokEnd: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   *\n   * @returns {LookaheadState}\n   * @memberof Tokenizer\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // For performance we use a simpified tokenizer state structure\n    // $FlowIgnore\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    const skip = skipWhiteSpace.exec(this.input);\n    // $FlowIgnore: The skipWhiteSpace ensures to match any string\n    return pos + skip[0].length;\n  }\n\n  lookaheadCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach((message, pos) =>\n        /* eslint-disable @babel/development-internal/dry-error-messages */\n        this.raise(pos, message),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related\n  // properties.\n\n  nextToken(): void {\n    const curContext = this.curContext();\n    if (!curContext.preserveSpace) this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    if (curContext === ct.template) {\n      this.readTmplToken();\n    } else {\n      this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n    }\n  }\n\n  skipBlockComment(): N.CommentBlock | void {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(\"*/\", this.state.pos + 2);\n    if (end === -1) throw this.raise(start, Errors.UnterminatedComment);\n\n    this.state.pos = end + 2;\n    lineBreakG.lastIndex = start;\n    let match;\n    while (\n      (match = lineBreakG.exec(this.input)) &&\n      match.index < this.state.pos\n    ) {\n      ++this.state.curLine;\n      this.state.lineStart = match.index + match[0].length;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const value = this.input.slice(start + 2, end);\n    const comment = {\n      type: \"CommentBlock\",\n      value: value,\n      start: start,\n      end: end + 2,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | void {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments = [];\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment();\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (ch === charCodes.dash && !this.inModule) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (ch === charCodes.lessThan && !this.inModule) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const CommentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(CommentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `exprAllowed`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val: any): void {\n    this.state.end = this.state.pos;\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.state.endLoc = this.state.curPosition();\n      this.updateContext(prevType);\n    }\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(this.state.pos, Errors.UnexpectedDigitAfterHash);\n    }\n\n    if (\n      next === charCodes.leftCurlyBrace ||\n      (next === charCodes.leftSquareBracket && this.hasPlugin(\"recordAndTuple\"))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"hash\") {\n        throw this.raise(\n          this.state.pos,\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator **\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            this.state.pos,\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            this.state.pos,\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    // '^'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt_gt(code: number): void {\n    // '<>'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    let size = 1;\n\n    if (next === code) {\n      size =\n        code === charCodes.greaterThan &&\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.greaterThan\n          ? 3\n          : 2;\n      if (this.input.charCodeAt(this.state.pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShift, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      size = 2;\n    }\n\n    this.finishOp(tt.relational, size);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              this.state.pos,\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              this.state.pos,\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        ++this.state.pos;\n        this.finishToken(tt.backQuote);\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n      case charCodes.greaterThan:\n        this.readToken_lt_gt(code);\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        ++this.state.pos;\n        this.finishToken(tt.at);\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(\n      this.state.pos,\n      Errors.InvalidOrUnexpectedToken,\n      String.fromCodePoint(code),\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        throw this.raise(start, Errors.UnterminatedRegExp);\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(start, Errors.UnterminatedRegExp);\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (mods.includes(char)) {\n          this.raise(pos + 1, Errors.DuplicateRegExpFlags);\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(pos + 1, Errors.MalformedRegExpFlags);\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen?: boolean,\n    allowNumSeparator: boolean = true,\n  ): number | null {\n    const start = this.state.pos;\n    const forbiddenSiblings =\n      radix === 16\n        ? forbiddenNumericSeparatorSiblings.hex\n        : forbiddenNumericSeparatorSiblings.decBinOct;\n    const allowedSiblings =\n      radix === 16\n        ? allowedNumericSeparatorSiblings.hex\n        : radix === 10\n        ? allowedNumericSeparatorSiblings.dec\n        : radix === 8\n        ? allowedNumericSeparatorSiblings.oct\n        : allowedNumericSeparatorSiblings.bin;\n\n    let invalid = false;\n    let total = 0;\n\n    for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n      const code = this.input.charCodeAt(this.state.pos);\n      let val;\n\n      if (code === charCodes.underscore) {\n        const prev = this.input.charCodeAt(this.state.pos - 1);\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        if (allowedSiblings.indexOf(next) === -1) {\n          this.raise(this.state.pos, Errors.UnexpectedNumericSeparator);\n        } else if (\n          forbiddenSiblings.indexOf(prev) > -1 ||\n          forbiddenSiblings.indexOf(next) > -1 ||\n          Number.isNaN(next)\n        ) {\n          this.raise(this.state.pos, Errors.UnexpectedNumericSeparator);\n        }\n\n        if (!allowNumSeparator) {\n          this.raise(this.state.pos, Errors.NumericSeparatorInEscapeSequence);\n        }\n\n        // Ignore this _ character\n        ++this.state.pos;\n        continue;\n      }\n\n      if (code >= charCodes.lowercaseA) {\n        val = code - charCodes.lowercaseA + charCodes.lineFeed;\n      } else if (code >= charCodes.uppercaseA) {\n        val = code - charCodes.uppercaseA + charCodes.lineFeed;\n      } else if (charCodes.isDigit(code)) {\n        val = code - charCodes.digit0; // 0-9\n      } else {\n        val = Infinity;\n      }\n      if (val >= radix) {\n        // If we are in \"errorRecovery\" mode and we found a digit which is too big,\n        // don't break the loop.\n\n        if (this.options.errorRecovery && val <= 9) {\n          val = 0;\n          this.raise(this.state.start + i + 2, Errors.InvalidDigit, radix);\n        } else if (forceLen) {\n          val = 0;\n          invalid = true;\n        } else {\n          break;\n        }\n      }\n      ++this.state.pos;\n      total = total * radix + val;\n    }\n    if (\n      this.state.pos === start ||\n      (len != null && this.state.pos - start !== len) ||\n      invalid\n    ) {\n      return null;\n    }\n\n    return total;\n  }\n\n  readRadixNumber(radix: number): void {\n    const start = this.state.pos;\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(this.state.start + 2, Errors.InvalidDigit, radix);\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(start, Errors.InvalidDecimal);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(this.state.pos, Errors.NumberIdentifier);\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(start, Errors.InvalidNumber);\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(start, Errors.StrictOctalLiteral);\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          this.raise(underscorePos + start, Errors.ZeroDigitNumericSeparator);\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(start, Errors.InvalidOrMissingExponent);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(start, Errors.InvalidBigIntLiteral);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.pos);\n      if (hasExponent || hasLeadingZero) {\n        this.raise(start, Errors.InvalidDecimal);\n      }\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(this.state.pos, Errors.NumberIdentifier);\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let code;\n\n    if (ch === charCodes.leftCurlyBrace) {\n      const codePos = ++this.state.pos;\n      code = this.readHexChar(\n        this.input.indexOf(\"}\", this.state.pos) - this.state.pos,\n        true,\n        throwOnInvalid,\n      );\n      ++this.state.pos;\n      if (code !== null && code > 0x10ffff) {\n        if (throwOnInvalid) {\n          this.raise(codePos, Errors.InvalidCodePoint);\n        } else {\n          return null;\n        }\n      }\n    } else {\n      code = this.readHexChar(4, false, throwOnInvalid);\n    }\n    return code;\n  }\n\n  readString(quote: number): void {\n    let out = \"\",\n      chunkStart = ++this.state.pos;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, Errors.UnterminatedString);\n      }\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n      if (ch === charCodes.backslash) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        // $FlowFixMe\n        out += this.readEscapedChar(false);\n        chunkStart = this.state.pos;\n      } else if (\n        ch === charCodes.lineSeparator ||\n        ch === charCodes.paragraphSeparator\n      ) {\n        ++this.state.pos;\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        throw this.raise(this.state.start, Errors.UnterminatedString);\n      } else {\n        ++this.state.pos;\n      }\n    }\n    out += this.input.slice(chunkStart, this.state.pos++);\n    this.finishToken(tt.string, out);\n  }\n\n  // Reads template string tokens.\n\n  readTmplToken(): void {\n    let out = \"\",\n      chunkStart = this.state.pos,\n      containsInvalid = false;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, Errors.UnterminatedTemplate);\n      }\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (\n        ch === charCodes.graveAccent ||\n        (ch === charCodes.dollarSign &&\n          this.input.charCodeAt(this.state.pos + 1) ===\n            charCodes.leftCurlyBrace)\n      ) {\n        if (this.state.pos === this.state.start && this.match(tt.template)) {\n          if (ch === charCodes.dollarSign) {\n            this.state.pos += 2;\n            this.finishToken(tt.dollarBraceL);\n            return;\n          } else {\n            ++this.state.pos;\n            this.finishToken(tt.backQuote);\n            return;\n          }\n        }\n        out += this.input.slice(chunkStart, this.state.pos);\n        this.finishToken(tt.template, containsInvalid ? null : out);\n        return;\n      }\n      if (ch === charCodes.backslash) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        const escaped = this.readEscapedChar(true);\n        if (escaped === null) {\n          containsInvalid = true;\n        } else {\n          out += escaped;\n        }\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        ++this.state.pos;\n        switch (ch) {\n          case charCodes.carriageReturn:\n            if (this.input.charCodeAt(this.state.pos) === charCodes.lineFeed) {\n              ++this.state.pos;\n            }\n          // fall through\n          case charCodes.lineFeed:\n            out += \"\\n\";\n            break;\n          default:\n            out += String.fromCharCode(ch);\n            break;\n        }\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n  }\n\n  recordStrictModeErrors(pos: number, message: ErrorTemplate) {\n    if (this.state.strict && !this.state.strictErrors.has(pos)) {\n      this.raise(pos, message);\n    } else {\n      this.state.strictErrors.set(pos, message);\n    }\n  }\n\n  // Used to read escaped characters\n  readEscapedChar(inTemplate: boolean): string | null {\n    const throwOnInvalid = !inTemplate;\n    const ch = this.input.charCodeAt(++this.state.pos);\n    ++this.state.pos;\n    switch (ch) {\n      case charCodes.lowercaseN:\n        return \"\\n\";\n      case charCodes.lowercaseR:\n        return \"\\r\";\n      case charCodes.lowercaseX: {\n        const code = this.readHexChar(2, false, throwOnInvalid);\n        return code === null ? null : String.fromCharCode(code);\n      }\n      case charCodes.lowercaseU: {\n        const code = this.readCodePoint(throwOnInvalid);\n        return code === null ? null : String.fromCodePoint(code);\n      }\n      case charCodes.lowercaseT:\n        return \"\\t\";\n      case charCodes.lowercaseB:\n        return \"\\b\";\n      case charCodes.lowercaseV:\n        return \"\\u000b\";\n      case charCodes.lowercaseF:\n        return \"\\f\";\n      case charCodes.carriageReturn:\n        if (this.input.charCodeAt(this.state.pos) === charCodes.lineFeed) {\n          ++this.state.pos;\n        }\n      // fall through\n      case charCodes.lineFeed:\n        this.state.lineStart = this.state.pos;\n        ++this.state.curLine;\n      // fall through\n      case charCodes.lineSeparator:\n      case charCodes.paragraphSeparator:\n        return \"\";\n      case charCodes.digit8:\n      case charCodes.digit9:\n        if (inTemplate) {\n          return null;\n        } else {\n          this.recordStrictModeErrors(\n            this.state.pos - 1,\n            Errors.StrictNumericEscape,\n          );\n        }\n      // fall through\n      default:\n        if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n          const codePos = this.state.pos - 1;\n          const match = this.input\n            .substr(this.state.pos - 1, 3)\n            .match(/^[0-7]+/);\n\n          // This is never null, because of the if condition above.\n          /*:: invariant(match !== null) */\n          let octalStr = match[0];\n\n          let octal = parseInt(octalStr, 8);\n          if (octal > 255) {\n            octalStr = octalStr.slice(0, -1);\n            octal = parseInt(octalStr, 8);\n          }\n          this.state.pos += octalStr.length - 1;\n          const next = this.input.charCodeAt(this.state.pos);\n          if (\n            octalStr !== \"0\" ||\n            next === charCodes.digit8 ||\n            next === charCodes.digit9\n          ) {\n            if (inTemplate) {\n              return null;\n            } else {\n              this.recordStrictModeErrors(codePos, Errors.StrictNumericEscape);\n            }\n          }\n\n          return String.fromCharCode(octal);\n        }\n\n        return String.fromCharCode(ch);\n    }\n  }\n\n  // Used to read character escape sequences ('\\x', '\\u').\n\n  readHexChar(\n    len: number,\n    forceLen: boolean,\n    throwOnInvalid: boolean,\n  ): number | null {\n    const codePos = this.state.pos;\n    const n = this.readInt(16, len, forceLen, false);\n    if (n === null) {\n      if (throwOnInvalid) {\n        this.raise(codePos, Errors.InvalidEscapeSequence);\n      } else {\n        this.state.pos = codePos - 1;\n      }\n    }\n    return n;\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n  //\n  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode: number | void): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.pos;\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(this.state.pos, Errors.MissingUnicodeEscape);\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(escStart, Errors.EscapedCharNotAnIdentifier);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode: number | void): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word) || tt.name;\n    this.finishToken(type, word);\n  }\n\n  checkKeywordEscapes(): void {\n    const kw = this.state.type.keyword;\n    if (kw && this.state.containsEsc) {\n      this.raise(this.state.start, Errors.InvalidEscapedReservedWord, kw);\n    }\n  }\n\n  // the prevType is required by the jsx plugin\n  // eslint-disable-next-line no-unused-vars\n  updateContext(prevType: TokenType): void {\n    this.state.type.updateContext?.(this.state.context);\n  }\n}\n", "// @flow\n\nimport {\n  CLASS_ELEMENT_KIND_ACCESSOR,\n  CLASS_ELEMENT_FLAG_STATIC,\n  type ClassElementTypes,\n} from \"./scopeflags\";\nimport { Errors, type raiseFunction } from \"../parser/error\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementTypes> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, number> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  stack: Array<ClassScope> = [];\n  declare raise: raiseFunction;\n  undefinedPrivateNames: Map<string, number> = new Map();\n\n  constructor(raise: raiseFunction) {\n    this.raise = raise;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, pos);\n        }\n      } else {\n        this.raise(pos, Errors.InvalidPrivateFieldResolution, name);\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementTypes,\n    pos: number,\n  ) {\n    const classScope = this.current();\n    let redefined = classScope.privateNames.has(name);\n\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && classScope.loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) classScope.loneAccessors.delete(name);\n      } else if (!redefined) {\n        classScope.loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.raise(pos, Errors.PrivateNameRedeclaration, name);\n    }\n\n    classScope.privateNames.add(name);\n    classScope.undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, pos: number) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, pos);\n    } else {\n      // top-level\n      this.raise(pos, Errors.InvalidPrivateFieldResolution, name);\n    }\n  }\n}\n", "// @flow\n\nimport type { ErrorTemplate, raiseFunction } from \"../parser/error\";\n\n/*:: declare var invariant; */\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n   e.g. we don't know if `async({ x })` is a call expression or an async arrow\n   function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser/error-message) will be recorded in\nsome expression scopes and thrown later when we know what the ambigous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3;\n\ntype ExpressionScopeType = 0 | 1 | 2 | 3;\n\nclass ExpressionScope {\n  type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration() {\n    return (\n      this.type === kMaybeAsyncArrowParameterDeclaration ||\n      this.type === kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === kParameterDeclaration;\n  }\n}\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  errors: Map</* pos */ number, /* message */ ErrorTemplate> = new Map();\n  constructor(type: 1 | 2) {\n    super(type);\n  }\n  recordDeclarationError(pos: number, template: ErrorTemplate) {\n    this.errors.set(pos, template);\n  }\n  clearDeclarationError(pos: number) {\n    this.errors.delete(pos);\n  }\n  iterateErrors(iterator: (template: ErrorTemplate, pos: number) => void) {\n    this.errors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n  declare raise: raiseFunction;\n  constructor(raise: raiseFunction) {\n    this.raise = raise;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   * @param {number} pos Error position\n   * @param {ErrorTemplate} template Error template\n   * @memberof ExpressionScopeHandler\n   */\n  recordParameterInitializerError(pos: number, template: ErrorTemplate): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        /*:: invariant(scope instanceof ArrowHeadParsingScope) */\n        scope.recordDeclarationError(pos, template);\n      } else {\n        /*:: invariant(scope.type == kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    /* eslint-disable @babel/development-internal/dry-error-messages */\n    this.raise(pos, template);\n  }\n\n  /**\n   * Record parenthesized identifier errors\n   *\n   * A parenthesized identifier in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   * @param {number} pos\n   * @param {ErrorTemplate} template\n   * @returns {void}\n   * @memberof ExpressionScopeHandler\n   */\n  recordParenthesizedIdentifierError(\n    pos: number,\n    template: ErrorTemplate,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.raise(pos, template);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      /*:: invariant(scope instanceof ArrowHeadParsingScope) */\n      scope.recordDeclarationError(pos, template);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   * @param {number} pos\n   * @param {ErrorTemplate} template\n   * @memberof ExpressionScopeHandler\n   */\n  recordAsyncArrowParametersError(pos: number, template: ErrorTemplate): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n        /*:: invariant(scope instanceof ArrowHeadParsingScope) */\n        scope.recordDeclarationError(pos, template);\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    /*:: invariant(currentScope instanceof ArrowHeadParsingScope) */\n    currentScope.iterateErrors((template, pos) => {\n      /* eslint-disable @babel/development-internal/dry-error-messages */\n      this.raise(pos, template);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        /*:: invariant(scope instanceof ArrowHeadParsingScope) */\n        scope.clearDeclarationError(pos);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n", "// @flow\nexport const PARAM = 0b0000, // Initial Parameter flags\n  PARAM_YIELD = 0b0001, // track [Yield] production parameter\n  PARAM_AWAIT = 0b0010, // track [Await] production parameter\n  PARAM_RETURN = 0b0100, // track [Return] production parameter\n  PARAM_IN = 0b1000; // track [In] production parameter\n\n// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport type ParamKind =\n  | typeof PARAM\n  | typeof PARAM_AWAIT\n  | typeof PARAM_IN\n  | typeof PARAM_RETURN\n  | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n", "// @flow\n\nimport { types as tt, TokenType } from \"../tokenizer/types\";\nimport Tokenizer from \"../tokenizer\";\nimport State from \"../tokenizer/state\";\nimport type { Node } from \"../types\";\nimport { lineBreak } from \"../util/whitespace\";\nimport { isIdentifierChar } from \"../util/identifier\";\nimport ClassScopeHandler from \"../util/class-scope\";\nimport ExpressionScopeHandler from \"../util/expression-scope\";\nimport { SCOPE_PROGRAM } from \"../util/scopeflags\";\nimport ProductionParameterHandler, {\n  PARAM_AWAIT,\n  PARAM,\n} from \"../util/production-parameter\";\nimport { Errors, type ErrorTemplate, ErrorCodes } from \"./error\";\nimport type { ParsingError } from \"./error\";\n/*::\nimport type ScopeHandler from \"../util/scope\";\n*/\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node,\n  error: Error,\n  thrown: Thrown,\n  aborted: Aborted,\n  failState: FailState,\n};\n\n// ## Parser utilities\n\nexport default class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  /*::\n  +getScopeHandler: () => Class<ScopeHandler<*>>;\n  */\n\n  // TODO\n\n  addExtra(node: Node, key: string, val: any): void {\n    if (!node) return;\n\n    const extra = (node.extra = node.extra || {});\n    extra[key] = val;\n  }\n\n  // TODO\n\n  isRelational(op: \"<\" | \">\"): boolean {\n    return this.match(tt.relational) && this.state.value === op;\n  }\n\n  // TODO\n\n  expectRelational(op: \"<\" | \">\"): void {\n    if (this.isRelational(op)) {\n      this.next();\n    } else {\n      this.unexpected(null, tt.relational);\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(name: string): boolean {\n    return (\n      this.match(tt.name) &&\n      this.state.value === name &&\n      !this.state.containsEsc\n    );\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    const nameEnd = nameStart + name.length;\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(name: string): boolean {\n    return this.isContextual(name) && this.eat(tt.name);\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(name: string, template?: ErrorTemplate): void {\n    if (!this.eatContextual(name)) this.unexpected(null, template);\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return lineBreak.test(\n      this.input.slice(this.state.lastTokEnd, this.state.start),\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return lineBreak.test(\n      this.input.slice(this.state.end, this.nextTokenStart()),\n    );\n  }\n\n  // TODO\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(this.state.lastTokEnd, Errors.MissingSemicolon);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, pos?: ?number): void {\n    this.eat(type) || this.unexpected(pos, type);\n  }\n\n  // Throws if the current token and the prev one are separated by a space.\n  assertNoSpace(message: string = \"Unexpected space.\"): void {\n    if (this.state.start > this.state.lastTokEnd) {\n      /* eslint-disable @babel/development-internal/dry-error-messages */\n      this.raise(this.state.lastTokEnd, {\n        code: ErrorCodes.SyntaxError,\n        reasonCode: \"UnexpectedSpace\",\n        template: message,\n      });\n      /* eslint-enable @babel/development-internal/dry-error-messages */\n    }\n  }\n\n  // Raise an unexpected token error. Can take the expected token type\n  // instead of a message string.\n\n  unexpected(\n    pos: ?number,\n    messageOrType: ErrorTemplate | TokenType = {\n      code: ErrorCodes.SyntaxError,\n      reasonCode: \"UnexpectedToken\",\n      template: \"Unexpected token\",\n    },\n  ): empty {\n    if (messageOrType instanceof TokenType) {\n      messageOrType = {\n        code: ErrorCodes.SyntaxError,\n        reasonCode: \"UnexpectedToken\",\n        template: `Unexpected token, expected \"${messageOrType.label}\"`,\n      };\n    }\n\n    /* eslint-disable @babel/development-internal/dry-error-messages */\n    throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n    /* eslint-enable @babel/development-internal/dry-error-messages */\n  }\n\n  expectPlugin(name: string, pos?: ?number): true {\n    if (!this.hasPlugin(name)) {\n      throw this.raiseWithData(\n        pos != null ? pos : this.state.start,\n        { missingPlugin: [name] },\n        `This experimental syntax requires enabling the parser plugin: '${name}'`,\n      );\n    }\n\n    return true;\n  }\n\n  expectOnePlugin(names: Array<string>, pos?: ?number): void {\n    if (!names.some(n => this.hasPlugin(n))) {\n      throw this.raiseWithData(\n        pos != null ? pos : this.state.start,\n        { missingPlugin: names },\n        `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\n          \", \",\n        )}'`,\n      );\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T: Node | $ReadOnlyArray<Node>>(\n    fn: (abort: (node?: T) => empty) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParsingError, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: { node: T | null } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: (failState.errors[oldState.errors.length]: ParsingError),\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ?ExpressionErrors,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const { shorthandAssign, doubleProto, optionalParameters } =\n      refExpressionErrors;\n    if (!andThrow) {\n      return (\n        shorthandAssign >= 0 || doubleProto >= 0 || optionalParameters >= 0\n      );\n    }\n    if (shorthandAssign >= 0) {\n      this.unexpected(shorthandAssign);\n    }\n    if (doubleProto >= 0) {\n      this.raise(doubleProto, Errors.DuplicateProto);\n    }\n    if (optionalParameters >= 0) {\n      this.unexpected(optionalParameters);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return (\n      this.match(tt.name) ||\n      !!this.state.type.keyword ||\n      this.match(tt.string) ||\n      this.match(tt.num) ||\n      this.match(tt.bigint) ||\n      this.match(tt.decimal)\n    );\n  }\n\n  /*\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): boolean {\n    return node.type === \"PrivateName\";\n  }\n\n  /*\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/proposal-class-fields/#sec-private-names-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: Node): string {\n    return node.id.name;\n  }\n\n  /*\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isOptionalChain(node: Node): boolean {\n    return (\n      node.type === \"OptionalMemberExpression\" ||\n      node.type === \"OptionalCallExpression\"\n    );\n  }\n\n  isObjectProperty(node: Node): boolean {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): boolean {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this.raise.bind(this));\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this.raise.bind(this));\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = PARAM;\n    if (this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to -1\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssign**: track initializer `=` position\n * - **doubleProto**: track the duplicate `__proto__` key position\n * - **optionalParameters**: track the optional paramter (`?`).\n * It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssign = -1;\n  doubleProto = -1;\n  optionalParameters = -1;\n}\n", "// @flow\n\nimport type Parser from \"./index\";\nimport UtilParser from \"./util\";\nimport { SourceLocation, type Position } from \"../util/location\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: Parser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.options.ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: { [key: string]: any };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // $FlowIgnore\n  NodePrototype.__clone = function (): Node {\n    // $FlowIgnore\n    const newNode: any = new Node();\n    const keys = Object.keys(this);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nfunction clonePlaceholder(node: any): any {\n  return cloneIdentifier(node);\n}\n\nexport function cloneIdentifier(node: any): any {\n  // We don't need to clone `typeAnnotations` and `optional`: because\n  // cloneIdentifier is only used in object shorthand and named import/export.\n  // Neither of them allow type annotations after the identifier or optional identifier\n  const { type, start, end, loc, range, extra, name } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n  return cloned;\n}\n\nexport function cloneStringLiteral(node: any): any {\n  const { type, start, end, loc, range, extra } = node;\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n  const cloned = Object.create(NodePrototype);\n  cloned.type = \"StringLiteral\";\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.value = node.value;\n  return cloned;\n}\n\nexport class NodeUtils extends UtilParser {\n  startNode<T: NodeType>(): T {\n    // $FlowIgnore\n    return new Node(this, this.state.start, this.state.startLoc);\n  }\n\n  startNodeAt<T: NodeType>(pos: number, loc: Position): T {\n    // $FlowIgnore\n    return new Node(this, pos, loc);\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T: NodeType>(type: NodeType): T {\n    return this.startNodeAt(type.start, type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T: NodeType>(node: T, type: string): T {\n    return this.finishNodeAt(\n      node,\n      type,\n      this.state.lastTokEnd,\n      this.state.lastTokEndLoc,\n    );\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T: NodeType>(\n    node: T,\n    type: string,\n    pos: number,\n    loc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    node.type = type;\n    node.end = pos;\n    node.loc.end = loc;\n    if (this.options.ranges) node.range[1] = pos;\n    if (this.options.attachComment) this.processComment(node);\n    return node;\n  }\n\n  resetStartLocation(node: NodeBase, start: number, startLoc: Position): void {\n    node.start = start;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = start;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    end?: number = this.state.lastTokEnd,\n    endLoc?: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = end;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = end;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n  }\n}\n", "// @flow\n\n/*:: declare var invariant; */\n\n// Error messages are colocated with the plugin.\n/* eslint-disable @babel/development-internal/dry-error-messages */\n\nimport type Parser from \"../../parser\";\nimport { types as tt, type TokenType } from \"../../tokenizer/types\";\nimport * as N from \"../../types\";\nimport type { Position } from \"../../util/location\";\nimport { types as tc } from \"../../tokenizer/context\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart, isKeyword } from \"../../util/identifier\";\nimport FlowScopeHandler from \"./scope\";\nimport {\n  type BindingTypes,\n  BIND_LEXICAL,\n  BIND_VAR,\n  BIND_FUNCTION,\n  BIND_FLOW_DECLARE_FN,\n  SCOPE_ARROW,\n  SCOPE_FUNCTION,\n  SCOPE_OTHER,\n} from \"../../util/scopeflags\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport { Errors, makeErrorTemplates, ErrorCodes } from \"../../parser/error\";\nimport { cloneIdentifier } from \"../../parser/node\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = makeErrorTemplates(\n  {\n    AmbiguousConditionalArrow:\n      \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n    AmbiguousDeclareModuleKind:\n      \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n    AssignReservedType: \"Cannot overwrite reserved type %0.\",\n    DeclareClassElement:\n      \"The `declare` modifier can only appear on class fields.\",\n    DeclareClassFieldInitializer:\n      \"Initializers are not allowed in fields with the `declare` modifier.\",\n    DuplicateDeclareModuleExports:\n      \"Duplicate `declare module.exports` statement.\",\n    EnumBooleanMemberNotInitialized:\n      \"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.\",\n    EnumDuplicateMemberName:\n      \"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.\",\n    EnumInconsistentMemberValues:\n      \"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.\",\n    EnumInvalidExplicitType:\n      \"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n    EnumInvalidExplicitTypeUnknownSupplied:\n      \"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n    EnumInvalidMemberInitializerPrimaryType:\n      \"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.\",\n    EnumInvalidMemberInitializerSymbolType:\n      \"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.\",\n    EnumInvalidMemberInitializerUnknownType:\n      \"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.\",\n    EnumInvalidMemberName:\n      \"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.\",\n    EnumNumberMemberNotInitialized:\n      \"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.\",\n    EnumStringMemberInconsistentlyInitailized:\n      \"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.\",\n    GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n    ImportTypeShorthandOnlyInPureImport:\n      \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n    InexactInsideExact:\n      \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n    InexactInsideNonObject:\n      \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n    InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n    InvalidNonTypeImportInDeclareModule:\n      \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n    MissingTypeParamDefault:\n      \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n    NestedDeclareModule:\n      \"`declare module` cannot be used inside another `declare module`.\",\n    NestedFlowComment:\n      \"Cannot have a flow comment inside another flow comment.\",\n    OptionalBindingPattern:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n    SpreadVariance: \"Spread properties cannot have variance.\",\n    ThisParamAnnotationRequired:\n      \"A type annotation is required for the `this` parameter.\",\n    ThisParamBannedInConstructor:\n      \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n    ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n    ThisParamMustBeFirst:\n      \"The `this` parameter must be the first function parameter.\",\n    ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n    TypeBeforeInitializer:\n      \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n    TypeCastInPattern:\n      \"The type cast expression is expected to be wrapped with parenthesis.\",\n    UnexpectedExplicitInexactInObject:\n      \"Explicit inexact syntax must appear at the end of an inexact object.\",\n    UnexpectedReservedType: \"Unexpected reserved type %0.\",\n    UnexpectedReservedUnderscore:\n      \"`_` is only allowed as a type argument to call or new.\",\n    UnexpectedSpaceBetweenModuloChecks:\n      \"Spaces between `%` and `checks` are not allowed here.\",\n    UnexpectedSpreadType:\n      \"Spread operator cannot appear in class or interface definitions.\",\n    UnexpectedSubtractionOperand:\n      'Unexpected token, expected \"number\" or \"bigint\".',\n    UnexpectedTokenAfterTypeParameter:\n      \"Expected an arrow function after this type parameter declaration.\",\n    UnexpectedTypeParameterBeforeAsyncArrowFunction:\n      \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n    UnsupportedDeclareExportKind:\n      \"`declare export %0` is not supported. Use `%1` instead.\",\n    UnsupportedStatementInDeclareModule:\n      \"Only declares and type imports are allowed inside declare module.\",\n    UnterminatedFlowComment: \"Unterminated flow-comment.\",\n  },\n  /* code */ ErrorCodes.SyntaxError,\n);\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(node: N.Node): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(state: { type: TokenType, value: any }): boolean {\n  return (\n    (state.type === tt.name || !!state.type.keyword) && state.value !== \"from\"\n  );\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (T, number, T[]) => ?boolean,\n): [T[], T[]] {\n  const list1 = [];\n  const list2 = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\ntype EnumContext = {|\n  enumName: string,\n  explicitType: EnumExplicitType,\n  memberName: string,\n|};\ntype EnumMemberInit =\n  | {| type: \"number\", pos: number, value: N.Node |}\n  | {| type: \"string\", pos: number, value: N.Node |}\n  | {| type: \"boolean\", pos: number, value: N.Node |}\n  | {| type: \"invalid\", pos: number |}\n  | {| type: \"none\", pos: number |};\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): Class<FlowScopeHandler> {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    shouldParseEnums(): boolean {\n      return !!this.getPluginOption(\"flow\", \"enums\");\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      return super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      return super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowType {\n      const node = this.startNode();\n      const moduloPos = this.state.start;\n      this.next(); // eat `%`\n      this.expectContextual(\"checks\");\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStart > moduloPos + 1) {\n        this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = this.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [?N.FlowType, ?N.FlowPredicate] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(node: N.FlowDeclareClass): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: N.FlowDeclareFunction,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode();\n      const typeContainer = this.startNode();\n\n      if (this.isRelational(\"<\")) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [\n        // $FlowFixMe (destructuring not supported yet)\n        typeNode.returnType,\n        // $FlowFixMe (destructuring not supported yet)\n        node.predicate,\n      ] = this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.start);\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: N.FlowDeclare,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(\"module\")) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(\"type\")) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(\"opaque\")) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(\"interface\")) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        throw this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: N.FlowDeclareVariable,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(node: N.FlowDeclareModule): N.FlowDeclareModule {\n      this.scope.enter(SCOPE_OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = this.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode());\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(\"type\") && !this.match(tt._typeof)) {\n            this.raise(\n              this.state.lastTokStart,\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n            );\n          }\n          this.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            \"declare\",\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(\n              bodyElement.start,\n              FlowErrors.AmbiguousDeclareModuleKind,\n            );\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(\n              bodyElement.start,\n              FlowErrors.DuplicateDeclareModuleExports,\n            );\n          }\n          if (kind === \"ES\") {\n            this.raise(\n              bodyElement.start,\n              FlowErrors.AmbiguousDeclareModuleKind,\n            );\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: N.FlowDeclareExportDeclaration,\n      insideModule: ?boolean,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(\"type\") || this.isContextual(\"interface\")) &&\n            !insideModule)\n        ) {\n          const label = this.state.value;\n          const suggestion = exportSuggestions[label];\n\n          throw this.raise(\n            this.state.start,\n            FlowErrors.UnsupportedDeclareExportKind,\n            label,\n            suggestion,\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(\"opaque\") // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(\"interface\") || // declare export interface ...\n          this.isContextual(\"type\") || // declare export type ...\n          this.isContextual(\"opaque\") // declare export opaque type ...\n        ) {\n          node = this.parseExport(node);\n          if (node.type === \"ExportNamedDeclaration\") {\n            // flow does not support the ExportNamedDeclaration\n            // $FlowIgnore\n            node.type = \"ExportDeclaration\";\n            // $FlowFixMe\n            node.default = false;\n            delete node.exportKind;\n          }\n\n          // $FlowIgnore\n          node.type = \"Declare\" + node.type;\n\n          return node;\n        }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: N.FlowDeclareModuleExports,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(\"exports\");\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: N.FlowDeclareTypeAlias,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      this.flowParseTypeAlias(node);\n      // Don't do finishNode as we don't want to process comments twice\n      node.type = \"DeclareTypeAlias\";\n      return node;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: N.FlowDeclareOpaqueType,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      this.flowParseOpaqueType(node, true);\n      // Don't do finishNode as we don't want to process comments twice\n      node.type = \"DeclareOpaqueType\";\n      return node;\n    }\n\n    flowParseDeclareInterface(\n      node: N.FlowDeclareInterface,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(\n      node: N.FlowDeclare,\n      isClass?: boolean = false,\n    ): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BIND_FUNCTION : BIND_LEXICAL,\n        node.id.start,\n      );\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n      node.implements = [];\n      node.mixins = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (this.isContextual(\"mixins\")) {\n        this.next();\n        do {\n          node.mixins.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      if (this.isContextual(\"implements\")) {\n        this.next();\n        do {\n          node.implements.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: N.FlowInterface): N.FlowInterface {\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);\n      }\n    }\n\n    checkReservedType(word: string, startLoc: number, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        startLoc,\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        word,\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(this.state.value, this.state.start, declaration);\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: N.FlowTypeAlias): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: N.FlowOpaqueType,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(\"type\");\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault?: boolean = false): N.TypeParameter {\n      const nodeStart = this.state.start;\n\n      const node = this.startNode();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      node.variance = variance;\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.isRelational(\"<\") || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.isRelational(\">\")) {\n          this.expect(tt.comma);\n        }\n      } while (!this.isRelational(\">\"));\n      this.expectRelational(\">\");\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expectRelational(\"<\");\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n      while (!this.isRelational(\">\")) {\n        node.params.push(this.flowParseType());\n        if (!this.isRelational(\">\")) {\n          this.expect(tt.comma);\n        }\n      }\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expectRelational(\">\");\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      const node = this.startNode();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expectRelational(\"<\");\n      while (!this.isRelational(\">\")) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.isRelational(\">\")) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expectRelational(\">\");\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode();\n      this.expectContextual(\"interface\");\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? this.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: N.FlowObjectTypeIndexer,\n      isStatic: boolean,\n      variance: ?N.FlowVariance,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: N.FlowObjectTypeInternalSlot,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.isRelational(\"<\") || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.start, node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: N.FlowFunctionTypeAnnotation,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: N.FlowObjectTypeCallProperty,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean,\n      allowExact: boolean,\n      allowSpread: boolean,\n      allowProto: boolean,\n      allowInexact: boolean,\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStart: ?number = null;\n        let inexactStart: ?number = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(\"proto\")) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStart = this.state.start;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(\"static\")) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n            const lookahead = this.lookahead();\n            if (\n              lookahead.type === tt.name ||\n              lookahead.type === tt.string ||\n              lookahead.type === tt.num\n            ) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStart,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStart = this.state.lastTokStart;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStart &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            inexactStart,\n            FlowErrors.UnexpectedExplicitInexactInObject,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty,\n      isStatic: boolean,\n      protoStart: ?number,\n      variance: ?N.FlowVariance,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): (N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty) | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              this.state.lastTokStart,\n              FlowErrors.InexactInsideNonObject,\n            );\n          } else if (!allowInexact) {\n            this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);\n          }\n          if (variance) {\n            this.raise(variance.start, FlowErrors.InexactVariance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);\n        }\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n        if (variance) {\n          this.raise(variance.start, FlowErrors.SpreadVariance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStart != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.isRelational(\"<\") || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.start, node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(\n              node.value.this.start,\n              FlowErrors.ThisParamBannedInConstructor,\n            );\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const start = property.start;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.value.this.start,\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n        );\n      }\n\n      if (length !== paramCount) {\n        if (property.kind === \"get\") {\n          this.raise(start, Errors.BadGetterArity);\n        } else {\n          this.raise(start, Errors.BadSetterArity);\n        }\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(start, Errors.BadSetterRestParameter);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startPos?: number,\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier {\n      startPos = startPos || this.state.start;\n      startLoc = startLoc || this.state.startLoc;\n      let node = id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt(startPos, startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startPos: number,\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt(startPos, startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(node.start, FlowErrors.ThisParamMustBeFirst);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(node.start, FlowErrors.ThisParamMayNotBeOptional);\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt(type.start, type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[],\n      rest: ?N.FlowFunctionTypeParam,\n      _this: ?N.FlowFunctionTypeParam,\n    } {\n      let rest: ?N.FlowFunctionTypeParam = null;\n      let _this: ?N.FlowFunctionTypeParam = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startPos: number,\n      startLoc: Position,\n      node: N.FlowTypeAnnotation,\n      id: N.Identifier,\n    ): N.FlowTypeAnnotation {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startPos, startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowTypeAnnotation {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const node = this.startNode();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.name:\n          if (this.isContextual(\"interface\")) {\n            return this.flowParseInterfaceType();\n          }\n\n          return this.flowIdentToTypeAnnotation(\n            startPos,\n            startLoc,\n            node,\n            this.parseIdentifier(),\n          );\n\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.relational:\n          if (this.state.value === \"<\") {\n            node.typeParameters = this.flowParseTypeParameterDeclaration();\n            this.expect(tt.parenL);\n            tmp = this.flowParseFunctionTypeParams();\n            node.params = tmp.params;\n            node.rest = tmp.rest;\n            node.this = tmp._this;\n            this.expect(tt.parenR);\n\n            this.expect(tt.arrow);\n\n            node.returnType = this.flowParseType();\n\n            return this.finishNode(node, \"FunctionTypeAnnotation\");\n          }\n          break;\n\n        case tt.parenL:\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (this.match(tt.name) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode<N.BooleanLiteralTypeAnnotation>(\n            node,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(\n              this.state.start,\n              FlowErrors.UnexpectedSubtractionOperand,\n            );\n          }\n\n          throw this.unexpected();\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        default:\n          if (this.state.type.keyword === \"typeof\") {\n            return this.flowParseTypeofType();\n          } else if (this.state.type.keyword) {\n            const label = this.state.type.label;\n            this.next();\n            return super.createIdentifier(node, label);\n          }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowTypeAnnotation {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt(startPos, startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowTypeAnnotation {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt(param.start, param.loc.start);\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowTypeAnnotation {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startPos = this.state.start;\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startPos, startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.Node): N.Node {\n      node.expression.typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(\n        node.expression,\n        node.typeAnnotation.end,\n        node.typeAnnotation.loc.end,\n      );\n\n      return node.expression;\n    }\n\n    flowParseVariance(): ?N.FlowVariance {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody: ?boolean,\n      isMethod?: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        return this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n      }\n\n      return super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish(\n      node: N.BodilessFunctionOrMethodBase,\n      type: string,\n      isMethod?: boolean = false,\n    ): void {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode();\n\n        [\n          // $FlowFixMe (destructuring not supported yet)\n          typeNode.typeAnnotation,\n          // $FlowFixMe (destructuring not supported yet)\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatement(context: ?string, topLevel?: boolean): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (\n        this.state.strict &&\n        this.match(tt.name) &&\n        this.state.value === \"interface\"\n      ) {\n        const lookahead = this.lookahead();\n        if (lookahead.type === tt.name || isKeyword(lookahead.value)) {\n          const node = this.startNode();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatement(context, topLevel);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            this.match(tt.name) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            return this.flowParseDeclare(node);\n          }\n        } else if (this.match(tt.name)) {\n          if (expr.name === \"interface\") {\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      return (\n        this.isContextual(\"type\") ||\n        this.isContextual(\"interface\") ||\n        this.isContextual(\"opaque\") ||\n        (this.shouldParseEnums() && this.isContextual(\"enum\")) ||\n        super.shouldParseExportDeclaration()\n      );\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (\n        this.match(tt.name) &&\n        (this.state.value === \"type\" ||\n          this.state.value === \"interface\" ||\n          this.state.value === \"opaque\" ||\n          (this.shouldParseEnums() && this.state.value === \"enum\"))\n      ) {\n        return false;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\n      if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      refExpressionErrors?: ?ExpressionErrors,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      // only use the expensive \"tryParse\" method if there is a question mark\n      // and if we come from inside parens\n      if (this.state.maybeInArrowParameters) {\n        const result = this.tryParse(() =>\n          super.parseConditional(expr, startPos, startLoc),\n        );\n\n        if (!result.node) {\n          if (result.error) {\n            /*:: invariant(refExpressionErrors != null) */\n            super.setOptionalParametersError(refExpressionErrors, result.error);\n          }\n\n          return expr;\n        }\n\n        if (result.error) this.state = result.failState;\n        return result.node;\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt(startPos, startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt.concat(valid[0].start);\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression,\n      failed: boolean,\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (node.type === \"ArrowFunctionExpression\") {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        ((node.params: any): N.Expression[]),\n        node.extra?.trailingComma,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(node: N.Node, parse: () => T): T {\n      let result: T;\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem(\n      node: N.Expression,\n      startPos: number,\n      startLoc: Position,\n    ): N.Expression {\n      node = super.parseParenItem(node, startPos, startLoc);\n      if (this.eat(tt.question)) {\n        node.optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt(startPos, startLoc);\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExport(node: N.Node): N.AnyExport {\n      const decl = super.parseExport(node);\n      if (\n        decl.type === \"ExportNamedDeclaration\" ||\n        decl.type === \"ExportAllDeclaration\"\n      ) {\n        decl.exportKind = decl.exportKind || \"value\";\n      }\n      return decl;\n    }\n\n    parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n      if (this.isContextual(\"type\")) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers();\n          this.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(\"opaque\")) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(\"interface\")) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseInterface(declarationNode);\n      } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(node: N.Node): boolean {\n      if (super.eatExportStar(...arguments)) return true;\n\n      if (this.isContextual(\"type\") && this.lookahead().type === tt.star) {\n        node.exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n      const pos = this.state.start;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(pos);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(node: N.Class, isStatement: boolean, optionalId: ?boolean) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const pos = this.state.start;\n      if (this.isContextual(\"declare\")) {\n        if (this.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(pos, FlowErrors.DeclareClassElement);\n        } else if (member.value) {\n          this.raise(\n            member.value.start,\n            FlowErrors.DeclareClassFieldInitializer,\n          );\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(this.state.pos, Errors.InvalidIdentifier, fullWord);\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        return this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        return this.finishOp(tt.relational, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          return this.finishOp(tt.questionDot, 2);\n        }\n        // allow double nullable types in Flow: ??string\n        return this.finishOp(tt.question, 1);\n      } else if (isIteratorStart(code, next)) {\n        this.state.pos += 2; // eat \"@@\"\n        return this.readIterator();\n      } else {\n        return super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): N.Node {\n      if (node.type === \"TypeCastExpression\") {\n        return super.toAssignable(this.typeCastToParameter(node), isLHS);\n      } else {\n        return super.toAssignable(node, isLHS);\n      }\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaPos?: ?number,\n      isLHS: boolean,\n    ): $ReadOnlyArray<N.Pattern> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      return super.toAssignableList(exprList, trailingCommaPos, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList: $ReadOnlyArray<?N.Expression>,\n      isParenthesizedExpr?: boolean,\n    ): $ReadOnlyArray<?N.Expression> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors: ?ExpressionErrors,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (canBePattern && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    checkLVal(\n      expr: N.Expression,\n      ...args:\n        | [string, BindingTypes | void]\n        | [\n            string,\n            BindingTypes | void,\n            ?Set<string>,\n            boolean | void,\n            boolean | void,\n          ]\n    ): void {\n      if (expr.type !== \"TypeCastExpression\") {\n        return super.checkLVal(expr, ...args);\n      }\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.isRelational(\"<\") || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method: $FlowFixMe).variance) {\n        this.unexpected((method: $FlowFixMe).variance.start);\n      }\n      delete (method: $FlowFixMe).variance;\n      if (this.isRelational(\"<\")) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n        }\n        // estree support\n      } else if (\n        // $FlowFixMe flow does not know about the face that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        method.value.params\n      ) {\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method: $FlowFixMe).variance) {\n        this.unexpected((method: $FlowFixMe).variance.start);\n      }\n      delete (method: $FlowFixMe).variance;\n      if (this.isRelational(\"<\")) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.isRelational(\"<\")) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n      if (this.isContextual(\"implements\")) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.isRelational(\"<\")) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(param.start, FlowErrors.GetterMayNotHaveThisParam);\n        } else if (this.isThisParam(param)) {\n          this.raise(param.start, FlowErrors.SetterMayNotHaveThisParam);\n        }\n      }\n    }\n\n    parsePropertyName(\n      node: N.ObjectOrClassMember | N.ClassMember | N.TsNamedTypeElementBase,\n      isPrivateNameAllowed: boolean,\n    ): N.Identifier {\n      const variance = this.flowParseVariance();\n      const key = super.parsePropertyName(node, isPrivateNameAllowed);\n      // $FlowIgnore (\"variance\" not defined on TsNamedTypeElementBase)\n      node.variance = variance;\n      return key;\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue(\n      prop: N.ObjectMember,\n      startPos: ?number,\n      startLoc: ?Position,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors: ?ExpressionErrors,\n    ): void {\n      if ((prop: $FlowFixMe).variance) {\n        this.unexpected((prop: $FlowFixMe).variance.start);\n      }\n      delete (prop: $FlowFixMe).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.isRelational(\"<\") && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      super.parseObjPropValue(\n        prop,\n        startPos,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        (prop.value || prop).typeParameters = typeParameters;\n      }\n    }\n\n    parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(param.start, FlowErrors.OptionalBindingPattern);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(param.start, FlowErrors.ThisParamMayNotBeOptional);\n        }\n\n        ((param: any): N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(param.start, FlowErrors.ThisParamAnnotationRequired);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(param.start, FlowErrors.ThisParamNoDefault);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(\n      startPos?: ?number,\n      startLoc?: ?Position,\n      left?: ?N.Pattern,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);\n      }\n\n      return node;\n    }\n\n    shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n      if (!hasTypeImportKind(node)) {\n        return super.shouldParseDefaultImport(node);\n      }\n\n      return isMaybeDefaultImport(this.state);\n    }\n\n    parseImportSpecifierLocal(\n      node: N.ImportDeclaration,\n      specifier: N.Node,\n      type: string,\n      contextDescription: string,\n    ): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n      node.specifiers.push(this.finishNode(specifier, type));\n    }\n\n    // parse typeof and type imports\n    maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n      node.importKind = \"value\";\n\n      let kind = null;\n      if (this.match(tt._typeof)) {\n        kind = \"typeof\";\n      } else if (this.isContextual(\"type\")) {\n        kind = \"type\";\n      }\n      if (kind) {\n        const lh = this.lookahead();\n\n        // import type * is not allowed\n        if (kind === \"type\" && lh.type === tt.star) {\n          this.unexpected(lh.start);\n        }\n\n        if (\n          isMaybeDefaultImport(lh) ||\n          lh.type === tt.braceL ||\n          lh.type === tt.star\n        ) {\n          this.next();\n          node.importKind = kind;\n        }\n      }\n\n      return super.maybeParseDefaultImportSpecifier(node);\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(node: N.ImportDeclaration): void {\n      const specifier = this.startNode();\n      const firstIdentIsString = this.match(tt.string);\n      const firstIdent = this.parseModuleExportName();\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(\"as\") && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !this.match(tt.name) &&\n          !this.state.type.keyword\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else if (\n        specifierTypeKind !== null &&\n        (this.match(tt.name) || this.state.type.keyword)\n      ) {\n        // `import {type foo`\n        specifier.imported = this.parseIdentifier(true);\n        specifier.importKind = specifierTypeKind;\n        if (this.eatContextual(\"as\")) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = cloneIdentifier(specifier.imported);\n        }\n      } else {\n        if (firstIdentIsString) {\n          /*:: invariant(firstIdent instanceof N.StringLiteral) */\n          throw this.raise(\n            specifier.start,\n            Errors.ImportBindingIsString,\n            firstIdent.value,\n          );\n        }\n        /*:: invariant(firstIdent instanceof N.Node) */\n        isBinding = true;\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n        specifier.local = cloneIdentifier(specifier.imported);\n      }\n\n      const nodeIsTypeImport = hasTypeImportKind(node);\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (nodeIsTypeImport && specifierIsTypeImport) {\n        this.raise(\n          specifier.start,\n          FlowErrors.ImportTypeShorthandOnlyInPureImport,\n        );\n      }\n\n      if (nodeIsTypeImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.start,\n          true,\n          true,\n        );\n      }\n\n      this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n      node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n      // $FlowFixMe\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ?ExpressionErrors,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.isRelational(\"<\"))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const curContext = context[context.length - 1];\n        if (curContext === tc.j_oTag) {\n          context.length -= 2;\n        } else if (curContext === tc.j_expr) {\n          context.length -= 1;\n        }\n      }\n\n      if (jsx?.error || this.isRelational(\"<\")) {\n        state = state || this.state.clone();\n\n        let typeParameters;\n\n        const arrow = this.tryParse(abort => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {}: any);\n          if (\n            arrowExpression.type !== \"ArrowFunctionExpression\" &&\n            arrowExpression.extra?.parenthesized\n          ) {\n            abort();\n          }\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression: ?(\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n        ) = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                typeParameters.start,\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n              );\n            }\n\n            return arrow.node;\n          }\n\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          typeParameters.start,\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const result = this.tryParse(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode();\n\n          [\n            // $FlowFixMe (destructuring not supported yet)\n            typeNode.typeAnnotation,\n            // $FlowFixMe (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: N.ArrowFunctionExpression,\n      params: N.Expression[],\n    ): void {\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        node.params = params;\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction: ?boolean,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(node.params[i].start, FlowErrors.ThisParamMustBeFirst);\n        }\n      }\n\n      return super.checkParams(...arguments);\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1,\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls?: ?boolean,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.indexOf(startPos) !== -1\n      ) {\n        this.next();\n\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.isRelational(\"<\")\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort =>\n            this.parseAsyncArrowWithTypeParameters(startPos, startLoc) ||\n            abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startPos, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startPos, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls: ?boolean,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node: N.OptionalCallExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(tt.parenL);\n        // $FlowFixMe\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (\n        !noCalls &&\n        this.shouldParseTypes() &&\n        this.isRelational(\"<\")\n      ) {\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n          if (subscriptState.optionalChainMember) node.optional = false;\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n        startPos,\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewArguments(node: N.NewExpression): void {\n      let targs = null;\n      if (this.shouldParseTypes() && this.isRelational(\"<\")) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n\n      super.parseNewArguments(node);\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startPos: number,\n      startLoc: Position,\n    ): ?N.ArrowFunctionExpression {\n      const node = this.startNodeAt(startPos, startLoc);\n      this.parseFunctionParams(node);\n      if (!this.parseArrow(node)) return;\n      return this.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | void {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          this.unexpected(null, FlowErrors.NestedFlowComment);\n        }\n        this.hasFlowCommentCompletion();\n        this.state.pos += this.skipFlowComment();\n        this.state.hasFlowComment = true;\n        return;\n      }\n\n      if (this.state.hasFlowComment) {\n        const end = this.input.indexOf(\"*-/\", (this.state.pos += 2));\n        if (end === -1) {\n          throw this.raise(this.state.pos - 2, Errors.UnterminatedComment);\n        }\n        this.state.pos = end + 3;\n        return;\n      }\n\n      return super.skipBlockComment();\n    }\n\n    skipFlowComment(): number | boolean {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(this.state.pos, Errors.UnterminatedComment);\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      this.raise(\n        pos,\n        FlowErrors.EnumBooleanMemberNotInitialized,\n        memberName,\n        enumName,\n      );\n    }\n\n    flowEnumErrorInvalidMemberName(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n      this.raise(\n        pos,\n        FlowErrors.EnumInvalidMemberName,\n        memberName,\n        suggestion,\n        enumName,\n      );\n    }\n\n    flowEnumErrorDuplicateMemberName(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);\n    }\n\n    flowEnumErrorInconsistentMemberValues(\n      pos: number,\n      { enumName }: { enumName: string },\n    ): void {\n      this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);\n    }\n\n    flowEnumErrorInvalidExplicitType(\n      pos: number,\n      {\n        enumName,\n        suppliedType,\n      }: { enumName: string, suppliedType: null | string },\n    ) {\n      return this.raise(\n        pos,\n        suppliedType === null\n          ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied\n          : FlowErrors.EnumInvalidExplicitType,\n        enumName,\n        suppliedType,\n      );\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      pos: number,\n      { enumName, explicitType, memberName }: EnumContext,\n    ) {\n      let message = null;\n      switch (explicitType) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;\n          break;\n        case \"symbol\":\n          message = FlowErrors.EnumInvalidMemberInitializerSymbolType;\n          break;\n        default:\n          // null\n          message = FlowErrors.EnumInvalidMemberInitializerUnknownType;\n      }\n      return this.raise(pos, message, enumName, memberName, explicitType);\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      this.raise(\n        pos,\n        FlowErrors.EnumNumberMemberNotInitialized,\n        enumName,\n        memberName,\n      );\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitailized(\n      pos: number,\n      { enumName }: { enumName: string },\n    ): void {\n      this.raise(\n        pos,\n        FlowErrors.EnumStringMemberInconsistentlyInitailized,\n        enumName,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startPos = this.state.start;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", pos: literal.start, value: literal };\n          }\n          return { type: \"invalid\", pos: startPos };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", pos: literal.start, value: literal };\n          }\n          return { type: \"invalid\", pos: startPos };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              pos: literal.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", pos: startPos };\n        }\n        default:\n          return { type: \"invalid\", pos: startPos };\n      }\n    }\n\n    flowEnumMemberRaw(): { id: N.Node, init: EnumMemberInit } {\n      const pos = this.state.start;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\", pos };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      pos: number,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(pos, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string,\n      explicitType: EnumExplicitType,\n    }): {|\n      members: {|\n        booleanMembers: Array<N.Node>,\n        numberMembers: Array<N.Node>,\n        stringMembers: Array<N.Node>,\n        defaultedMembers: Array<N.Node>,\n      |},\n      hasUnknownMembers: boolean,\n    |} {\n      const seenNames = new Set();\n      const members = {\n        booleanMembers: [],\n        numberMembers: [],\n        stringMembers: [],\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.flowEnumErrorInvalidMemberName(id.start, {\n            enumName,\n            memberName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.flowEnumErrorDuplicateMemberName(id.start, {\n            enumName,\n            memberName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.pos,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.pos,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      { enumName }: { enumName: string },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(\n            member.start,\n            { enumName },\n          );\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(\n            member.start,\n            { enumName },\n          );\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string,\n    }): EnumExplicitType {\n      if (this.eatContextual(\"of\")) {\n        if (!this.match(tt.name)) {\n          throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n            enumName,\n            suppliedType: null,\n          });\n        }\n\n        const { value } = this.state;\n        this.next();\n\n        if (\n          value !== \"boolean\" &&\n          value !== \"number\" &&\n          value !== \"string\" &&\n          value !== \"symbol\"\n        ) {\n          this.flowEnumErrorInvalidExplicitType(this.state.start, {\n            enumName,\n            suppliedType: value,\n          });\n        }\n\n        return value;\n      }\n      return null;\n    }\n\n    flowEnumBody(node: N.Node, { enumName, nameLoc }): N.Node {\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.flowEnumErrorInconsistentMemberValues(nameLoc, { enumName });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(node: N.Node): N.Node {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), {\n        enumName: id.name,\n        nameLoc: id.start,\n      });\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    // check if the next token is a tt.relation(\"<\")\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n", "// @flow\n\nconst entities: { [name: string]: string } = {\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n};\nexport default entities;\n", "// @flow\n\n// Error messages are colocated with the plugin.\n/* eslint-disable @babel/development-internal/dry-error-messages */\n\nimport * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml\";\nimport type Parser from \"../../parser\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport { TokenType, types as tt } from \"../../tokenizer/types\";\nimport { TokContext, types as tc } from \"../../tokenizer/context\";\nimport * as N from \"../../types\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier\";\nimport type { Position } from \"../../util/location\";\nimport { isNewLine } from \"../../util/whitespace\";\nimport { Errors, makeErrorTemplates, ErrorCodes } from \"../../parser/error\";\nimport type { LookaheadState } from \"../../tokenizer/state\";\nimport State from \"../../tokenizer/state\";\n\ntype JSXLookaheadState = LookaheadState & { inPropertyName: boolean };\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = makeErrorTemplates(\n  {\n    AttributeIsEmpty:\n      \"JSX attributes must only be assigned a non-empty expression.\",\n    MissingClosingTagElement:\n      \"Expected corresponding JSX closing tag for <%0>.\",\n    MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n    UnexpectedSequenceExpression:\n      \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n    UnsupportedJsxValue:\n      \"JSX value should be either an expression or a quoted JSX text.\",\n    UnterminatedJsxContent: \"Unterminated JSX contents.\",\n    UnwrappedAdjacentJSXElements:\n      \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n  },\n  /* code */ ErrorCodes.SyntaxError,\n);\n/* eslint-disable sort-keys */\n\n// Be aware that this file is always executed and not only when the plugin is enabled.\n// Therefore this contexts and tokens do always exist.\ntc.j_oTag = new TokContext(\"<tag\");\ntc.j_cTag = new TokContext(\"</tag\");\ntc.j_expr = new TokContext(\"<tag>...</tag>\", true);\n\ntt.jsxName = new TokenType(\"jsxName\");\ntt.jsxText = new TokenType(\"jsxText\", { beforeExpr: true });\ntt.jsxTagStart = new TokenType(\"jsxTagStart\", { startsExpr: true });\ntt.jsxTagEnd = new TokenType(\"jsxTagEnd\");\n\ntt.jsxTagStart.updateContext = context => {\n  context.push(\n    tc.j_expr, // treat as beginning of JSX expression\n    tc.j_oTag, // start opening tag context\n  );\n};\n\nfunction isFragment(object: ?N.JSXElement): boolean {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.exprAllowed) {\n                ++this.state.pos;\n                return this.finishToken(tt.jsxTagStart);\n              }\n              return super.getTokenFromCode(ch);\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            return this.finishToken(tt.jsxText, out);\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              const htmlEntity =\n                ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\";\n              const char = this.input[this.state.pos];\n              this.raise(this.state.pos, {\n                code: ErrorCodes.SyntaxError,\n                reasonCode: \"UnexpectedToken\",\n                template: `Unexpected token \\`${char}\\`. Did you mean \\`${htmlEntity}\\` or \\`{'${char}'}\\`?`,\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(this.state.start, Errors.UnterminatedString);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      return this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      let str = \"\";\n      let count = 0;\n      let entity;\n      let ch = this.input[this.state.pos];\n\n      const startPos = ++this.state.pos;\n      while (this.state.pos < this.length && count++ < 10) {\n        ch = this.input[this.state.pos++];\n        if (ch === \";\") {\n          if (str[0] === \"#\") {\n            if (str[1] === \"x\") {\n              str = str.substr(2);\n              if (HEX_NUMBER.test(str)) {\n                entity = String.fromCodePoint(parseInt(str, 16));\n              }\n            } else {\n              str = str.substr(1);\n              if (DECIMAL_NUMBER.test(str)) {\n                entity = String.fromCodePoint(parseInt(str, 10));\n              }\n            }\n          } else {\n            entity = XHTMLEntities[str];\n          }\n          break;\n        }\n        str += ch;\n      }\n      if (!entity) {\n        this.state.pos = startPos;\n        return \"&\";\n      }\n      return entity;\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      return this.finishToken(\n        tt.jsxName,\n        this.input.slice(start, this.state.pos),\n      );\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (this.state.type.keyword) {\n        node.name = this.state.type.keyword;\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt(startPos, startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let node = this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt(startPos, startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue(): N.Expression {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.next();\n          node = this.jsxParseExpressionContainer(node);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(node.start, JsxErrors.AttributeIsEmpty);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom();\n\n        default:\n          throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(\n        this.state.lastTokEnd,\n        this.state.lastTokEndLoc,\n      );\n      return this.finishNodeAt(\n        node,\n        \"JSXEmptyExpression\",\n        this.state.start,\n        this.state.startLoc,\n      );\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: N.JSXSpreadChild): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: N.JSXExpressionContainer,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(\n              expression.expressions[1].start,\n              JsxErrors.UnexpectedSequenceExpression,\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute {\n      const node = this.startNode();\n      if (this.eat(tt.braceL)) {\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startPos: number,\n      startLoc: Position,\n    ): N.JSXOpeningElement {\n      const node = this.startNodeAt(startPos, startLoc);\n      if (this.match(tt.jsxTagEnd)) {\n        this.expect(tt.jsxTagEnd);\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(node);\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      const attributes: N.JSXAttribute[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startPos: number,\n      startLoc: Position,\n    ): N.JSXClosingElement {\n      const node = this.startNodeAt(startPos, startLoc);\n      if (this.match(tt.jsxTagEnd)) {\n        this.expect(tt.jsxTagEnd);\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startPos: number, startLoc: Position): N.JSXElement {\n      const node = this.startNodeAt(startPos, startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startPos = this.state.start;\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(\n                  startPos,\n                  startLoc,\n                );\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startPos, startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseExprAtom());\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode();\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(this.jsxParseExpressionContainer(node));\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              throw this.unexpected();\n          }\n        }\n\n        if (isFragment(openingElement) && !isFragment(closingElement)) {\n          this.raise(\n            // $FlowIgnore\n            closingElement.start,\n            JsxErrors.MissingClosingTagFragment,\n          );\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(\n            // $FlowIgnore\n            closingElement.start,\n            JsxErrors.MissingClosingTagElement,\n            getQualifiedJSXName(openingElement.name),\n          );\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            // $FlowIgnore\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(\n              // $FlowIgnore\n              closingElement.start,\n              JsxErrors.MissingClosingTagElement,\n              getQualifiedJSXName(openingElement.name),\n            );\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.isRelational(\"<\")) {\n        throw this.raise(\n          this.state.start,\n          JsxErrors.UnwrappedAdjacentJSXElements,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startPos, startLoc);\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors: ?ExpressionErrors): N.Expression {\n      if (this.match(tt.jsxText)) {\n        return this.parseLiteral(this.state.value, \"JSXText\");\n      } else if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.isRelational(\"<\") &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.finishToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    createLookaheadState(state: State): JSXLookaheadState {\n      const lookaheadState = ((super.createLookaheadState(\n        state,\n      ): any): JSXLookaheadState);\n      lookaheadState.inPropertyName = state.inPropertyName;\n      return lookaheadState;\n    }\n\n    getTokenFromCode(code: number): void {\n      if (this.state.inPropertyName) return super.getTokenFromCode(code);\n\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        return this.jsxReadToken();\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          return this.jsxReadWord();\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          return this.finishToken(tt.jsxTagEnd);\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          return this.jsxReadString(code);\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.exprAllowed &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        return this.finishToken(tt.jsxTagStart);\n      }\n\n      return super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      super.updateContext(prevType);\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.exprAllowed = false;\n      } else if (type === tt.jsxTagEnd) {\n        const out = context.pop();\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.exprAllowed = context[context.length - 1] === tc.j_expr;\n        } else {\n          this.state.exprAllowed = true;\n        }\n      } else if (\n        type.keyword &&\n        (prevType === tt.dot || prevType === tt.questionDot)\n      ) {\n        this.state.exprAllowed = false;\n      } else {\n        this.state.exprAllowed = type.beforeExpr;\n      }\n    }\n  };\n", "// @flow\n\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n  BIND_KIND_TYPE,\n  BIND_FLAGS_TS_ENUM,\n  BIND_FLAGS_TS_CONST_ENUM,\n  BIND_FLAGS_TS_EXPORT_ONLY,\n  BIND_KIND_VALUE,\n  BIND_FLAGS_CLASS,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"../../util/scopeflags\";\nimport * as N from \"../../types\";\n\nclass TypeScriptScope extends Scope {\n  types: Set<string> = new Set();\n\n  // enums (which are also in .types)\n  enums: Set<string> = new Set();\n\n  // const enums (which are also in .enums and .types)\n  constEnums: Set<string> = new Set();\n\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  classes: Set<string> = new Set();\n\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  exportOnlyBindings: Set<string> = new Set();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  createScope(flags: ScopeFlags): TypeScriptScope {\n    return new TypeScriptScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingTypes, pos: number) {\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.add(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        this.maybeExportDefined(scope, name);\n      }\n      scope.types.add(name);\n    }\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (scope.enums.has(name)) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.has(name);\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\n      if (scope.lexical.has(name)) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(...arguments);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const topLevelScope = this.scopeStack[0];\n    const { name } = id;\n    if (\n      !topLevelScope.types.has(name) &&\n      !topLevelScope.exportOnlyBindings.has(name)\n    ) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n", "// @flow\n\n/*:: declare var invariant; */\n\n// Error messages are colocated with the plugin.\n/* eslint-disable @babel/development-internal/dry-error-messages */\n\nimport type { TokenType } from \"../../tokenizer/types\";\nimport type State from \"../../tokenizer/state\";\nimport { types as tt } from \"../../tokenizer/types\";\nimport { types as ct } from \"../../tokenizer/context\";\nimport * as N from \"../../types\";\nimport type { Position } from \"../../util/location\";\nimport type Parser from \"../../parser\";\nimport {\n  type BindingTypes,\n  SCOPE_TS_MODULE,\n  SCOPE_OTHER,\n  BIND_TS_ENUM,\n  BIND_TS_CONST_ENUM,\n  BIND_TS_TYPE,\n  BIND_TS_INTERFACE,\n  BIND_TS_AMBIENT,\n  BIND_TS_NAMESPACE,\n  BIND_CLASS,\n  BIND_LEXICAL,\n} from \"../../util/scopeflags\";\nimport TypeScriptScopeHandler from \"./scope\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport { PARAM } from \"../../util/production-parameter\";\nimport {\n  Errors,\n  makeErrorTemplates,\n  type ErrorTemplate,\n  ErrorCodes,\n} from \"../../parser/error\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | N.Accessibility;\n\nfunction nonNull<T>(x: ?T): T {\n  if (x == null) {\n    // $FlowIgnore\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = makeErrorTemplates(\n  {\n    AbstractMethodHasImplementation:\n      \"Method '%0' cannot have an implementation because it is marked abstract.\",\n    AbstractPropertyHasInitializer:\n      \"Property '%0' cannot have an initializer because it is marked abstract.\",\n    AccesorCannotDeclareThisParameter:\n      \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n    AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n    ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n    ClassMethodHasReadonly:\n      \"Class methods cannot have the 'readonly' modifier.\",\n    ConstructorHasTypeParameters:\n      \"Type parameters cannot appear on a constructor declaration.\",\n    DeclareAccessor: \"'declare' is not allowed in %0ters.\",\n    DeclareClassFieldHasInitializer:\n      \"Initializers are not allowed in ambient contexts.\",\n    DeclareFunctionHasImplementation:\n      \"An implementation cannot be declared in ambient contexts.\",\n    DuplicateAccessibilityModifier: \"Accessibility modifier already seen.\",\n    DuplicateModifier: \"Duplicate modifier: '%0'.\",\n    EmptyHeritageClauseType: \"'%0' list cannot be empty.\",\n    EmptyTypeArguments: \"Type argument list cannot be empty.\",\n    EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n    ExpectedAmbientAfterExportDeclare:\n      \"'export declare' must be followed by an ambient declaration.\",\n    ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n    IncompatibleModifiers: \"'%0' modifier cannot be used with '%1' modifier.\",\n    IndexSignatureHasAbstract:\n      \"Index signatures cannot have the 'abstract' modifier.\",\n    IndexSignatureHasAccessibility:\n      \"Index signatures cannot have an accessibility modifier ('%0').\",\n    IndexSignatureHasDeclare:\n      \"Index signatures cannot have the 'declare' modifier.\",\n    IndexSignatureHasOverride:\n      \"'override' modifier cannot appear on an index signature.\",\n    IndexSignatureHasStatic:\n      \"Index signatures cannot have the 'static' modifier.\",\n    InvalidModifierOnTypeMember:\n      \"'%0' modifier cannot appear on a type member.\",\n    InvalidModifiersOrder: \"'%0' modifier must precede '%1' modifier.\",\n    InvalidTupleMemberLabel:\n      \"Tuple members must be labeled with a simple identifier.\",\n    MissingInterfaceName:\n      \"'interface' declarations must be followed by an identifier.\",\n    MixedLabeledAndUnlabeledElements:\n      \"Tuple members must all have names or all not have names.\",\n    NonAbstractClassHasAbstractMethod:\n      \"Abstract methods can only appear within an abstract class.\",\n    NonClassMethodPropertyHasAbstractModifer:\n      \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n    OptionalTypeBeforeRequired:\n      \"A required element cannot follow an optional element.\",\n    OverrideNotInSubClass:\n      \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n    PatternIsOptional:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    PrivateElementHasAbstract:\n      \"Private elements cannot have the 'abstract' modifier.\",\n    PrivateElementHasAccessibility:\n      \"Private elements cannot have an accessibility modifier ('%0').\",\n    ReadonlyForMethodSignature:\n      \"'readonly' modifier can only appear on a property declaration or index signature.\",\n    SetAccesorCannotHaveOptionalParameter:\n      \"A 'set' accessor cannot have an optional parameter.\",\n    SetAccesorCannotHaveRestParameter:\n      \"A 'set' accessor cannot have rest parameter.\",\n    SetAccesorCannotHaveReturnType:\n      \"A 'set' accessor cannot have a return type annotation.\",\n    StaticBlockCannotHaveModifier:\n      \"Static class blocks cannot have any modifier.\",\n    TypeAnnotationAfterAssign:\n      \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n    TypeImportCannotSpecifyDefaultAndNamed:\n      \"A type-only import can specify a default import or named bindings, but not both.\",\n    UnexpectedParameterModifier:\n      \"A parameter property is only allowed in a constructor implementation.\",\n    UnexpectedReadonly:\n      \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n    UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n    UnexpectedTypeCastInParameter:\n      \"Unexpected type cast in parameter position.\",\n    UnsupportedImportTypeArgument:\n      \"Argument in a type import must be a string literal.\",\n    UnsupportedParameterPropertyKind:\n      \"A parameter property may not be declared using a binding pattern.\",\n    UnsupportedSignatureParameterKind:\n      \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0.\",\n  },\n  /* code */ ErrorCodes.SyntaxError,\n);\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(\n  value: string,\n): N.TsKeywordTypeType | typeof undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): boolean %checks {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    getScopeHandler(): Class<TypeScriptScopeHandler> {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return this.match(tt.name);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        (this.match(tt.bracketL) ||\n          this.match(tt.braceL) ||\n          this.match(tt.star) ||\n          this.match(tt.ellipsis) ||\n          this.match(tt.privateName) ||\n          this.isLiteralPropertyName()) &&\n        !this.hasPrecedingLineBreak()\n      );\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\n      this.next();\n      return this.tsTokenCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T: TsModifier>(allowedModifiers: T[]): ?T {\n      if (!this.match(tt.name)) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (\n        allowedModifiers.indexOf(modifier) !== -1 &&\n        this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))\n      ) {\n        return modifier;\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers(node, [\"public\"]);\n     *    this.tsParseModifiers(node, [\"abstract\", \"readonly\"]);\n     */\n    tsParseModifiers(\n      modified: {\n        [key: TsModifier]: ?true,\n        accessibility?: N.Accessibility,\n      },\n      allowedModifiers: TsModifier[],\n      disallowedModifiers?: TsModifier[],\n      errorTemplate?: ErrorTemplate,\n    ): void {\n      const enforceOrder = (pos, modifier, before, after) => {\n        if (modifier === before && modified[after]) {\n          this.raise(pos, TSErrors.InvalidModifiersOrder, before, after);\n        }\n      };\n      const incompatible = (pos, modifier, mod1, mod2) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(pos, TSErrors.IncompatibleModifiers, mod1, mod2);\n        }\n      };\n\n      for (;;) {\n        const startPos = this.state.start;\n        const modifier: ?TsModifier = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(startPos, TSErrors.DuplicateAccessibilityModifier);\n          } else {\n            enforceOrder(startPos, modifier, modifier, \"override\");\n            enforceOrder(startPos, modifier, modifier, \"static\");\n            enforceOrder(startPos, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else {\n          if (Object.hasOwnProperty.call(modified, modifier)) {\n            this.raise(startPos, TSErrors.DuplicateModifier, modifier);\n          } else {\n            enforceOrder(startPos, modifier, \"static\", \"readonly\");\n            enforceOrder(startPos, modifier, \"static\", \"override\");\n            enforceOrder(startPos, modifier, \"override\", \"readonly\");\n            enforceOrder(startPos, modifier, \"abstract\", \"override\");\n\n            incompatible(startPos, modifier, \"declare\", \"override\");\n            incompatible(startPos, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(\n            startPos,\n            // $FlowIgnore\n            errorTemplate,\n            modifier,\n          );\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.isRelational(\">\");\n      }\n\n      throw new Error(\"Unreachable\");\n    }\n\n    tsParseList<T: N.Node>(kind: ParsingContext, parseElement: () => T): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T: N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T: N.Node>(\n      kind: ParsingContext,\n      parseElement: () => ?T,\n      expectSuccess: boolean,\n    ): ?(T[]) {\n      const result = [];\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T: N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expectRelational(\"<\");\n        }\n      }\n\n      const result = this.tsParseDelimitedList(kind, parseElement);\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expectRelational(\">\");\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node: N.TsImportType = this.startNode();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);\n      }\n\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.argument = this.parseExprAtom();\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        node.qualifier = this.tsParseEntityName(/* allowReservedWords */ true);\n      }\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseEntityName(allowReservedWords: boolean): N.TsEntityName {\n      let entity: N.TsEntityName = this.parseIdentifier();\n      while (this.eat(tt.dot)) {\n        const node: N.TsQualifiedName = this.startNodeAtNode(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(allowReservedWords);\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node: N.TsTypeReference = this.startNode();\n      node.typeName = this.tsParseEntityName(/* allowReservedWords */ false);\n      if (!this.hasPrecedingLineBreak() && this.isRelational(\"<\")) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node: N.TsTypePredicate = this.startNodeAtNode(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node: N.TsThisType = this.startNode();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node: N.TsTypeQuery = this.startNode();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        node.exprName = this.tsParseEntityName(/* allowReservedWords */ true);\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseTypeParameter(): N.TsTypeParameter {\n      const node: N.TsTypeParameter = this.startNode();\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(): ?N.TsTypeParameterDeclaration {\n      if (this.isRelational(\"<\")) {\n        return this.tsParseTypeParameters();\n      }\n    }\n\n    tsParseTypeParameters() {\n      const node: N.TsTypeParameterDeclaration = this.startNode();\n\n      if (this.isRelational(\"<\") || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n      );\n      if (node.params.length === 0) {\n        this.raise(node.start, TSErrors.EmptyTypeParameters);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    tsTryNextParseConstantContext(): ?N.TsTypeReference {\n      if (this.lookahead().type === tt._const) {\n        this.next();\n        return this.tsParseTypeReference();\n      }\n      return null;\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: N.TsSignatureDeclaration,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n      signature.typeParameters = this.tsTryParseTypeParameters();\n      this.expect(tt.parenL);\n      signature.parameters = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature.typeAnnotation =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature.typeAnnotation =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): $ReadOnlyArray<\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern,\n    > {\n      return this.parseBindingList(tt.parenR, charCodes.rightParenthesis).map(\n        pattern => {\n          if (\n            pattern.type !== \"Identifier\" &&\n            pattern.type !== \"RestElement\" &&\n            pattern.type !== \"ObjectPattern\" &&\n            pattern.type !== \"ArrayPattern\"\n          ) {\n            this.raise(\n              pattern.start,\n              TSErrors.UnsupportedSignatureParameterKind,\n              pattern.type,\n            );\n          }\n          return (pattern: any);\n        },\n      );\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      return this.eat(tt.name) && this.match(tt.colon);\n    }\n\n    tsTryParseIndexSignature(node: N.Node): ?N.TsIndexSignature {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return undefined;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: N.TsPropertySignature | N.TsMethodSignature,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n      const nodeAny: any = node;\n\n      if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n        if (readonly) {\n          this.raise(node.start, TSErrors.ReadonlyForMethodSignature);\n        }\n        const method: N.TsMethodSignature = nodeAny;\n        if (method.kind && this.isRelational(\"<\")) {\n          this.raise(this.state.pos, TSErrors.AccesorCannotHaveTypeParameters);\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        if (method.kind === \"get\") {\n          if (method.parameters.length > 0) {\n            this.raise(this.state.pos, Errors.BadGetterArity);\n            if (this.isThisParam(method.parameters[0])) {\n              this.raise(\n                this.state.pos,\n                TSErrors.AccesorCannotDeclareThisParameter,\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method.parameters.length !== 1) {\n            this.raise(this.state.pos, Errors.BadSetterArity);\n          } else {\n            const firstParameter = method.parameters[0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                this.state.pos,\n                TSErrors.AccesorCannotDeclareThisParameter,\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                this.state.pos,\n                TSErrors.SetAccesorCannotHaveOptionalParameter,\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                this.state.pos,\n                TSErrors.SetAccesorCannotHaveRestParameter,\n              );\n            }\n          }\n          if (method.typeAnnotation) {\n            this.raise(\n              method.typeAnnotation.start,\n              TSErrors.SetAccesorCannotHaveReturnType,\n            );\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property: N.TsPropertySignature = nodeAny;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id: N.Identifier = this.startNode();\n        this.next();\n        if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers(\n        node,\n        [\"readonly\"],\n        [\n          \"declare\",\n          \"abstract\",\n          \"private\",\n          \"protected\",\n          \"public\",\n          \"static\",\n          \"override\",\n        ],\n        TSErrors.InvalidModifierOnTypeMember,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      this.parsePropertyName(node, /* isPrivateNameAllowed */ false);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        this.parsePropertyName(node, /* isPrivateNameAllowed */ false);\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node: N.TsTypeLiteral = this.startNode();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): $ReadOnlyArray<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(\"readonly\");\n      }\n      if (this.isContextual(\"readonly\")) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedTypeParameter(): N.TsTypeParameter {\n      const node: N.TsTypeParameter = this.startNode();\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsExpectThenParseType(tt._in);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node: N.TsMappedType = this.startNode();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(\"readonly\");\n      } else if (this.eatContextual(\"readonly\")) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      node.typeParameter = this.tsParseMappedTypeParameter();\n      node.nameType = this.eatContextual(\"as\") ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node: N.TsTupleType = this.startNode();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      let labeledElements = null;\n      node.elementTypes.forEach(elementNode => {\n        let { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);\n        }\n\n        // Flow doesn't support ||=\n        seenOptionalElement =\n          seenOptionalElement ||\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n\n        // When checking labels, check the argument of the spread operator\n        if (type === \"TSRestType\") {\n          elementNode = elementNode.typeAnnotation;\n          type = elementNode.type;\n        }\n\n        const isLabeled = type === \"TSNamedTupleMember\";\n        // Flow doesn't support ??=\n        labeledElements = labeledElements ?? isLabeled;\n        if (labeledElements !== isLabeled) {\n          this.raise(\n            elementNode.start,\n            TSErrors.MixedLabeledAndUnlabeledElements,\n          );\n        }\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsType | N.TsNamedTupleMember {\n      // parses `...TsType[]`\n\n      const { start: startPos, startLoc } = this.state;\n\n      const rest = this.eat(tt.ellipsis);\n      let type = this.tsParseType();\n      const optional = this.eat(tt.question);\n      const labeled = this.eat(tt.colon);\n\n      if (labeled) {\n        const labeledNode: N.TsNamedTupleMember = this.startNodeAtNode(type);\n        labeledNode.optional = optional;\n\n        if (\n          type.type === \"TSTypeReference\" &&\n          !type.typeParameters &&\n          type.typeName.type === \"Identifier\"\n        ) {\n          labeledNode.label = (type.typeName: N.Identifier);\n        } else {\n          this.raise(type.start, TSErrors.InvalidTupleMemberLabel);\n          // This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          // $FlowIgnore\n          labeledNode.label = type;\n        }\n\n        labeledNode.elementType = this.tsParseType();\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode: N.TsOptionalType = this.startNodeAtNode(type);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode: N.TsRestType = this.startNodeAt(startPos, startLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node: N.TsFunctionOrConstructorType = this.startNode();\n      if (type === \"TSConstructorType\") {\n        // $FlowIgnore\n        node.abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsFillSignature(tt.arrow, node);\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node: N.TsLiteralType = this.startNode();\n      node.literal = (() => {\n        switch (this.state.type) {\n          case tt.num:\n          case tt.bigint:\n          case tt.string:\n          case tt._true:\n          case tt._false:\n            // For compatibility to estree we cannot call parseLiteral directly here\n            return this.parseExprAtom();\n          default:\n            throw this.unexpected();\n        }\n      })();\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsType {\n      const node: N.TsLiteralType = this.startNode();\n      node.literal = this.parseTemplate(false);\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    parseTemplateSubstitution(): N.TsType {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.name:\n        case tt._void:\n        case tt._null: {\n          const type = this.match(tt._void)\n            ? \"TSVoidKeyword\"\n            : this.match(tt._null)\n            ? \"TSNullKeyword\"\n            : keywordTypeFromName(this.state.value);\n          if (\n            type !== undefined &&\n            this.lookaheadCharCode() !== charCodes.dot\n          ) {\n            const node: N.TsKeywordType = this.startNode();\n            this.next();\n            return this.finishNode(node, type);\n          }\n          return this.tsParseTypeReference();\n        }\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node: N.TsLiteralType = this.startNode();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              throw this.unexpected();\n            }\n            node.literal = this.parseMaybeUnary();\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (!this.options.createParenthesizedExpressions) {\n              const startPos = this.state.start;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startPos);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.backQuote:\n          return this.tsParseTemplateLiteralType();\n      }\n\n      throw this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node: N.TsArrayType = this.startNodeAtNode(type);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node: N.TsIndexedAccessType = this.startNodeAtNode(type);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(\n      operator: \"keyof\" | \"unique\" | \"readonly\",\n    ): N.TsTypeOperator {\n      const node: N.TsTypeOperator = this.startNode();\n      this.expectContextual(operator);\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: N.Node) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(node.start, TSErrors.UnexpectedReadonly);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode();\n      this.expectContextual(\"infer\");\n      const typeParameter = this.startNode();\n      typeParameter.name = this.tsParseTypeParameterName();\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const operator = [\"keyof\", \"unique\", \"readonly\"].find(kw =>\n        this.isContextual(kw),\n      );\n      return operator\n        ? this.tsParseTypeOperator(operator)\n        : this.isContextual(\"infer\")\n        ? this.tsParseInferType()\n        : this.tsParseArrayTypeOrHigher();\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node: N.TsUnionType | N.TsIntersectionType = this.startNode();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.isRelational(\"<\")) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (this.match(tt.name) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        let braceStackCounter = 1;\n        this.next();\n\n        while (braceStackCounter > 0) {\n          if (this.match(tt.braceL)) {\n            ++braceStackCounter;\n          } else if (this.match(tt.braceR)) {\n            --braceStackCounter;\n          }\n          this.next();\n        }\n        return true;\n      }\n\n      if (this.match(tt.bracketL)) {\n        let braceStackCounter = 1;\n        this.next();\n\n        while (braceStackCounter > 0) {\n          if (this.match(tt.bracketL)) {\n            ++braceStackCounter;\n          } else if (this.match(tt.bracketR)) {\n            --braceStackCounter;\n          }\n          this.next();\n        }\n        return true;\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t: N.TsTypeAnnotation = this.startNode();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = (thisTypePredicate: N.TsThisType);\n            node.asserts = true;\n            (node: N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            (thisTypePredicate: N.TsTypePredicate).asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node: N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): ?N.TsTypeAnnotation {\n      return this.match(tt.colon)\n        ? this.tsParseTypeOrTypePredicateAnnotation(tt.colon)\n        : undefined;\n    }\n\n    tsTryParseTypeAnnotation(): ?N.TsTypeAnnotation {\n      return this.match(tt.colon) ? this.tsParseTypeAnnotation() : undefined;\n    }\n\n    tsTryParseType(): ?N.TsType {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): ?N.Identifier {\n      const id = this.parseIdentifier();\n      if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (\n        !this.match(tt.name) ||\n        this.state.value !== \"asserts\" ||\n        this.hasPrecedingLineBreak()\n      ) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!this.match(tt.name) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          this.state.lastTokStart,\n          Errors.InvalidEscapedReservedWord,\n          \"asserts\",\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: N.TsTypeAnnotation = this.startNode(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n      if (this.hasPrecedingLineBreak() || !this.eat(tt._extends)) {\n        return type;\n      }\n      const node: N.TsConditionalType = this.startNodeAtNode(type);\n      node.checkType = type;\n      node.extendsType = this.tsParseNonConditionalType();\n      this.expect(tt.question);\n      node.trueType = this.tsParseType();\n      this.expect(tt.colon);\n      node.falseType = this.tsParseType();\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return this.isContextual(\"abstract\") && this.lookahead().type === tt._new;\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      const node: N.TsTypeAssertion = this.startNode();\n      const _const = this.tsTryNextParseConstantContext();\n      node.typeAnnotation = _const || this.tsNextThenParseType();\n      this.expectRelational(\">\");\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(\n      descriptor: string,\n    ): $ReadOnlyArray<N.TsExpressionWithTypeArguments> {\n      const originalStart = this.state.start;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        this.tsParseExpressionWithTypeArguments.bind(this),\n      );\n\n      if (!delimitedList.length) {\n        this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);\n      }\n\n      return delimitedList;\n    }\n\n    tsParseExpressionWithTypeArguments(): N.TsExpressionWithTypeArguments {\n      const node: N.TsExpressionWithTypeArguments = this.startNode();\n      // Note: TS uses parseLeftHandSideExpressionOrHigher,\n      // then has grammar errors later if it's not an EntityName.\n      node.expression = this.tsParseEntityName(/* allowReservedWords */ false);\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n\n      return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n    }\n\n    tsParseInterfaceDeclaration(\n      node: N.TsInterfaceDeclaration,\n    ): N.TsInterfaceDeclaration {\n      if (this.match(tt.name)) {\n        node.id = this.parseIdentifier();\n        this.checkLVal(\n          node.id,\n          \"typescript interface declaration\",\n          BIND_TS_INTERFACE,\n        );\n      } else {\n        node.id = null;\n        this.raise(this.state.start, TSErrors.MissingInterfaceName);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters();\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body: N.TSInterfaceBody = this.startNode();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkLVal(node.id, \"typescript type alias\", BIND_TS_TYPE);\n\n      node.typeParameters = this.tsTryParseTypeParameters();\n      node.typeAnnotation = this.tsInType(() => {\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(\"intrinsic\") &&\n          this.lookahead().type !== tt.dot\n        ) {\n          const node: N.TsKeywordType = this.startNode();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    tsInNoContext<T>(cb: () => T): T {\n      const oldContext = this.state.context;\n      this.state.context = [oldContext[0]];\n      try {\n        return cb();\n      } finally {\n        this.state.context = oldContext;\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | typeof undefined {\n      return !this.match(token) ? undefined : this.tsNextThenParseType();\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsDoThenParseType(() => this.expect(token));\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsDoThenParseType(() => this.next());\n    }\n\n    tsDoThenParseType(cb: () => void): N.TsType {\n      return this.tsInType(() => {\n        cb();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node: N.TsEnumMember = this.startNode();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? this.parseExprAtom()\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = this.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: N.TsEnumDeclaration,\n      isConst: boolean,\n    ): N.TsEnumDeclaration {\n      if (isConst) node.const = true;\n      node.id = this.parseIdentifier();\n      this.checkLVal(\n        node.id,\n        \"typescript enum declaration\",\n        isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM,\n      );\n\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node: N.TsModuleBlock = this.startNode();\n      this.scope.enter(SCOPE_OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      this.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: N.TsModuleDeclaration,\n      nested?: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = this.parseIdentifier();\n\n      if (!nested) {\n        this.checkLVal(\n          node.id,\n          \"module or namespace declaration\",\n          BIND_TS_NAMESPACE,\n        );\n      }\n\n      if (this.eat(tt.dot)) {\n        const inner = this.startNode();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        node.body = inner;\n      } else {\n        this.scope.enter(SCOPE_TS_MODULE);\n        this.prodParam.enter(PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(\"global\")) {\n        node.global = true;\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.id = this.parseExprAtom();\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(SCOPE_TS_MODULE);\n        this.prodParam.enter(PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: N.TsImportEqualsDeclaration,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      node.isExport = isExport || false;\n      node.id = this.parseIdentifier();\n      this.checkLVal(node.id, \"import equals declaration\", BIND_LEXICAL);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(moduleReference.start, TSErrors.ImportAliasHasImportType);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(\"require\") &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(/* allowReservedWords */ false);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node: N.TsExternalModuleReference = this.startNode();\n      this.expectContextual(\"require\");\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        throw this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = this.parseExprAtom();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T: ?N.NodeBase>(f: () => T): ?T {\n      const result = this.tryParse(abort => f() || abort());\n\n      if (result.aborted || !result.node) return undefined;\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => ?T): ?T {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      } else {\n        this.state = state;\n        return undefined;\n      }\n    }\n\n    tsTryParseDeclare(nany: any): ?N.Declaration {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      let starttype = this.state.type;\n      let kind;\n\n      if (this.isContextual(\"let\")) {\n        starttype = tt._var;\n        kind = \"let\";\n      }\n\n      return this.tsInAmbientContext(() => {\n        switch (starttype) {\n          case tt._function:\n            nany.declare = true;\n            return this.parseFunctionStatement(\n              nany,\n              /* async */ false,\n              /* declarationPosition */ true,\n            );\n          case tt._class:\n            // While this is also set by tsParseExpressionStatement, we need to set it\n            // before parsing the class declaration to now how to register it in the scope.\n            nany.declare = true;\n            return this.parseClass(\n              nany,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._const:\n            if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n              // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n              this.expect(tt._const);\n              this.expectContextual(\"enum\");\n              return this.tsParseEnumDeclaration(nany, /* isConst */ true);\n            }\n          // falls through\n          case tt._var:\n            kind = kind || this.state.value;\n            return this.parseVarStatement(nany, kind);\n          case tt.name: {\n            const value = this.state.value;\n            if (value === \"global\") {\n              return this.tsParseAmbientExternalModuleDeclaration(nany);\n            } else {\n              return this.tsParseDeclaration(nany, value, /* next */ true);\n            }\n          }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): ?N.Declaration {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n      );\n    }\n\n    tsParseExpressionStatement(node: any, expr: N.Identifier): ?N.Declaration {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n          break;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(SCOPE_TS_MODULE);\n            this.prodParam.enter(PARAM);\n            const mod: N.TsModuleDeclaration = node;\n            mod.global = true;\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(node, expr.name, /* next */ false);\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n    ): ?N.Declaration {\n      // no declaration apart from enum can be followed by a line break.\n      switch (value) {\n        case \"abstract\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || this.match(tt.name))\n          ) {\n            return this.tsParseAbstractDeclaration(node);\n          }\n          break;\n\n        case \"enum\":\n          if (next || this.match(tt.name)) {\n            if (next) this.next();\n            return this.tsParseEnumDeclaration(node, /* isConst */ false);\n          }\n          break;\n\n        case \"interface\":\n          if (this.tsCheckLineTerminator(next) && this.match(tt.name)) {\n            return this.tsParseInterfaceDeclaration(node);\n          }\n          break;\n\n        case \"module\":\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (this.match(tt.name)) {\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (this.tsCheckLineTerminator(next) && this.match(tt.name)) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (this.tsCheckLineTerminator(next) && this.match(tt.name)) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startPos: number,\n      startLoc: Position,\n    ): ?N.ArrowFunctionExpression {\n      if (!this.isRelational(\"<\")) {\n        return undefined;\n      }\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: ?N.ArrowFunctionExpression = this.tsTryParseAndCatch(() => {\n        const node: N.ArrowFunctionExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        node.typeParameters = this.tsParseTypeParameters();\n        // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n        super.parseFunctionParams(node);\n        node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n        this.expect(tt.arrow);\n        return node;\n      });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) {\n        return undefined;\n      }\n\n      return this.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode();\n      node.params = this.tsInType(() =>\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n        this.tsInNoContext(() => {\n          this.expectRelational(\"<\");\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(node.start, TSErrors.EmptyTypeArguments);\n      }\n      this.expectRelational(\">\");\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      if (this.match(tt.name)) {\n        switch (this.state.value) {\n          case \"abstract\":\n          case \"declare\":\n          case \"enum\":\n          case \"interface\":\n          case \"module\":\n          case \"namespace\":\n          case \"type\":\n            return true;\n        }\n      }\n\n      return false;\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseAssignableListItem(\n      allowModifiers: ?boolean,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location/position to include modifiers in range\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n\n      let accessibility: ?N.Accessibility;\n      let readonly = false;\n      let override = false;\n      if (allowModifiers !== undefined) {\n        const modified = {};\n        this.tsParseModifiers(modified, [\n          \"public\",\n          \"private\",\n          \"protected\",\n          \"override\",\n          \"readonly\",\n        ]);\n        accessibility = modified.accessibility;\n        override = modified.override;\n        readonly = modified.readonly;\n        if (\n          allowModifiers === false &&\n          (accessibility || readonly || override)\n        ) {\n          this.raise(startPos, TSErrors.UnexpectedParameterModifier);\n        }\n      }\n\n      const left = this.parseMaybeDefault();\n      this.parseAssignableListItemTypes(left);\n      const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp: N.TSParameterProperty = this.startNodeAt(startPos, startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);\n        }\n        pp.parameter = ((elt: any): N.Identifier | N.AssignmentPattern);\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    parseFunctionBodyAndFinish(\n      node: N.BodilessFunctionOrMethodBase,\n      type: string,\n      isMethod?: boolean = false,\n    ): void {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\"\n          ? \"TSDeclareMethod\"\n          : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        this.finishNode(node, bodilessType);\n        return;\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);\n        if (\n          // $FlowIgnore\n          node.declare\n        ) {\n          super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n          return;\n        }\n      }\n\n      super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodyless function, we need to do it here.\n        this.checkLVal(node.id, \"function name\", BIND_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(...arguments);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: $ReadOnlyArray<?N.Expression>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(\n            node.typeAnnotation.start,\n            TSErrors.UnexpectedTypeAnnotation,\n          );\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: $ReadOnlyArray<?N.Expression>,\n      isInParens?: boolean, // eslint-disable-line no-unused-vars\n    ): $ReadOnlyArray<?N.Expression> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(...args): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(...args);\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls: ?boolean,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.exprAllowed = false;\n        this.next();\n\n        const nonNullExpression: N.TsNonNullExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      if (this.isRelational(\"<\")) {\n        let missingParenErrorPos;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(\n              startPos,\n              startLoc,\n            );\n            if (asyncArrowFn) {\n              return asyncArrowFn;\n            }\n          }\n\n          const node: N.CallExpression = this.startNodeAt(startPos, startLoc);\n          node.callee = base;\n\n          const typeArguments = this.tsParseTypeArguments();\n\n          if (typeArguments) {\n            if (isOptionalCall && !this.match(tt.parenL)) {\n              missingParenErrorPos = this.state.pos;\n              this.unexpected();\n            }\n\n            if (!noCalls && this.eat(tt.parenL)) {\n              // possibleAsync always false here, because we would have handled it above.\n              // $FlowIgnore (won't be any undefined arguments)\n              node.arguments = this.parseCallExpressionArguments(\n                tt.parenR,\n                /* possibleAsync */ false,\n              );\n\n              // Handles invalid case: `f<T>(a:b)`\n              this.tsCheckForInvalidTypeCasts(node.arguments);\n\n              node.typeParameters = typeArguments;\n              if (state.optionalChainMember) {\n                // $FlowIgnore\n                node.optional = isOptionalCall;\n              }\n\n              return this.finishCallExpression(node, state.optionalChainMember);\n            } else if (this.match(tt.backQuote)) {\n              const result = this.parseTaggedTemplateExpression(\n                base,\n                startPos,\n                startLoc,\n                state,\n              );\n              result.typeParameters = typeArguments;\n              return result;\n            }\n          }\n\n          this.unexpected();\n        });\n\n        if (missingParenErrorPos) {\n          this.unexpected(missingParenErrorPos, tt.parenL);\n        }\n\n        if (result) return result;\n      }\n\n      return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n    }\n\n    parseNewArguments(node: N.NewExpression): void {\n      if (this.isRelational(\"<\")) {\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // 99% certain this is `new C<T>();`. But may be `new C < T;`, which is also legal.\n        const typeParameters = this.tsTryParseAndCatch(() => {\n          const args = this.tsParseTypeArguments();\n          if (!this.match(tt.parenL)) this.unexpected();\n          return args;\n        });\n        if (typeParameters) {\n          node.typeParameters = typeParameters;\n        }\n      }\n\n      super.parseNewArguments(node);\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartPos: number,\n      leftStartLoc: Position,\n      minPrec: number,\n    ) {\n      if (\n        nonNull(tt._in.binop) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        this.isContextual(\"as\")\n      ) {\n        const node: N.TsAsExpression = this.startNodeAt(\n          leftStartPos,\n          leftStartLoc,\n        );\n        node.expression = left;\n        const _const = this.tsTryNextParseConstantContext();\n        if (_const) {\n          node.typeAnnotation = _const;\n        } else {\n          node.typeAnnotation = this.tsNextThenParseType();\n        }\n        this.finishNode(node, \"TSAsExpression\");\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n\n      return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string, // eslint-disable-line no-unused-vars\n      startLoc: number, // eslint-disable-line no-unused-vars\n      checkKeywords: boolean, // eslint-disable-line no-unused-vars\n      // eslint-disable-next-line no-unused-vars\n      isBinding: boolean,\n    ): void {\n      // Don't bother checking for TypeScript code.\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    parseImport(node: N.Node): N.AnyImport {\n      node.importKind = \"value\";\n      if (this.match(tt.name) || this.match(tt.star) || this.match(tt.braceL)) {\n        let ahead = this.lookahead();\n\n        if (\n          this.isContextual(\"type\") &&\n          // import type, { a } from \"b\";\n          ahead.type !== tt.comma &&\n          // import type from \"a\";\n          !(ahead.type === tt.name && ahead.value === \"from\") &&\n          // import type = require(\"a\");\n          ahead.type !== tt.eq\n        ) {\n          node.importKind = \"type\";\n          this.next();\n          ahead = this.lookahead();\n        }\n\n        if (this.match(tt.name) && ahead.type === tt.eq) {\n          return this.tsParseImportEqualsDeclaration(node);\n        }\n      }\n\n      const importNode = super.parseImport(node);\n      /*:: invariant(importNode.type !== \"TSImportEqualsDeclaration\") */\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        importNode.specifiers.length > 1 &&\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(\n          importNode.start,\n          TSErrors.TypeImportCannotSpecifyDefaultAndNamed,\n        );\n      }\n\n      return importNode;\n    }\n\n    parseExport(node: N.Node): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        this.next(); // eat `tt._import`\n        if (\n          this.isContextual(\"type\") &&\n          this.lookaheadCharCode() !== charCodes.equalsTo\n        ) {\n          node.importKind = \"type\";\n          this.next(); // eat \"type\"\n        } else {\n          node.importKind = \"value\";\n        }\n        return this.tsParseImportEqualsDeclaration(node, /* isExport */ true);\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign: N.TsExportAssignment = node;\n        assign.expression = this.parseExpression();\n        this.semicolon();\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(\"as\")) {\n        // `export as namespace A;`\n        const decl: N.TsNamespaceExportDeclaration = node;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(\"namespace\");\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        if (this.isContextual(\"type\") && this.lookahead().type === tt.braceL) {\n          this.next();\n          node.exportKind = \"type\";\n        } else {\n          node.exportKind = \"value\";\n        }\n\n        return super.parseExport(node);\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(\"abstract\") && this.lookahead().type === tt._class\n      );\n    }\n\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        this.parseClass(cls, true, true);\n        return cls;\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.state.value === \"interface\") {\n        const interfaceNode = this.startNode();\n        this.next();\n        const result = this.tsParseInterfaceDeclaration(interfaceNode);\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseStatementContent(context: ?string, topLevel: ?boolean): N.Statement {\n      if (this.state.type === tt._const) {\n        const ahead = this.lookahead();\n        if (ahead.type === tt.name && ahead.value === \"enum\") {\n          const node: N.TsEnumDeclaration = this.startNode();\n          this.expect(tt._const);\n          this.expectContextual(\"enum\");\n          return this.tsParseEnumDeclaration(node, /* isConst */ true);\n        }\n      }\n      return super.parseStatementContent(context, topLevel);\n    }\n\n    parseAccessModifier(): ?N.Accessibility {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const invalidModifersForStaticBlocks = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n      ];\n      this.tsParseModifiers(\n        member,\n        invalidModifersForStaticBlocks.concat([\"static\"]),\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        const isStatic = !!member.static;\n        if (isStatic && this.eat(tt.braceL)) {\n          if (this.tsHasSomeModifiers(member, invalidModifersForStaticBlocks)) {\n            this.raise(this.state.pos, TSErrors.StaticBlockCannotHaveModifier);\n          }\n          this.parseClassStaticBlock(classBody, ((member: any): N.StaticBlock));\n        } else {\n          this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: N.ClassMember | N.TsIndexSignature,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(member);\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member: any).abstract) {\n          this.raise(member.start, TSErrors.IndexSignatureHasAbstract);\n        }\n        if ((member: any).accessibility) {\n          this.raise(\n            member.start,\n            TSErrors.IndexSignatureHasAccessibility,\n            (member: any).accessibility,\n          );\n        }\n        if ((member: any).declare) {\n          this.raise(member.start, TSErrors.IndexSignatureHasDeclare);\n        }\n        if ((member: any).override) {\n          this.raise(member.start, TSErrors.IndexSignatureHasOverride);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member: any).abstract) {\n        this.raise(member.start, TSErrors.NonAbstractClassHasAbstractMethod);\n      }\n\n      if ((member: any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(member.start, TSErrors.OverrideNotInSubClass);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp: any).readonly && this.match(tt.parenL)) {\n        this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);\n      }\n\n      if ((methodOrProp: any).declare && this.match(tt.parenL)) {\n        this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? this.tsParseExpressionStatement(node, expr)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      refExpressionErrors?: ?ExpressionErrors,\n    ): N.Expression {\n      // only do the expensive clone if there is a question mark\n      // and if we come from inside parens\n      if (!this.state.maybeInArrowParameters || !this.match(tt.question)) {\n        return super.parseConditional(\n          expr,\n          startPos,\n          startLoc,\n          refExpressionErrors,\n        );\n      }\n\n      const result = this.tryParse(() =>\n        super.parseConditional(expr, startPos, startLoc),\n      );\n\n      if (!result.node) {\n        if (result.error) {\n          /*:: invariant(refExpressionErrors != null) */\n          super.setOptionalParametersError(refExpressionErrors, result.error);\n        }\n\n        return expr;\n      }\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem(\n      node: N.Expression,\n      startPos: number,\n      startLoc: Position,\n    ): N.Expression {\n      node = super.parseParenItem(node, startPos, startLoc);\n      if (this.eat(tt.question)) {\n        node.optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode: N.TsTypeCastExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n      // Store original location/position\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n\n      // \"export declare\" is equivalent to just \"export\".\n      const isDeclare = this.eatContextual(\"declare\");\n\n      if (\n        isDeclare &&\n        (this.isContextual(\"declare\") || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          this.state.start,\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n        );\n      }\n\n      let declaration: ?N.Declaration;\n\n      if (this.match(tt.name)) {\n        declaration = this.tsTryParseExportDeclaration();\n      }\n      if (!declaration) {\n        declaration = super.parseExportDeclaration(node);\n      }\n      if (\n        declaration &&\n        (declaration.type === \"TSInterfaceDeclaration\" ||\n          declaration.type === \"TSTypeAliasDeclaration\" ||\n          isDeclare)\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (declaration && isDeclare) {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startPos, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId: ?boolean,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(\"implements\")) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node: any).declare ? BIND_TS_AMBIENT : BIND_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      if (!node.optional && this.eat(tt.bang)) {\n        node.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (this.state.isAmbientContext && this.match(tt.eq)) {\n        this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          this.state.start,\n          TSErrors.AbstractPropertyHasInitializer,\n          key.type === \"Identifier\" && !node.computed\n            ? key.name\n            : `[${this.input.slice(key.start, key.end)}]`,\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      // $FlowIgnore\n      if (node.abstract) {\n        this.raise(node.start, TSErrors.PrivateElementHasAbstract);\n      }\n\n      // $FlowIgnore\n      if (node.accessibility) {\n        this.raise(\n          node.start,\n          TSErrors.PrivateElementHasAccessibility,\n          node.accessibility,\n        );\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters && isConstructor) {\n        this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);\n      }\n\n      // $FlowIgnore\n      if (method.declare && (method.kind === \"get\" || method.kind === \"set\")) {\n        this.raise(method.start, TSErrors.DeclareAccessor, method.kind);\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.isRelational(\"<\")) {\n        node.superTypeParameters = this.tsParseTypeArguments();\n      }\n      if (this.eatContextual(\"implements\")) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue(prop: N.ObjectMember, ...args): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      super.parseObjPropValue(prop, ...args);\n    }\n\n    parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (decl.id.type === \"Identifier\" && this.eat(tt.bang)) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(...args): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: ?State;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.isRelational(\"<\"))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        if (context[context.length - 1] === ct.j_oTag) {\n          context.length -= 2;\n        } else if (context[context.length - 1] === ct.j_expr) {\n          context.length -= 1;\n        }\n      }\n\n      if (!jsx?.error && !this.isRelational(\"<\")) {\n        return super.parseMaybeAssign(...args);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      let typeParameters: N.TsTypeParameterDeclaration;\n      state = state || this.state.clone();\n\n      const arrow = this.tryParse(abort => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters();\n        const expr = super.parseMaybeAssign(...args);\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) return arrow.node;\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      if (jsx?.thrown) throw jsx.error;\n      if (arrow.thrown) throw arrow.error;\n      if (typeCast?.thrown) throw typeCast.error;\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(refExpressionErrors?: ?ExpressionErrors): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.isRelational(\"<\")) {\n        return this.tsParseTypeAssertion();\n      } else {\n        return super.parseMaybeUnary(refExpressionErrors);\n      }\n    }\n\n    parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseAssignableListItemTypes(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        if (\n          param.type !== \"Identifier\" &&\n          !this.state.isAmbientContext &&\n          !this.state.inType\n        ) {\n          this.raise(param.start, TSErrors.PatternIsOptional);\n        }\n\n        ((param: any): N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): N.Node {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return super.toAssignable(this.typeCastToParameter(node), isLHS);\n        case \"TSParameterProperty\":\n          return super.toAssignable(node, isLHS);\n        case \"ParenthesizedExpression\":\n          return this.toAssignableParenthesizedExpression(node, isLHS);\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          node.expression = this.toAssignable(node.expression, isLHS);\n          return node;\n        default:\n          return super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(node: N.Node, isLHS: boolean) {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          node.expression = this.toAssignable(node.expression, isLHS);\n          return node;\n        default:\n          return super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkLVal(\n      expr: N.Expression,\n      contextDescription: string,\n      ...args:\n        | [BindingTypes | void]\n        | [BindingTypes | void, ?Set<string>, boolean | void, boolean | void]\n    ): void {\n      switch (expr.type) {\n        case \"TSTypeCastExpression\":\n          // Allow \"typecasts\" to appear on the left of assignment expressions,\n          // because it may be in an arrow function.\n          // e.g. `const f = (foo: number = 0) => foo;`\n          return;\n        case \"TSParameterProperty\":\n          this.checkLVal(expr.parameter, \"parameter property\", ...args);\n          return;\n        case \"TSAsExpression\":\n        case \"TSTypeAssertion\":\n          if (\n            /*bindingType*/ !args[0] &&\n            contextDescription !== \"parenthesized expression\" &&\n            !expr.extra?.parenthesized\n          ) {\n            this.raise(expr.start, Errors.InvalidLhs, contextDescription);\n            break;\n          }\n          this.checkLVal(expr.expression, \"parenthesized expression\", ...args);\n          return;\n        case \"TSNonNullExpression\":\n          this.checkLVal(expr.expression, contextDescription, ...args);\n          return;\n        default:\n          super.checkLVal(expr, contextDescription, ...args);\n          return;\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n      if (this.isRelational(\"<\")) {\n        const typeArguments = this.tsParseTypeArguments();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(expr);\n          call.typeParameters = typeArguments;\n          return call;\n        }\n\n        this.unexpected(this.state.start, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr);\n    }\n\n    checkCommaAfterRest(close) {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n      } else {\n        super.checkCommaAfterRest(close);\n      }\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.isRelational(\"<\") || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault(...args): N.Pattern {\n      const node = super.parseMaybeDefault(...args);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(\n          node.typeAnnotation.start,\n          TSErrors.TypeAnnotationAfterAssign,\n        );\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        return this.finishOp(tt.relational, 1);\n      } else {\n        return super.getTokenFromCode(code);\n      }\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      if (this.match(tt.relational)) {\n        const code = this.input.charCodeAt(this.state.start);\n        if (code === charCodes.lessThan || code === charCodes.greaterThan) {\n          this.state.pos -= 1;\n          this.readToken_lt_gt(code);\n        }\n      }\n    }\n\n    toAssignableList(exprList: N.Expression[]): $ReadOnlyArray<N.Pattern> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (!expr) continue;\n        switch (expr.type) {\n          case \"TSTypeCastExpression\":\n            exprList[i] = this.typeCastToParameter(expr);\n            break;\n          case \"TSAsExpression\":\n          case \"TSTypeAssertion\":\n            if (!this.state.maybeInArrowParameters) {\n              exprList[i] = this.typeCastToParameter(expr);\n            } else {\n              this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);\n            }\n            break;\n        }\n      }\n      return super.toAssignableList(...arguments);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Node {\n      node.expression.typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(\n        node.expression,\n        node.typeAnnotation.end,\n        node.typeAnnotation.loc.end,\n      );\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      if (this.isRelational(\"<\")) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArguments(),\n        );\n        if (typeArguments) node.typeParameters = typeArguments;\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const oldIsAmbientContext = this.state.isAmbientContext;\n      this.state.isAmbientContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n      }\n    }\n\n    parseClass<T: N.Class>(node: T, ...args: any[]): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node: any).abstract;\n      try {\n        return super.parseClass(node, ...args);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | typeof undefined {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.parseClass<N.ClassDeclaration>(\n          (node: N.ClassDeclaration),\n          /* isStatement */ true,\n          /* optionalId */ false,\n        );\n      } else if (this.isContextual(\"interface\")) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(\n            node.start,\n            TSErrors.NonClassMethodPropertyHasAbstractModifer,\n          );\n          this.next();\n          return this.tsParseInterfaceDeclaration(\n            (node: N.TsInterfaceDeclaration),\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod(...args: any[]) {\n      const method = super.parseMethod(...args);\n      if (method.abstract) {\n        const hasBody = this.hasPlugin(\"estree\")\n          ? !!method.value.body\n          : !!method.body;\n        if (hasBody) {\n          const { key } = method;\n          this.raise(\n            method.start,\n            TSErrors.AbstractMethodHasImplementation,\n            key.type === \"Identifier\" && !method.computed\n              ? key.name\n              : `[${this.input.slice(key.start, key.end)}]`,\n          );\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n  };\n", "// @flow\n\nimport * as charCodes from \"charcodes\";\n\nimport { types as tt, TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport * as N from \"../types\";\nimport { makeErrorTemplates, ErrorCodes } from \"../parser/error\";\n\ntt.placeholder = new TokenType(\"%%\", { startsExpr: true });\n\nexport type PlaceholderTypes =\n  | \"Identifier\"\n  | \"StringLiteral\"\n  | \"Expression\"\n  | \"Statement\"\n  | \"Declaration\"\n  | \"BlockStatement\"\n  | \"ClassBody\"\n  | \"Pattern\";\n\n// $PropertyType doesn't support enums. Use a fake \"switch\" (GetPlaceholderNode)\n//type MaybePlaceholder<T: PlaceholderTypes> = $PropertyType<N, T> | N.Placeholder<T>;\n\ntype _Switch<Value, Cases, Index> = $Call<\n  (\n    $ElementType<$ElementType<Cases, Index>, 0>,\n  ) => $ElementType<$ElementType<Cases, Index>, 1>,\n  Value,\n>;\ntype $Switch<Value, Cases> = _Switch<Value, Cases, *>;\n\ntype NodeOf<T: PlaceholderTypes> = $Switch<\n  T,\n  [\n    [\"Identifier\", N.Identifier],\n    [\"StringLiteral\", N.StringLiteral],\n    [\"Expression\", N.Expression],\n    [\"Statement\", N.Statement],\n    [\"Declaration\", N.Declaration],\n    [\"BlockStatement\", N.BlockStatement],\n    [\"ClassBody\", N.ClassBody],\n    [\"Pattern\", N.Pattern],\n  ],\n>;\n\n// Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T: PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\nconst PlaceHolderErrors = makeErrorTemplates(\n  {\n    ClassNameIsRequired: \"A class name is required.\",\n  },\n  /* code */ ErrorCodes.SyntaxError,\n);\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    parsePlaceholder<T: PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ ?MaybePlaceholder<T> {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode();\n        this.next();\n        this.assertNoSpace(\"Unexpected space in placeholder.\");\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace(\"Unexpected space in placeholder.\");\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T: PlaceholderTypes>(\n      node: N.Node,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n      node.expectedNode = expectedNode;\n\n      return isFinished ? node : this.finishNode(node, \"Placeholder\");\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.js                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        return this.finishOp(tt.placeholder, 2);\n      }\n\n      return super.getTokenFromCode(...arguments);\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments)\n      );\n    }\n\n    parseIdentifier(): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") ||\n        super.parseIdentifier(...arguments)\n      );\n    }\n\n    checkReservedWord(word: string): void {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) super.checkReservedWord(...arguments);\n    }\n\n    /* ============================================================ *\n     * parser/lval.js                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return (\n        this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments)\n      );\n    }\n\n    checkLVal(expr: N.Expression): void {\n      if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n    }\n\n    toAssignable(node: N.Node): N.Node {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n        return node;\n      }\n      return super.toAssignable(...arguments);\n    }\n\n    /* ============================================================ *\n     * parser/statement.js                                          *\n     * ============================================================ */\n\n    isLet(context: ?string): boolean {\n      if (super.isLet(context)) {\n        return true;\n      }\n\n      // Replicate the original checks that lead to looking ahead for an\n      // identifier.\n      if (!this.isContextual(\"let\")) {\n        return false;\n      }\n      if (context) return false;\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const nextToken = this.lookahead();\n      if (nextToken.type === tt.placeholder) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(node: N.BreakStatement | N.ContinueStatement) {\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(...arguments);\n    }\n\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: N.Expression,\n    ): MaybePlaceholder<\"Statement\"> {\n      if (\n        expr.type !== \"Placeholder\" ||\n        (expr.extra && expr.extra.parenthesized)\n      ) {\n        return super.parseExpressionStatement(...arguments);\n      }\n\n      if (this.match(tt.colon)) {\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = this.parseStatement(\"label\");\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n\n      node.name = expr.name;\n      return this.finishPlaceholder(node, \"Statement\");\n    }\n\n    parseBlock(): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(...arguments)\n      );\n    }\n\n    parseFunctionId(): ?MaybePlaceholder<\"Identifier\"> {\n      return (\n        this.parsePlaceholder(\"Identifier\") ||\n        super.parseFunctionId(...arguments)\n      );\n    }\n\n    parseClass<T: N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      this.takeDecorators(node);\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          this.unexpected(null, PlaceHolderErrors.ClassNameIsRequired);\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      this.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        this.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(node: N.Node): N.Node {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(...arguments);\n\n      if (!this.isContextual(\"from\") && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node.specifiers = [];\n        node.source = null;\n        node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = placeholder;\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tt.placeholder.label,\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n      if (node.specifiers && node.specifiers.length > 0) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(...arguments);\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: N.Node,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(...arguments);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(\"from\") && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier = this.startNodeAtNode(placeholder);\n      specifier.local = placeholder;\n      this.finishNode(specifier, \"ImportDefaultSpecifier\");\n      node.specifiers.push(specifier);\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(\"from\");\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") ||\n        super.parseImportSource(...arguments)\n      );\n    }\n  };\n", "import type Parser from \"../parser\";\nimport { types as tt } from \"../tokenizer/types\";\nimport * as N from \"../types\";\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStart = this.state.start;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode();\n        this.eat(tt.modulo);\n        if (this.match(tt.name)) {\n          const name = this.parseIdentifierName(this.state.start);\n          const identifier = this.createIdentifier(node, name);\n          identifier.type = \"V8IntrinsicIdentifier\";\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStart);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(): N.Expression {\n      return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n    }\n  };\n", "// @flow\n\nimport type Parser from \"./parser\";\n\nexport type Plugin = string | [string, Object];\n\nexport type PluginList = $ReadOnlyArray<Plugin>;\n\nexport type MixinPlugin = (superClass: Class<Parser>) => Class<Parser>;\n\nexport function hasPlugin(plugins: PluginList, name: string): boolean {\n  return plugins.some(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n}\n\nexport function getPluginOption(\n  plugins: PluginList,\n  name: string,\n  option: string,\n) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n\n  if (plugin && Array.isArray(plugin)) {\n    return plugin[1][option];\n  }\n\n  return null;\n}\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"%\", \"#\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n\nexport function validatePlugins(plugins: PluginList) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport = getPluginOption(\n      plugins,\n      \"decorators\",\n      \"decoratorsBeforeExport\",\n    );\n    if (decoratorsBeforeExport == null) {\n      throw new Error(\n        \"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" +\n          \" whose value must be a boolean. If you are migrating from\" +\n          \" Babylon/Babel 6 or want to use the old decorators proposal, you\" +\n          \" should use the 'decorators-legacy' plugin instead of 'decorators'.\",\n      );\n    } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"pipelineOperator\")) {\n    const proposal = getPluginOption(plugins, \"pipelineOperator\", \"proposal\");\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    const tupleSyntaxIsHash =\n      hasPlugin(plugins, \"recordAndTuple\") &&\n      getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\") === \"hash\";\n\n    if (proposal === \"hack\") {\n      if (hasPlugin(plugins, \"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (hasPlugin(plugins, \"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = getPluginOption(\n        plugins,\n        \"pipelineOperator\",\n        \"topicToken\",\n      );\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error(\n          'Plugin conflict between `[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.',\n        );\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error(\n        'Plugin conflict between `[\"pipelineOperator\", { proposal: \"smart\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.',\n      );\n    }\n  }\n\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please use `importAssertions` parser plugin, or `@babel/plugin-syntax-import-assertions`.\",\n      );\n    } else {\n      if (hasPlugin(plugins, \"importAssertions\")) {\n        throw new Error(\n          \"Cannot combine importAssertions and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVerionPluginOption = getPluginOption(\n        plugins,\n        \"moduleAttributes\",\n        \"version\",\n      );\n      if (moduleAttributesVerionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n\n  if (\n    hasPlugin(plugins, \"recordAndTuple\") &&\n    !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(\n      getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"),\n    )\n  ) {\n    throw new Error(\n      \"'recordAndTuple' requires 'syntaxType' option whose value should be one of: \" +\n        RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n    );\n  }\n\n  if (\n    hasPlugin(plugins, \"asyncDoExpressions\") &&\n    !hasPlugin(plugins, \"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // $FlowIgnore\n    error.missingPlugins = \"doExpressions\"; // so @babel/core can provide better error message\n    throw error;\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree\";\nimport flow from \"./plugins/flow\";\nimport jsx from \"./plugins/jsx\";\nimport typescript from \"./plugins/typescript\";\nimport placeholders from \"./plugins/placeholders\";\nimport v8intrinsic from \"./plugins/v8intrinsic\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins: { [name: string]: MixinPlugin } = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames: $ReadOnlyArray<string> =\n  Object.keys(mixinPlugins);\n", "// @flow\n\nimport type { PluginList } from \"./plugin-utils\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport type Options = {\n  sourceType: SourceType,\n  sourceFilename?: string,\n  startLine: number,\n  allowAwaitOutsideFunction: boolean,\n  allowReturnOutsideFunction: boolean,\n  allowImportExportEverywhere: boolean,\n  allowSuperOutsideMethod: boolean,\n  allowUndeclaredExports: boolean,\n  plugins: PluginList,\n  strictMode: ?boolean,\n  ranges: boolean,\n  tokens: boolean,\n  createParenthesizedExpressions: boolean,\n  errorRecovery: boolean,\n  attachComment: boolean,\n};\n\nexport const defaultOptions: Options = {\n  // Source type (\"script\" or \"module\") for different semantics\n  sourceType: \"script\",\n  // Source filename.\n  sourceFilename: undefined,\n  // Line from which to start counting source. Useful for\n  // integration with other tools.\n  startLine: 1,\n  // When enabled, await at the top level is not considered an\n  // error.\n  allowAwaitOutsideFunction: false,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // TODO\n  allowSuperOutsideMethod: false,\n  // When enabled, export statements can reference undeclared variables.\n  allowUndeclaredExports: false,\n  // An array of plugins to enable\n  plugins: [],\n  // TODO\n  strictMode: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // Adds all parsed tokens to a `tokens` property on the `File` node\n  tokens: false,\n  // Whether to create ParenthesizedExpression AST nodes (if false\n  // the parser sets extra.parenthesized on the expression nodes instead).\n  createParenthesizedExpressions: false,\n  // When enabled, errors are attached to the AST instead of being directly thrown.\n  // Some errors will still throw, because @babel/parser can't always recover.\n  errorRecovery: false,\n  // When enabled, comments will be attached to adjacent AST nodes as one of\n  // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n  // is vital to preserve comments after transform. If you don't print AST back,\n  // consider set this option to `false` for performance\n  attachComment: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts: ?Options): Options {\n  const options: any = {};\n  for (const key of Object.keys(defaultOptions)) {\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n  return options;\n}\n", "// @flow\n\n/*:: declare var invariant; */\nimport * as charCodes from \"charcodes\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport type {\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  /*:: Identifier, */\n  /*:: ObjectExpression, */\n  /*:: ObjectPattern, */\n} from \"../types\";\nimport type { Pos, Position } from \"../util/location\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier\";\nimport { NodeUtils } from \"./node\";\nimport { type BindingTypes, BIND_NONE } from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport { Errors } from \"./error\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport default class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  /*::\n  +parseIdentifier: (liberal?: boolean) => Identifier;\n  +parseMaybeAssignAllowIn: (\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: ?Pos,\n  ) => Expression;\n  +parseObjectLike: <T: ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: ?boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ) => T;\n  */\n  // Forward-declaration: defined in statement.js\n  /*::\n  +parseDecorator: () => Decorator;\n  */\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n\n   - Parenthesized Destructuring patterns\n   - RestElement is not the last element\n   - Missing `=` in assignment pattern\n\n   NOTE: There is a corresponding \"isAssignable\" method.\n   When this one is updated, please check if also that one needs to be updated.\n\n   * @param {Node} node The expression atom\n   * @param {boolean} [isLHS=false] Whether we are parsing a LeftHandSideExpression. If isLHS is `true`, the following cases are allowed:\n                                    `[(a)] = [0]`, `[(a.b)] = [0]`\n\n   * @returns {Node} The converted assignable pattern\n   * @memberof LValParser\n   */\n  toAssignable(node: Node, isLHS: boolean = false): Node {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordParenthesizedIdentifierError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordParenthesizedIdentifierError(\n            node.start,\n            Errors.InvalidParenthesizedAssignment,\n          );\n        } else if (parenthesized.type !== \"MemberExpression\") {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(node.start, Errors.InvalidParenthesizedAssignment);\n        }\n      } else {\n        this.raise(node.start, Errors.InvalidParenthesizedAssignment);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            prop.type === \"RestElement\" &&\n            node.extra?.trailingComma\n          ) {\n            this.raiseRestNotLast(node.extra.trailingComma);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\":\n        this.toAssignable(node.value, isLHS);\n        break;\n\n      case \"SpreadElement\": {\n        this.checkToRestConversion(node);\n\n        node.type = \"RestElement\";\n        const arg = node.argument;\n        this.toAssignable(arg, isLHS);\n        break;\n      }\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(node.elements, node.extra?.trailingComma, isLHS);\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(node.left.end, Errors.MissingEqInAssignment);\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        this.toAssignable(parenthesized, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n    return node;\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      const error =\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod;\n\n      /* eslint-disable @babel/development-internal/dry-error-messages */\n      this.raise(prop.key.start, error);\n      /* eslint-enable @babel/development-internal/dry-error-messages */\n    } else if (prop.type === \"SpreadElement\" && !isLast) {\n      this.raiseRestNotLast(prop.start);\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: Expression[],\n    trailingCommaPos?: ?number,\n    isLHS: boolean,\n  ): $ReadOnlyArray<Pattern> {\n    let end = exprList.length;\n    if (end) {\n      const last = exprList[end - 1];\n      if (last?.type === \"RestElement\") {\n        --end;\n      } else if (last?.type === \"SpreadElement\") {\n        last.type = \"RestElement\";\n        let arg = last.argument;\n        this.toAssignable(arg, isLHS);\n        arg = unwrapParenthesizedExpression(arg);\n        if (\n          arg.type !== \"Identifier\" &&\n          arg.type !== \"MemberExpression\" &&\n          arg.type !== \"ArrayPattern\" &&\n          arg.type !== \"ObjectPattern\"\n        ) {\n          this.unexpected(arg.start);\n        }\n\n        if (trailingCommaPos) {\n          this.raiseTrailingCommaAfterRest(trailingCommaPos);\n        }\n\n        --end;\n      }\n    }\n    for (let i = 0; i < end; i++) {\n      const elt = exprList[i];\n      if (elt) {\n        this.toAssignable(elt, isLHS);\n        if (elt.type === \"RestElement\") {\n          this.raiseRestNotLast(elt.start);\n        }\n      }\n    }\n    return exprList;\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return node.properties.every((prop, i) => {\n          return (\n            prop.type !== \"ObjectMethod\" &&\n            (i === last || prop.type !== \"SpreadElement\") &&\n            this.isAssignable(prop)\n          );\n        });\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(element => this.isAssignable(element));\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList: $ReadOnlyArray<?Expression>,\n    isParenthesizedExpr?: boolean, // eslint-disable-line no-unused-vars\n  ): $ReadOnlyArray<?Expression> {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList: $ReadOnlyArray<?Expression>,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    refExpressionErrors: ?ExpressionErrors,\n    refNeedsArrowPos?: ?Pos,\n  ): SpreadElement {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n      refNeedsArrowPos,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(): RestElement {\n    const node = this.startNode();\n    this.next(); // eat `...`\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode();\n        this.next();\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          true,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    close: TokenType,\n    closeCharCode: $Values<typeof charCodes>,\n    allowEmpty?: boolean,\n    allowModifiers?: boolean,\n  ): $ReadOnlyArray<Pattern | TSParameterProperty> {\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        // $FlowFixMe This method returns `$ReadOnlyArray<?Pattern>` if `allowEmpty` is set.\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n        this.checkCommaAfterRest(closeCharCode);\n        this.expect(close);\n        break;\n      } else {\n        const decorators = [];\n        if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(this.state.start, Errors.UnsupportedParameterDecorator);\n        }\n        // invariant: hasPlugin(\"decorators-legacy\")\n        while (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n      }\n    }\n    return elts;\n  }\n\n  parseAssignableListItem(\n    allowModifiers: ?boolean,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseAssignableListItemTypes(param: Pattern): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault(\n    startPos?: ?number,\n    startLoc?: ?Position,\n    left?: ?Pattern,\n  ): Pattern {\n    startLoc = startLoc ?? this.state.startLoc;\n    startPos = startPos ?? this.state.start;\n    // $FlowIgnore\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n\n  /**\n   * Verify that if a node is an lval - something that can be assigned to.\n   *\n   * @param {Expression} expr The given node\n   * @param {string} contextDescription The auxiliary context information printed when error is thrown\n   * @param {BindingTypes} [bindingType=BIND_NONE] The desired binding type. If the given node is an identifier and `bindingType` is not\n                                                   BIND_NONE, `checkLVal` will register binding to the parser scope\n                                                   See also src/util/scopeflags.js\n   * @param {?Set<string>} checkClashes An optional string set to check if an identifier name is included. `checkLVal` will add checked\n                                        identifier name to `checkClashes` It is used in tracking duplicates in function parameter lists. If\n                                        it is nullish, `checkLVal` will skip duplicate checks\n   * @param {boolean} [disallowLetBinding] Whether an identifier named \"let\" should be disallowed\n   * @param {boolean} [strictModeChanged=false] Whether an identifier has been parsed in a sloppy context but should be reinterpreted as\n                                                strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @memberof LValParser\n   */\n  checkLVal(\n    expr: Expression,\n    contextDescription: string,\n    bindingType: BindingTypes = BIND_NONE,\n    checkClashes: ?Set<string>,\n    disallowLetBinding?: boolean,\n    strictModeChanged?: boolean = false,\n  ): void {\n    switch (expr.type) {\n      case \"Identifier\": {\n        const { name } = expr;\n        if (\n          this.state.strict &&\n          // \"Global\" reserved words have already been checked by parseIdentifier,\n          // unless they have been found in the id or parameters of a strict-mode\n          // function in a sloppy context.\n          (strictModeChanged\n            ? isStrictBindReservedWord(name, this.inModule)\n            : isStrictBindOnlyReservedWord(name))\n        ) {\n          this.raise(\n            expr.start,\n            bindingType === BIND_NONE\n              ? Errors.StrictEvalArguments\n              : Errors.StrictEvalArgumentsBinding,\n            name,\n          );\n        }\n\n        if (checkClashes) {\n          if (checkClashes.has(name)) {\n            this.raise(expr.start, Errors.ParamDupe);\n          } else {\n            checkClashes.add(name);\n          }\n        }\n        if (disallowLetBinding && name === \"let\") {\n          this.raise(expr.start, Errors.LetInLexicalBinding);\n        }\n        if (!(bindingType & BIND_NONE)) {\n          this.scope.declareName(name, bindingType, expr.start);\n        }\n        break;\n      }\n\n      case \"MemberExpression\":\n        if (bindingType !== BIND_NONE) {\n          this.raise(expr.start, Errors.InvalidPropertyBindingPattern);\n        }\n        break;\n\n      case \"ObjectPattern\":\n        for (let prop of expr.properties) {\n          if (this.isObjectProperty(prop)) prop = prop.value;\n          // If we find here an ObjectMethod, it's because this was originally\n          // an ObjectExpression which has then been converted.\n          // toAssignable already reported this error with a nicer message.\n          else if (this.isObjectMethod(prop)) continue;\n\n          this.checkLVal(\n            prop,\n            \"object destructuring pattern\",\n            bindingType,\n            checkClashes,\n            disallowLetBinding,\n          );\n        }\n        break;\n\n      case \"ArrayPattern\":\n        for (const elem of expr.elements) {\n          if (elem) {\n            this.checkLVal(\n              elem,\n              \"array destructuring pattern\",\n              bindingType,\n              checkClashes,\n              disallowLetBinding,\n            );\n          }\n        }\n        break;\n\n      case \"AssignmentPattern\":\n        this.checkLVal(\n          expr.left,\n          \"assignment pattern\",\n          bindingType,\n          checkClashes,\n        );\n        break;\n\n      case \"RestElement\":\n        this.checkLVal(\n          expr.argument,\n          \"rest element\",\n          bindingType,\n          checkClashes,\n        );\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.checkLVal(\n          expr.expression,\n          \"parenthesized expression\",\n          bindingType,\n          checkClashes,\n        );\n        break;\n\n      default: {\n        this.raise(\n          expr.start,\n          bindingType === BIND_NONE\n            ? Errors.InvalidLhs\n            : Errors.InvalidLhsBinding,\n          contextDescription,\n        );\n      }\n    }\n  }\n\n  checkToRestConversion(node: SpreadElement): void {\n    if (\n      node.argument.type !== \"Identifier\" &&\n      node.argument.type !== \"MemberExpression\"\n    ) {\n      this.raise(node.argument.start, Errors.InvalidRestAssignmentPattern);\n    }\n  }\n\n  checkCommaAfterRest(close: $Values<typeof charCodes>): void {\n    if (this.match(tt.comma)) {\n      if (this.lookaheadCharCode() === close) {\n        this.raiseTrailingCommaAfterRest(this.state.start);\n      } else {\n        this.raiseRestNotLast(this.state.start);\n      }\n    }\n  }\n\n  raiseRestNotLast(pos: number) {\n    throw this.raise(pos, Errors.ElementAfterRest);\n  }\n\n  raiseTrailingCommaAfterRest(pos: number) {\n    this.raise(pos, Errors.RestTrailingComma);\n  }\n}\n", "// @flow\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts \u2014 that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport * as N from \"../types\";\nimport LValParser from \"./lval\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier\";\nimport { Position } from \"../util/location\";\nimport * as charCodes from \"charcodes\";\nimport {\n  BIND_OUTSIDE,\n  BIND_VAR,\n  SCOPE_ARROW,\n  SCOPE_CLASS,\n  SCOPE_DIRECT_SUPER,\n  SCOPE_FUNCTION,\n  SCOPE_SUPER,\n} from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport {\n  PARAM_AWAIT,\n  PARAM_IN,\n  PARAM_RETURN,\n  functionFlags,\n} from \"../util/production-parameter\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope\";\nimport { Errors, SourceTypeModuleErrors } from \"./error\";\nimport type { ParsingError } from \"./error\";\nimport { setInnerComments } from \"./comments\";\nimport { cloneIdentifier } from \"./node\";\n\n/*::\nimport type { SourceType } from \"../options\";\n*/\n\nexport default class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  /*::\n  +parseBlock: (\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ) => N.BlockStatement;\n  +parseClass: (\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ) => N.Class;\n  +parseDecorators: (allowExport?: boolean) => void;\n  +parseFunction: <T: N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ) => T;\n  +parseFunctionParams: (node: N.Function, allowModifiers?: boolean) => void;\n  +takeDecorators: (node: N.HasDecorators) => void;\n  +parseBlockOrModuleBlockBody: (\n    body: N.Statement[],\n    directives: ?(N.Directive[]),\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void\n  ) => void\n  +parseProgram: (\n    program: N.Program, end: TokenType, sourceType?: SourceType\n  ) => N.Program\n  */\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean,\n    protoRef: { used: boolean },\n    refExpressionErrors: ?ExpressionErrors,\n  ): void {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      // $FlowIgnore\n      prop.shorthand\n    ) {\n      return;\n    }\n\n    const key = prop.key;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(key.start, Errors.RecordNoProto);\n        return;\n      }\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProto === -1) {\n            refExpressionErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raise(key.start, Errors.DuplicateProto);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(expr: N.Expression, potentialArrowAt: number): boolean {\n    return (\n      expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression();\n    if (!this.match(tt.eof)) {\n      this.unexpected();\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(refExpressionErrors?: ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(\n    refExpressionErrors: ExpressionErrors,\n    resultError?: ParsingError,\n  ) {\n    refExpressionErrors.optionalParameters =\n      resultError?.pos ?? this.state.start;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(\"yield\")) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startPos, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n\n    if (this.match(tt.parenL) || this.match(tt.name)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startPos, startLoc);\n    }\n    if (this.state.type.isAssign) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      const leftIsHackPipeExpression =\n        left.type === \"BinaryExpression\" &&\n        left.operator === \"|>\" &&\n        this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"hack\";\n\n      if (leftIsHackPipeExpression) {\n        // If the pipelinePlugin is configured to use Hack pipes,\n        // and if an assignment expression\u2019s LHS invalidly contains `|>`,\n        // then the user likely meant to parenthesize the assignment expression.\n        // Throw a human-friendly error\n        // instead of something like 'Invalid left-hand side'.\n        // For example, `x = x |> y = #` (assuming `#` is the topic reference)\n        // groups into `x = (x |> y) = #`,\n        // and `(x |> y)` is an invalid assignment LHS.\n        // This is because Hack-style `|>` has tighter precedence than `=>`.\n        // (Unparenthesized `yield` expressions are handled\n        // in `parseHackPipeBody`,\n        // and unparenthesized `=>` expressions are handled\n        // in `checkHackPipeBodyEarlyErrors`.)\n        throw this.raise(this.state.start, Errors.PipeBodyIsTighter, operator);\n      }\n\n      if (this.match(tt.eq)) {\n        node.left = this.toAssignable(left, /* isLHS */ true);\n        refExpressionErrors.doubleProto = -1; // reset because double __proto__ is valid in assignment expression\n      } else {\n        node.left = left;\n      }\n\n      if (refExpressionErrors.shorthandAssign >= node.left.start) {\n        refExpressionErrors.shorthandAssign = -1; // reset because shorthand default was used correctly\n      }\n\n      this.checkLVal(left, \"assignment expression\");\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      return this.finishNode(node, \"AssignmentExpression\");\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(refExpressionErrors: ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    expr: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    // eslint-disable-next-line no-unused-vars\n    refExpressionErrors?: ?ExpressionErrors,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(refExpressionErrors: ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnary(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startPos, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    left: N.Expression,\n    leftStartPos: number,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    let prec = this.state.type.binop;\n    if (prec != null && (this.prodParam.hasIn || !this.match(tt._in))) {\n      if (prec > minPrec) {\n        const op = this.state.type;\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n          this.checkPipelineAtInfixOperator(left, leftStartPos);\n        }\n        const node = this.startNodeAt(leftStartPos, leftStartLoc);\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = ((tt.logicalAND: any): { binop: number }).binop;\n        }\n\n        this.next();\n\n        if (\n          op === tt.pipeline &&\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\"\n        ) {\n          if (\n            this.match(tt.name) &&\n            this.state.value === \"await\" &&\n            this.prodParam.hasAwait\n          ) {\n            throw this.raise(\n              this.state.start,\n              Errors.UnexpectedAwaitAfterPipelineBody,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(this.state.start, Errors.MixingCoalesceWithLogical);\n        }\n\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n    }\n    return left;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(op: TokenType, prec: number): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              const bodyExpr = this.parseHackPipeBody(op, prec);\n              this.checkHackPipeBodyEarlyErrors(startPos);\n              return bodyExpr;\n            });\n\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              const childExpr = this.parseHackPipeBody(op, prec);\n              return this.parseSmartPipelineBodyInStyle(\n                childExpr,\n                startPos,\n                startLoc,\n              );\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(op: TokenType, prec: number): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnary(),\n      startPos,\n      startLoc,\n      op.rightAssociative ? prec - 1 : prec,\n    );\n  }\n\n  // Helper function for `parseExprOpRightExpr` for the Hack-pipe operator\n  // (and the Hack-style smart-mix pipe operator).\n\n  parseHackPipeBody(op: TokenType, prec: number): N.Expression {\n    // If the following expression is invalidly a `yield` expression,\n    // then throw a human-friendly error.\n    // A `yield` expression in a generator context (i.e., a [Yield] production)\n    // starts a YieldExpression.\n    // Outside of a generator context, any `yield` as a pipe body\n    // is considered simply an identifier.\n    // This error is checked here, before actually parsing the body expression,\n    // because `yield`\u2019s \u201Cnot allowed as identifier in generator\u201D error\n    // would otherwise have immediately\n    // occur before the pipe body is fully parsed.\n    // (Unparenthesized assignment expressions are handled\n    // in `parseMaybeAssign`,\n    // and unparenthesized `=>` expressions are handled\n    // in `checkHackPipeBodyEarlyErrors`.)\n    const bodyIsInGeneratorContext = this.prodParam.hasYield;\n    const bodyIsYieldExpression =\n      bodyIsInGeneratorContext && this.isContextual(\"yield\");\n\n    if (bodyIsYieldExpression) {\n      throw this.raise(\n        this.state.start,\n        Errors.PipeBodyIsTighter,\n        this.state.value,\n      );\n    } else {\n      return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  checkExponentialAfterUnary(node: N.AwaitExpression | N.UnaryExpression) {\n    if (this.match(tt.exponent)) {\n      this.raise(\n        node.argument.start,\n        Errors.UnexpectedTokenUnaryExponentiation,\n      );\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    refExpressionErrors: ?ExpressionErrors,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(\"await\");\n\n    if (isAwait && this.isAwaitAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startPos, startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode();\n    if (this.state.type.prefix) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(node.start, Errors.StrictDelete);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(node.start, Errors.DeletePrivateField);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) this.checkExponentialAfterUnary(node);\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(node, update, refExpressionErrors);\n\n    if (isAwait) {\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? this.state.type.startsExpr\n        : this.state.type.startsExpr && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(startPos, Errors.AwaitNotInAsyncContext);\n        return this.parseAwait(startPos, startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors: ?ExpressionErrors,\n  ): N.Expression {\n    if (update) {\n      this.checkLVal(node.argument, \"prefix operation\");\n      return this.finishNode(node, \"UpdateExpression\");\n    }\n\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (this.state.type.postfix && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.checkLVal(expr, \"postfix operation\");\n      this.next();\n      expr = this.finishNode(node, \"UpdateExpression\");\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(refExpressionErrors: ?ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startPos, startLoc);\n  }\n\n  parseSubscripts(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    noCalls?: ?boolean,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    noCalls: ?boolean,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    if (!noCalls && this.eat(tt.doubleColon)) {\n      return this.parseBind(base, startPos, startLoc, noCalls, state);\n    } else if (this.match(tt.backQuote)) {\n      return this.parseTaggedTemplateExpression(\n        base,\n        startPos,\n        startLoc,\n        state,\n      );\n    }\n\n    let optional = false;\n    if (this.match(tt.questionDot)) {\n      if (noCalls && this.lookaheadCharCode() === charCodes.leftParenthesis) {\n        // stop at `?.` when parsing `new a?.()`\n        state.stop = true;\n        return base;\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startPos,\n        startLoc,\n        state,\n        optional,\n      );\n    } else if (optional || this.match(tt.bracketL) || this.eat(tt.dot)) {\n      return this.parseMember(base, startPos, startLoc, state, optional);\n    } else {\n      state.stop = true;\n      return base;\n    }\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt(startPos, startLoc);\n    const computed = this.eat(tt.bracketL);\n    node.object = base;\n    node.computed = computed;\n    const privateName =\n      !computed && this.match(tt.privateName) && this.state.value;\n    const property = computed\n      ? this.parseExpression()\n      : privateName\n      ? this.parsePrivateName()\n      : this.parseIdentifier(true);\n\n    if (privateName !== false) {\n      if (node.object.type === \"Super\") {\n        this.raise(startPos, Errors.SuperPrivateField);\n      }\n      this.classScope.usePrivateName(privateName, property.start);\n    }\n    node.property = property;\n\n    if (computed) {\n      this.expect(tt.bracketR);\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    noCalls: ?boolean,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startPos,\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    let node = this.startNodeAt(startPos, startLoc);\n    node.callee = base;\n\n    if (state.maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(tt.parenR);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        tt.parenR,\n        base.type === \"Import\",\n        base.type !== \"Super\",\n        node,\n        refExpressionErrors,\n      );\n    }\n    this.finishCallExpression(node, state.optionalChainMember);\n\n    if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      state.stop = true;\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      node = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt(startPos, startLoc),\n        node,\n      );\n    } else {\n      if (state.maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return node;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node: N.TaggedTemplateExpression = this.startNodeAt(\n      startPos,\n      startLoc,\n    );\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(startPos, Errors.OptionalChainingNoTemplate);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEnd === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      base.start === this.state.potentialArrowAt\n    );\n  }\n\n  finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(\n    node: T,\n    optional: boolean,\n  ): N.Expression {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        if (process.env.BABEL_8_BREAKING) {\n          this.expectPlugin(\"importAssertions\");\n        } else {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectPlugin(\"importAssertions\");\n          }\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(\n          node.start,\n          Errors.ImportCallArity,\n          this.hasPlugin(\"importAssertions\") ||\n            this.hasPlugin(\"moduleAttributes\")\n            ? \"one or two arguments\"\n            : \"one argument\",\n        );\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(arg.start, Errors.ImportCallSpreadArgument);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    close: TokenType,\n    dynamicImport?: boolean,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: ?N.Node,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): $ReadOnlyArray<?N.Expression> {\n    const elts = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (\n            dynamicImport &&\n            !this.hasPlugin(\"importAssertions\") &&\n            !this.hasPlugin(\"moduleAttributes\")\n          ) {\n            this.raise(\n              this.state.lastTokStart,\n              Errors.ImportCallArgumentTrailingComma,\n            );\n          }\n          if (nodeForExtra) {\n            this.addExtra(\n              nodeForExtra,\n              \"trailingComma\",\n              this.state.lastTokStart,\n            );\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(false, refExpressionErrors, allowPlaceholder),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    node: N.ArrowFunctionExpression,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingComma,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    setInnerComments(node, call.innerComments);\n    // mark trailing comments of `async` to be inner comments\n    setInnerComments(node, call.callee.trailingComments);\n    return node;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n  }\n\n  // Parse an atomic expression \u2014 either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(refExpressionErrors?: ?ExpressionErrors): N.Expression {\n    let node;\n\n    switch (this.state.type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaProperty(node);\n        }\n\n        if (!this.match(tt.parenL)) {\n          this.raise(this.state.lastTokStart, Errors.UnsupportedImport);\n        }\n        return this.finishNode(node, \"Import\");\n      case tt._this:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt.name: {\n        if (\n          this.isContextual(\"module\") &&\n          this.lookaheadCharCode() === charCodes.leftCurlyBrace &&\n          !this.hasFollowingLineBreak()\n        ) {\n          return this.parseModuleExpression();\n        }\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        const containsEsc = this.state.containsEsc;\n        const id = this.parseIdentifier();\n\n        if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n          if (this.match(tt._function)) {\n            this.resetPreviousNodeTrailingComments(id);\n            this.next();\n            return this.parseFunction(\n              this.startNodeAtNode(id),\n              undefined,\n              true,\n            );\n          } else if (this.match(tt.name)) {\n            // If the next token begins with \"=\", commit to parsing an async\n            // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n            // expensive full-token lookahead on this common path.)\n            if (this.lookaheadCharCode() === charCodes.equalsTo) {\n              // although `id` is not used in async arrow unary function,\n              // we don't need to reset `async`'s trailing comments because\n              // it will be attached to the upcoming async arrow binding identifier\n              return this.parseAsyncArrowUnaryFunction(\n                this.startNodeAtNode(id),\n              );\n            } else {\n              // Otherwise, treat \"async\" as an identifier and let calling code\n              // deal with the current tt.name token.\n              return id;\n            }\n          } else if (this.match(tt._do)) {\n            this.resetPreviousNodeTrailingComments(id);\n            return this.parseDo(this.startNodeAtNode(id), true);\n          }\n        }\n\n        if (canBeArrow && this.match(tt.arrow) && !this.canInsertSemicolon()) {\n          this.next();\n          return this.parseArrowExpression(\n            this.startNodeAtNode(id),\n            [id],\n            false,\n          );\n        }\n\n        return id;\n      }\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.decimal:\n        return this.parseDecimalLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketBarL:\n      case tt.bracketHashL: {\n        return this.parseArrayLike(\n          this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n          /* canBePattern */ false,\n          /* isTuple */ true,\n          refExpressionErrors,\n        );\n      }\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceBarL:\n      case tt.braceHashL: {\n        return this.parseObjectLike(\n          this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ true,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        this.parseDecorators();\n      // fall through\n      case tt._class:\n        node = this.startNode();\n        this.takeDecorators(node);\n        return this.parseClass(node, false);\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.backQuote:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(callee.start, Errors.UnsupportedBind);\n        }\n      }\n\n      case tt.privateName: {\n        // https://tc39.es/proposal-private-fields-in-in\n        // RelationalExpression [In, Yield, Await]\n        //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n        const { value, start } = this.state;\n        node = this.parsePrivateName();\n        if (this.match(tt._in)) {\n          this.classScope.usePrivateName(value, start);\n        } else {\n          this.raise(start, Errors.PrivateInExpectedIn, value);\n        }\n        return node;\n      }\n\n      case tt.moduloAssign:\n        if (\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"hack\" &&\n          this.getPluginOption(\"pipelineOperator\", \"topicToken\") === \"%\"\n        ) {\n          // If we find %= in an expression position, and the Hack-pipes proposal is active,\n          // then the % could be the topic token (e.g., in x |> %==y or x |> %===y), and so we\n          // reparse it as %.\n          // The next readToken() call will start parsing from =.\n\n          this.state.value = \"%\";\n          this.state.type = tt.modulo;\n          this.state.pos--;\n          this.state.end--;\n          this.state.endLoc.column--;\n        } else {\n          throw this.unexpected();\n        }\n\n      // falls through\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          // A pipe-operator proposal is active,\n          // although its configuration might not match the current token\u2019s type.\n          node = this.startNode();\n          const start = this.state.start;\n          const tokenType = this.state.type;\n\n          // Consume the current token.\n          this.next();\n\n          // If the pipe-operator plugin\u2019s configuration matches the current token\u2019s type,\n          // then this will return `node`, will have been finished as a topic reference.\n          // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n          return this.finishTopicReference(\n            node,\n            start,\n            pipeProposal,\n            tokenType,\n          );\n        }\n      }\n\n      // fall through\n      case tt.relational: {\n        if (this.state.value === \"<\") {\n          const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n          if (\n            isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n            lookaheadCh === charCodes.greaterThan // Fragment <>\n          ) {\n            this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n          }\n        }\n      }\n\n      // fall through\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the plugin\u2019s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the plugin\u2019s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference(\n    node: N.Node,\n    start: number,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): N.Expression {\n    if (this.testTopicReferenceConfiguration(pipeProposal, start, tokenType)) {\n      // The token matches the plugin\u2019s configuration.\n      // The token is therefore a topic reference.\n\n      // Determine the node type for the topic reference\n      // that is appropriate for the active pipe-operator proposal.\n      let nodeType;\n      if (pipeProposal === \"smart\") {\n        nodeType = \"PipelinePrimaryTopicReference\";\n      } else {\n        // The proposal must otherwise be \"hack\",\n        // as enforced by testTopicReferenceConfiguration.\n        nodeType = \"TopicReference\";\n      }\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        // The topic reference is not allowed in the current context:\n        // it is outside of a pipe body.\n        // Raise recoverable errors.\n        if (pipeProposal === \"smart\") {\n          this.raise(start, Errors.PrimaryTopicNotAllowed);\n        } else {\n          // In this case, `pipeProposal === \"hack\"` is true.\n          this.raise(start, Errors.PipeTopicUnbound);\n        }\n      }\n\n      // Register the topic reference so that its pipe body knows\n      // that its topic was used at least once.\n      this.registerTopicReference();\n\n      return this.finishNode(node, nodeType);\n    } else {\n      // The token does not match the plugin\u2019s configuration.\n      throw this.raise(\n        start,\n        Errors.PipeTopicUnconfiguredToken,\n        tokenType.label,\n      );\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin\u2019s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration\u2019s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\" or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    start: number,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        const pluginTopicToken = this.getPluginOption(\n          \"pipelineOperator\",\n          \"topicToken\",\n        );\n        return tokenType.label === pluginTopicToken;\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(start, Errors.PipeTopicRequiresHackPipes);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(node: N.Node): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.pos, Errors.LineTerminatorBeforeArrow);\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    this.parseArrowExpression(node, params, true);\n    return node;\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(node: N.Node, isAsync: boolean): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(node.start, Errors.SuperNotAllowed);\n    } else if (\n      !this.scope.allowSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(node.start, Errors.UnexpectedSuper);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(node.start, Errors.UnsupportedSuper);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parseMaybePrivateName(\n    isPrivateNameAllowed: boolean,\n  ): N.PrivateName | N.Identifier {\n    const isPrivate = this.match(tt.privateName);\n\n    if (isPrivate) {\n      if (!isPrivateNameAllowed) {\n        this.raise(this.state.start + 1, Errors.UnexpectedPrivateField);\n      }\n      return this.parsePrivateName();\n    } else {\n      return this.parseIdentifier(true);\n    }\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode();\n    const id = this.startNodeAt(\n      this.state.start + 1,\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      new Position(\n        this.state.curLine,\n        this.state.start + 1 - this.state.lineStart,\n      ),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      return this.parseMetaProperty(node, meta, \"sent\");\n    }\n    return this.parseFunction(node);\n  }\n\n  parseMetaProperty(\n    node: N.MetaProperty,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    if (meta.name === \"function\" && propertyName === \"sent\") {\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.isContextual(propertyName)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n    }\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(\n        node.property.start,\n        Errors.UnsupportedMetaProperty,\n        meta.name,\n        propertyName,\n      );\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  parseImportMetaProperty(node: N.MetaProperty): N.MetaProperty {\n    const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n    this.next(); // eat `.`\n\n    if (this.isContextual(\"meta\")) {\n      if (!this.inModule) {\n        this.raise(id.start, SourceTypeModuleErrors.ImportMetaOutsideModule);\n      }\n      this.sawUnambiguousESM = true;\n    }\n\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n\n  parseLiteralAtNode<T: N.Node>(\n    value: any,\n    type: $ElementType<T, \"type\">,\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T: N.Node>(value: any, type: $ElementType<T, \"type\">): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n  }\n\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: { value: any, pattern: string, flags: string }) {\n    const node = this.parseLiteral<N.RegExpLiteral>(\n      value.value,\n      \"RegExpLiteral\",\n    );\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    return node;\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode();\n    node.value = value;\n    this.next();\n    return this.finishNode<N.BooleanLiteral>(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode<N.NullLiteral>(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartPos = this.state.start;\n    const innerStartLoc = this.state.startLoc;\n    const exprList = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStart;\n    let optionalCommaStart;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParameters === -1\n            ? null\n            : refExpressionErrors.optionalParameters,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStart = this.state.start;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartPos = this.state.start;\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStart = this.state.start;\n        exprList.push(\n          this.parseParenItem(\n            this.parseRestBinding(),\n            spreadNodeStartPos,\n            spreadNodeStartLoc,\n          ),\n        );\n\n        this.checkCommaAfterRest(charCodes.rightParenthesis);\n\n        break;\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowIn(\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndPos = this.state.lastTokEnd;\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt(startPos, startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStart);\n    }\n    if (optionalCommaStart) this.unexpected(optionalCommaStart);\n    if (spreadStart) this.unexpected(spreadStart);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      val.end = innerEndPos;\n      val.loc.end = innerEndLoc;\n    } else {\n      val = exprList[0];\n    }\n\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(val, \"parenthesized\", true);\n      this.addExtra(val, \"parenStart\", startPos);\n      return val;\n    }\n\n    const parenExpression = this.startNodeAt(startPos, startLoc);\n    parenExpression.expression = val;\n    this.finishNode(parenExpression, \"ParenthesizedExpression\");\n    return parenExpression;\n  }\n\n  // eslint-disable-next-line no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem(\n    node: N.Expression,\n    startPos: number, // eslint-disable-line no-unused-vars\n    startLoc: Position, // eslint-disable-line no-unused-vars\n  ): N.Expression {\n    return node;\n  }\n\n  parseNewOrNewTarget(): N.NewExpression | N.MetaProperty {\n    const node = this.startNode();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n      this.next();\n      const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n        this.raise(metaProp.start, Errors.UnexpectedNewTarget);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call \u2014 at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(node: N.Expression): N.NewExpression {\n    node.callee = this.parseNoCallExpr();\n    if (node.callee.type === \"Import\") {\n      this.raise(node.callee.start, Errors.ImportCallNotNewExpression);\n    } else if (this.isOptionalChain(node.callee)) {\n      this.raise(this.state.lastTokEnd, Errors.OptionalChainingNoNew);\n    } else if (this.eat(tt.questionDot)) {\n      this.raise(this.state.start, Errors.OptionalChainingNoNew);\n    }\n\n    this.parseNewArguments(node);\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewArguments(node: N.NewExpression): void {\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // $FlowFixMe (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const elem = this.startNode();\n    if (this.state.value === null) {\n      if (!isTagged) {\n        this.raise(this.state.start + 1, Errors.InvalidEscapeSequenceTemplate);\n      }\n    }\n    elem.value = {\n      raw: this.input\n        .slice(this.state.start, this.state.end)\n        .replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.state.value,\n    };\n    this.next();\n    elem.tail = this.match(tt.backQuote);\n    return this.finishNode(elem, \"TemplateElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode();\n    this.next();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n    while (!curElt.tail) {\n      this.expect(tt.dollarBraceL);\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.expect(tt.braceR);\n      node.quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    this.next();\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(): N.Expression {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike<T: N.ObjectPattern | N.ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: ?boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash: any = Object.create(null);\n    let first = true;\n    const node = this.startNode();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n          break;\n        }\n      }\n\n      const prop = this.parsePropertyDefinition(isPattern, refExpressionErrors);\n      if (!isPattern) {\n        // $FlowIgnore RestElement will never be returned if !isPattern\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(prop.start, Errors.InvalidRecordProperty);\n      }\n\n      // $FlowIgnore\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    return this.finishNode(node, type);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(prop: N.ObjectProperty): boolean {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    isPattern: boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): N.ObjectMember | N.SpreadElement | N.RestElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(this.state.start, Errors.UnsupportedPropertyDecorator);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode();\n    let isGenerator = false;\n    let isAsync = false;\n    let isAccessor = false;\n    let startPos;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      if (isPattern) {\n        this.next();\n        // Don't use parseRestBinding() as we only allow Identifier here.\n        prop.argument = this.parseIdentifier();\n        this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n        return this.finishNode(prop, \"RestElement\");\n      }\n\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (isPattern || refExpressionErrors) {\n      startPos = this.state.start;\n      startLoc = this.state.startLoc;\n    }\n\n    if (!isPattern) {\n      isGenerator = this.eat(tt.star);\n    }\n\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n\n    if (\n      !isPattern &&\n      !isGenerator &&\n      !containsEsc &&\n      this.maybeAsyncOrAccessorProp(prop)\n    ) {\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(this.state.pos, Errors.AccessorIsGenerator, keyName);\n          this.next();\n        }\n        this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n      }\n    }\n\n    this.parseObjPropValue(\n      prop,\n      startPos,\n      startLoc,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n      refExpressionErrors,\n    );\n\n    return prop;\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    const start = method.start;\n\n    if (params.length !== paramCount) {\n      if (method.kind === \"get\") {\n        this.raise(start, Errors.BadGetterArity);\n      } else {\n        this.raise(start, Errors.BadSetterArity);\n      }\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(start, Errors.BadSetterRestParameter);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    prop: N.ObjectMethod,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): ?N.ObjectMethod {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(prop);\n      return prop;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    prop: N.ObjectProperty,\n    startPos: ?number,\n    startLoc: ?Position,\n    isPattern: boolean,\n    refExpressionErrors: ?ExpressionErrors,\n  ): ?N.ObjectProperty {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.start, this.state.startLoc)\n        : this.parseMaybeAssignAllowIn(refExpressionErrors);\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoveredInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startPos,\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq) && refExpressionErrors) {\n        if (refExpressionErrors.shorthandAssign === -1) {\n          refExpressionErrors.shorthandAssign = this.state.start;\n        }\n        prop.value = this.parseMaybeDefault(\n          startPos,\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue(\n    prop: any,\n    startPos: ?number,\n    startLoc: ?Position,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): void {\n    const node =\n      this.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) ||\n      this.parseObjectProperty(\n        prop,\n        startPos,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      );\n\n    if (!node) this.unexpected();\n\n    // $FlowFixMe\n    return node;\n  }\n\n  parsePropertyName(\n    prop: N.ObjectOrClassMember | N.ClassMember | N.TsNamedTypeElementBase,\n    isPrivateNameAllowed: boolean,\n  ): N.Expression | N.Identifier {\n    if (this.eat(tt.bracketL)) {\n      (prop: $FlowSubtype<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      const oldInPropertyName = this.state.inPropertyName;\n      this.state.inPropertyName = true;\n      // We check if it's valid for it to be a private name when we push it.\n      const type = this.state.type;\n      (prop: $FlowFixMe).key =\n        type === tt.num ||\n        type === tt.string ||\n        type === tt.bigint ||\n        type === tt.decimal\n          ? this.parseExprAtom()\n          : this.parseMaybePrivateName(isPrivateNameAllowed);\n\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n\n      this.state.inPropertyName = oldInPropertyName;\n    }\n\n    return prop.key;\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: ?boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = !!isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T: N.MethodLike>(\n    node: T,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: string,\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = !!isGenerator;\n    const allowModifiers = isConstructor; // For TypeScript parameter properties\n    this.scope.enter(\n      SCOPE_FUNCTION |\n        SCOPE_SUPER |\n        (inClassScope ? SCOPE_CLASS : 0) |\n        (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams((node: any), allowModifiers);\n    this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return node;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors: ?ExpressionErrors,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    node: N.ArrowFunctionExpression,\n    params: ?(N.Expression[]),\n    isAsync: boolean,\n    trailingCommaPos: ?number,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody and AsyncConciseBody inherit [In]\n    if (!this.match(tt.bracketL) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaPos);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: N.ArrowFunctionExpression,\n    params: N.Expression[],\n    trailingCommaPos: ?number,\n  ): void {\n    node.params = this.toAssignableList(params, trailingCommaPos, false);\n  }\n\n  parseFunctionBodyAndFinish(\n    node: N.BodilessFunctionOrMethodBase,\n    type: string,\n    isMethod?: boolean = false,\n  ): void {\n    // $FlowIgnore (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    node: N.Function,\n    allowExpression: ?boolean,\n    isMethod?: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      node.body = this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            const errorPos =\n              // $FlowIgnore\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n              // $FlowIgnore\n              !!node.key\n                ? node.key.end\n                : node.start;\n            this.raise(errorPos, Errors.IllegalLanguageModeDirective);\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkLVal(\n              node.id,\n              \"function name\",\n              BIND_OUTSIDE,\n              undefined,\n              undefined,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.expressionScope.exit();\n      this.state.labels = oldLabels;\n    }\n  }\n\n  isSimpleParamList(\n    params: $ReadOnlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (params[i].type !== \"Identifier\") return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: N.Function,\n    allowDuplicates: boolean,\n    // eslint-disable-next-line no-unused-vars\n    isArrowFunction: ?boolean,\n    strictModeChanged?: boolean = true,\n  ): void {\n    const checkClashes = new Set();\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        \"function parameter list\",\n        BIND_VAR,\n        allowDuplicates ? null : checkClashes,\n        undefined,\n        strictModeChanged,\n      );\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n\n  parseExprList(\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n    nodeForExtra?: ?N.Node,\n  ): $ReadOnlyArray<?N.Expression> {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addExtra(\n              nodeForExtra,\n              \"trailingComma\",\n              this.state.lastTokStart,\n            );\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    allowEmpty: ?boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n    allowPlaceholder: ?boolean,\n  ): ?N.Expression {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(this.state.pos, Errors.UnexpectedToken, \",\");\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartPos = this.state.start;\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartPos,\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(this.state.start, Errors.UnexpectedArgumentPlaceholder);\n      }\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode();\n    const name = this.parseIdentifierName(node.start, liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node: N.Identifier, name: string): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(pos: number, liberal?: boolean): string {\n    let name: string;\n\n    const { start, type } = this.state;\n\n    if (type === tt.name) {\n      name = this.state.value;\n    } else if (type.keyword) {\n      name = type.keyword;\n    } else {\n      throw this.unexpected();\n    }\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      this.state.type = tt.name;\n    } else {\n      this.checkReservedWord(name, start, !!type.keyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: number,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(startLoc, Errors.YieldBindingIdentifier);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(startLoc, Errors.AwaitBindingIdentifier);\n        return;\n      } else if (this.scope.inStaticBlock) {\n        this.raise(startLoc, Errors.AwaitBindingIdentifierInStaticBlock);\n        return;\n      } else {\n        this.expressionScope.recordAsyncArrowParametersError(\n          startLoc,\n          Errors.AwaitBindingIdentifier,\n        );\n      }\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(startLoc, Errors.ArgumentsInClass);\n        return;\n      }\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(startLoc, Errors.UnexpectedKeyword, word);\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n      ? isStrictBindReservedWord\n      : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(startLoc, Errors.UnexpectedReservedWord, word);\n    }\n  }\n\n  isAwaitAllowed(): boolean {\n    if (this.prodParam.hasAwait) return true;\n    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n      return true;\n    }\n    return false;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(startPos: number, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      node.start,\n      Errors.AwaitExpressionFormalParameter,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(node.start, Errors.ObsoleteAwaitStar);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousAwait(): boolean {\n    return (\n      this.hasPrecedingLineBreak() ||\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``\n      this.match(tt.plusMin) ||\n      this.match(tt.parenL) ||\n      this.match(tt.bracketL) ||\n      this.match(tt.backQuote) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      this.match(tt.regexp) ||\n      this.match(tt.slash) ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && this.match(tt.modulo))\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(): N.YieldExpression {\n    const node = this.startNode();\n\n    this.expressionScope.recordParameterInitializerError(\n      node.start,\n      Errors.YieldInParameter,\n    );\n\n    this.next();\n    let delegating = false;\n    let argument = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartPos: number) {\n    if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(leftStartPos, Errors.PipelineHeadSequenceExpression);\n      }\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a Hack-style pipe body is parsed.\n  // The `startPos` is the starting position of the pipe body.\n\n  checkHackPipeBodyEarlyErrors(startPos: number): void {\n    // If the following token is invalidly `=>`,\n    // then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because Hack-style `|>` has tighter precedence than `=>`.\n    // (Unparenthesized `yield` expressions are handled\n    // in `parseHackPipeBody`,\n    // and unparenthesized assignment expressions are handled\n    // in `parseMaybeAssign`.)\n    if (this.match(tt.arrow)) {\n      throw this.raise(\n        this.state.start,\n        Errors.PipeBodyIsTighter,\n        tt.arrow.label,\n      );\n    } else if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(startPos, Errors.PipeTopicUnused);\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(\n    childExpr: N.Expression,\n    startPos: number,\n    startLoc: Position,\n  ): N.PipelineBody {\n    const bodyNode = this.startNodeAt(startPos, startLoc);\n    if (this.isSimpleReference(childExpr)) {\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      this.checkSmartPipeTopicBodyEarlyErrors(startPos);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startPos` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startPos: number): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(this.state.start, Errors.PipelineBodyNoArrow);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    else if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(startPos, Errors.PipelineTopicUnused);\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    const proposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n    if (proposal === \"smart\") {\n      // Reset the parser\u2019s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\", \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(prec: number): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnary(),\n      startPos,\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    this.eat(tt.braceL);\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    const program = this.startNode<N.Program>();\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    this.eat(tt.braceR);\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n}\n", "// @flow\n\nimport * as N from \"../types\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport ExpressionParser from \"./expression\";\nimport { Errors, SourceTypeModuleErrors } from \"./error\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier\";\nimport { lineBreak } from \"../util/whitespace\";\nimport * as charCodes from \"charcodes\";\nimport {\n  BIND_CLASS,\n  BIND_LEXICAL,\n  BIND_VAR,\n  BIND_FUNCTION,\n  SCOPE_CLASS,\n  SCOPE_FUNCTION,\n  SCOPE_OTHER,\n  SCOPE_SIMPLE_CATCH,\n  SCOPE_STATIC_BLOCK,\n  SCOPE_SUPER,\n  CLASS_ELEMENT_OTHER,\n  CLASS_ELEMENT_INSTANCE_GETTER,\n  CLASS_ELEMENT_INSTANCE_SETTER,\n  CLASS_ELEMENT_STATIC_GETTER,\n  CLASS_ELEMENT_STATIC_SETTER,\n  type BindingTypes,\n} from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport { PARAM, functionFlags } from \"../util/production-parameter\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope\";\nimport type { SourceType } from \"../options\";\nimport { Token } from \"../tokenizer\";\nimport { Position } from \"../util/location\";\nimport { cloneStringLiteral, cloneIdentifier } from \"./node\";\n\nconst loopLabel = { kind: \"loop\" },\n  switchLabel = { kind: \"switch\" };\n\nconst FUNC_NO_FLAGS = 0b000,\n  FUNC_STATEMENT = 0b001,\n  FUNC_HANGING_STATEMENT = 0b010,\n  FUNC_NULLABLE_ID = 0b100;\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tt.privateName to tt.hash + tt.name for backward Babel 7 compat.\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n * @param {*} tokens\n * @returns\n */\nfunction babel7CompatTokens(tokens) {\n  if (!process.env.BABEL_8_BREAKING) {\n    for (let i = 0; i < tokens.length; i++) {\n      const token = tokens[i];\n      if (token.type === tt.privateName) {\n        const { loc, start, value, end } = token;\n        const hashEndPos = start + 1;\n        const hashEndLoc = new Position(loc.start.line, loc.start.column + 1);\n        tokens.splice(\n          i,\n          1,\n          // $FlowIgnore: hacky way to create token\n          new Token({\n            type: tt.hash,\n            value: \"#\",\n            start: start,\n            end: hashEndPos,\n            startLoc: loc.start,\n            endLoc: hashEndLoc,\n          }),\n          // $FlowIgnore: hacky way to create token\n          new Token({\n            type: tt.name,\n            value: value,\n            start: hashEndPos,\n            end: end,\n            startLoc: hashEndLoc,\n            endLoc: loc.end,\n          }),\n        );\n      }\n    }\n  }\n  return tokens;\n}\nexport default class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(file: N.File, program: N.Program): N.File {\n    file.program = this.parseProgram(program);\n    file.comments = this.state.comments;\n\n    if (this.options.tokens) file.tokens = babel7CompatTokens(this.tokens);\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    program: N.Program,\n    end: TokenType = tt.eof,\n    sourceType: SourceType = this.options.sourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (\n      this.inModule &&\n      !this.options.allowUndeclaredExports &&\n      this.scope.undefinedExports.size > 0\n    ) {\n      for (const [name] of Array.from(this.scope.undefinedExports)) {\n        const pos = this.scope.undefinedExports.get(name);\n        // $FlowIssue\n        this.raise(pos, Errors.ModuleExportUndefined, name);\n      }\n    }\n    return this.finishNode<N.Program>(program, \"Program\");\n  }\n\n  // TODO\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   *\n   * @param {N.Statement} stmt\n   * @returns {N.Directive}\n   * @memberof StatementParser\n   */\n  stmtToDirective(stmt: N.Statement): N.Directive {\n    const directive = (stmt: any);\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n\n    const directiveLiteral = directive.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    directiveLiteral.type = \"DirectiveLiteral\";\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(context: ?string): boolean {\n    if (!this.isContextual(\"let\")) {\n      return false;\n    }\n    return this.isLetKeyword(context);\n  }\n\n  /**\n   * Assuming we have seen a contextual `let`, check if it starts a variable declaration\n   so that `left` should be interpreted as a `let` keyword.\n   *\n   * @param {?string} context When `context` is non nullish, it will return early and _skip_ checking\n                              if the next token after `let` is `{` or a keyword relational operator\n   * @returns {boolean}\n   * @memberof StatementParser\n   */\n  isLetKeyword(context: ?string): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    // For ambiguous cases, determine if a LexicalDeclaration (or only a\n    // Statement) is allowed here. If context is not empty then only a Statement\n    // is allowed. However, `let [` is an explicit negative lookahead for\n    // ExpressionStatement, so special-case it first.\n    // Also, `let \\` is never valid as an expression so this must be a keyword.\n    if (\n      nextCh === charCodes.backslash ||\n      nextCh === charCodes.leftSquareBracket\n    ) {\n      return true;\n    }\n    if (context) return false;\n\n    if (nextCh === charCodes.leftCurlyBrace) return true;\n\n    if (isIdentifierStart(nextCh)) {\n      keywordRelationalOperator.lastIndex = next;\n      const matched = keywordRelationalOperator.exec(this.input);\n      if (matched !== null) {\n        // We have seen `in` or `instanceof` so far, now check if the identfier\n        // ends here\n        const endCh = this.codePointAtPos(next + matched[0].length);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatement(context: ?string, topLevel?: boolean): N.Statement {\n    if (this.match(tt.at)) {\n      this.parseDecorators(true);\n    }\n    return this.parseStatementContent(context, topLevel);\n  }\n\n  parseStatementContent(context: ?string, topLevel: ?boolean): N.Statement {\n    let starttype = this.state.type;\n    const node = this.startNode();\n    let kind;\n\n    if (this.isLet(context)) {\n      starttype = tt._var;\n      kind = \"let\";\n    }\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (starttype) {\n      case tt._break:\n      case tt._continue:\n        // $FlowFixMe\n        return this.parseBreakContinueStatement(node, starttype.keyword);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node);\n      case tt._do:\n        return this.parseDoStatement(node);\n      case tt._for:\n        return this.parseForStatement(node);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (context) {\n          if (this.state.strict) {\n            this.raise(this.state.start, Errors.StrictFunction);\n          } else if (context !== \"if\" && context !== \"label\") {\n            this.raise(this.state.start, Errors.SloppyFunction);\n          }\n        }\n        return this.parseFunctionStatement(node, false, !context);\n\n      case tt._class:\n        if (context) this.unexpected();\n        return this.parseClass(node, true);\n\n      case tt._if:\n        return this.parseIfStatement(node);\n      case tt._return:\n        return this.parseReturnStatement(node);\n      case tt._switch:\n        return this.parseSwitchStatement(node);\n      case tt._throw:\n        return this.parseThrowStatement(node);\n      case tt._try:\n        return this.parseTryStatement(node);\n\n      case tt._const:\n      case tt._var:\n        kind = kind || this.state.value;\n        if (context && kind !== \"var\") {\n          this.raise(this.state.start, Errors.UnexpectedLexicalDeclaration);\n        }\n        return this.parseVarStatement(node, kind);\n\n      case tt._while:\n        return this.parseWhileStatement(node);\n      case tt._with:\n        return this.parseWithStatement(node);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (!this.options.allowImportExportEverywhere && !topLevel) {\n          this.raise(this.state.start, Errors.UnexpectedImportExport);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (starttype === tt._import) {\n          result = this.parseImport(node);\n\n          if (\n            result.type === \"ImportDeclaration\" &&\n            (!result.importKind || result.importKind === \"value\")\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        } else {\n          result = this.parseExport(node);\n\n          if (\n            (result.type === \"ExportNamedDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            (result.type === \"ExportAllDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            result.type === \"ExportDefaultDeclaration\"\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        }\n\n        this.assertModuleNodeAllowed(node);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (context) {\n            this.raise(\n              this.state.start,\n              Errors.AsyncFunctionInSingleStatementContext,\n            );\n          }\n          this.next();\n          return this.parseFunctionStatement(node, true, !context);\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      starttype === tt.name &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(node, maybeName, expr, context);\n    } else {\n      return this.parseExpressionStatement(node, expr);\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(node.start, SourceTypeModuleErrors.ImportOutsideModule);\n    }\n  }\n\n  takeDecorators(node: N.HasDecorators): void {\n    const decorators =\n      this.state.decoratorStack[this.state.decoratorStack.length - 1];\n    if (decorators.length) {\n      node.decorators = decorators;\n      this.resetStartLocationFromNode(node, decorators[0]);\n      this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n    }\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(allowExport?: boolean): void {\n    const currentContextDecorators =\n      this.state.decoratorStack[this.state.decoratorStack.length - 1];\n    while (this.match(tt.at)) {\n      const decorator = this.parseDecorator();\n      currentContextDecorators.push(decorator);\n    }\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (\n        this.hasPlugin(\"decorators\") &&\n        !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n      ) {\n        this.raise(this.state.start, Errors.DecoratorExportClass);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(this.state.start, Errors.UnexpectedLeadingDecorator);\n    }\n  }\n\n  parseDecorator(): N.Decorator {\n    this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n\n    const node = this.startNode();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      // Every time a decorator class expression is evaluated, a new empty array is pushed onto the stack\n      // So that the decorators of any nested class expressions will be dealt with separately\n      this.state.decoratorStack.push([]);\n\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.eat(tt.parenL)) {\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt(startPos, startLoc);\n          node.object = expr;\n          node.property = this.parseIdentifier(true);\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n      }\n\n      node.expression = this.parseMaybeDecoratorArguments(expr);\n      this.state.decoratorStack.pop();\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: N.BreakStatement | N.ContinueStatement,\n    keyword: string,\n  ): N.BreakStatement | N.ContinueStatement {\n    const isBreak = keyword === \"break\";\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, keyword);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: N.BreakStatement | N.ContinueStatement,\n    keyword: string,\n  ) {\n    const isBreak = keyword === \"break\";\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      this.raise(node.start, Errors.IllegalBreakContinue, keyword);\n    }\n  }\n\n  parseDebuggerStatement(node: N.DebuggerStatement): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  parseDoStatement(node: N.DoWhileStatement): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(\"do\"),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(node: N.Node): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = -1;\n    if (this.isAwaitAllowed() && this.eatContextual(\"await\")) {\n      awaitAt = this.state.lastTokStart;\n    }\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node, null);\n    }\n\n    const startsWithLet = this.isContextual(\"let\");\n    const isLet = startsWithLet && this.isLetKeyword();\n    if (this.match(tt._var) || this.match(tt._const) || isLet) {\n      const init = this.startNode();\n      const kind = isLet ? \"let\" : this.state.value;\n      this.next();\n      this.parseVar(init, true, kind);\n      this.finishNode(init, \"VariableDeclaration\");\n\n      if (\n        (this.match(tt._in) || this.isContextual(\"of\")) &&\n        init.declarations.length === 1\n      ) {\n        return this.parseForIn(node, init, awaitAt);\n      }\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node, init);\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithUnescapedName =\n      this.match(tt.name) && !this.state.containsEsc;\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(\"of\");\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(init.start, Errors.ForOfLet);\n      } else if (\n        // `for await (async of []);` is allowed.\n        awaitAt === -1 &&\n        startsWithUnescapedName &&\n        init.type === \"Identifier\" &&\n        init.name === \"async\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(init.start, Errors.ForOfAsync);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.toAssignable(init, /* isLHS */ true);\n      const description = isForOf ? \"for-of statement\" : \"for-in statement\";\n      this.checkLVal(init, description);\n      return this.parseForIn(node, init, awaitAt);\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node, init);\n  }\n\n  parseFunctionStatement(\n    node: N.FunctionDeclaration,\n    isAsync?: boolean,\n    declarationPosition?: boolean,\n  ): N.FunctionDeclaration {\n    this.next();\n    return this.parseFunction(\n      node,\n      FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT),\n      isAsync,\n    );\n  }\n\n  parseIfStatement(node: N.IfStatement): N.IfStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    node.consequent = this.parseStatement(\"if\");\n    node.alternate = this.eat(tt._else) ? this.parseStatement(\"if\") : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(node: N.ReturnStatement): N.ReturnStatement {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(this.state.start, Errors.IllegalReturn);\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  parseSwitchStatement(node: N.SwitchStatement): N.SwitchStatement {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        cases.push((cur = this.startNode()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              this.state.lastTokStart,\n              Errors.MultipleDefaultsInSwitch,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatement(null));\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(node: N.ThrowStatement): N.ThrowStatement {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.lastTokEnd, Errors.NewlineAfterThrow);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    const simple = param.type === \"Identifier\";\n    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, \"catch clause\", BIND_LEXICAL);\n\n    return param;\n  }\n\n  parseTryStatement(node: N.TryStatement): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(node.start, Errors.NoCatchOrFinally);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  parseVarStatement(\n    node: N.VariableDeclaration,\n    kind: \"var\" | \"let\" | \"const\",\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  parseWhileStatement(node: N.WhileStatement): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(\"while\"),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(node: N.WithStatement): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(this.state.start, Errors.StrictWith);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(\"with\"),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: N.EmptyStatement): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  parseLabeledStatement(\n    node: N.LabeledStatement,\n    maybeName: string,\n    expr: N.Identifier,\n    context: ?string,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(expr.start, Errors.LabelRedeclaration, maybeName);\n      }\n    }\n\n    const kind = this.state.type.isLoop\n      ? \"loop\"\n      : this.match(tt._switch)\n      ? \"switch\"\n      : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start,\n    });\n    node.body = this.parseStatement(\n      context\n        ? context.indexOf(\"label\") === -1\n          ? context + \"label\"\n          : context\n        : \"label\",\n    );\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: N.ExpressionStatement,\n    expr: N.Expression,\n  ): N.Statement {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    allowDirectives?: boolean = false,\n    createNewLexicalScope?: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): boolean {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    node: N.BlockStatementLike,\n    allowDirectives: ?boolean,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body = (node.body = []);\n    const directives = (node.directives = []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: ?(N.Directive[]),\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = this.parseStatement(null, topLevel);\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    node: N.ForStatement,\n    init: ?(N.VariableDeclaration | N.Expression),\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(\"for\"),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    node: N.ForInOf,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt: number,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt > -1) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt > -1;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(\n        init.start,\n        Errors.ForInOfLoopInitializer,\n        isForIn ? \"for-in\" : \"for-of\",\n      );\n    } else if (init.type === \"AssignmentPattern\") {\n      this.raise(init.start, Errors.InvalidLhs, \"for-loop\");\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(\"for\"),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    node: N.VariableDeclaration,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\",\n  ): N.VariableDeclaration {\n    const declarations = (node.declarations = []);\n    const isTypescript = this.hasPlugin(\"typescript\");\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode();\n      this.parseVarId(decl, kind);\n      if (this.eat(tt.eq)) {\n        decl.init = isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n      } else {\n        if (\n          kind === \"const\" &&\n          !(this.match(tt._in) || this.isContextual(\"of\"))\n        ) {\n          // `const` with no initializer is allowed in TypeScript.\n          // It could be a declaration like `const x: number;`.\n          if (!isTypescript) {\n            this.raise(\n              this.state.lastTokEnd,\n              Errors.DeclarationMissingInitializer,\n              \"Const declarations\",\n            );\n          }\n        } else if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(\"of\")))\n        ) {\n          this.raise(\n            this.state.lastTokEnd,\n            Errors.DeclarationMissingInitializer,\n            \"Complex binding patterns\",\n          );\n        }\n        decl.init = null;\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(decl: N.VariableDeclarator, kind: \"var\" | \"let\" | \"const\"): void {\n    decl.id = this.parseBindingAtom();\n    this.checkLVal(\n      decl.id,\n      \"variable declaration\",\n      kind === \"var\" ? BIND_VAR : BIND_LEXICAL,\n      undefined,\n      kind !== \"var\",\n    );\n  }\n\n  // Parse a function declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseFunction<T: N.NormalFunction>(\n    node: T,\n    statement?: number = FUNC_NO_FLAGS,\n    isAsync?: boolean = false,\n  ): T {\n    const isStatement = statement & FUNC_STATEMENT;\n    const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n    const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star) && isHangingStatement) {\n      this.raise(this.state.start, Errors.GeneratorInSingleStatementContext);\n    }\n    node.generator = this.eat(tt.star);\n\n    if (isStatement) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isStatement) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* allowModifiers */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isStatement && !isHangingStatement) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n\n  parseFunctionId(requireId?: boolean): ?N.Identifier {\n    return requireId || this.match(tt.name) ? this.parseIdentifier() : null;\n  }\n\n  parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      /* allowEmpty */ false,\n      allowModifiers,\n    );\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BIND_VAR\n          : BIND_LEXICAL\n        : BIND_FUNCTION,\n      node.id.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T: N.Class>(\n    node: T,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next();\n    this.takeDecorators(node);\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed &&\n      !method.static &&\n      (method.key.name === \"constructor\" || // Identifier\n        method.key.value === \"constructor\") // String literal\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(hadSuperClass: boolean, oldStrict: boolean): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody: N.ClassBody = this.startNode();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(this.state.lastTokEnd, Errors.DecoratorSemicolon);\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          member.kind === \"constructor\" &&\n          member.decorators &&\n          member.decorators.length > 0\n        ) {\n          this.raise(member.start, Errors.DecoratorConstructor);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(this.state.start, Errors.TrailingDecorator);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    classBody: N.ClassBody,\n    member: N.ClassMember,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = (member: any);\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = (member: any);\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    classBody: N.ClassBody,\n    member: N.ClassMember,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(\"static\");\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, ((member: any): N.StaticBlock));\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    classBody: N.ClassBody,\n    member: N.ClassMember,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod: $FlowSubtype<N.ClassMethod> = member;\n    const privateMethod: $FlowSubtype<N.ClassPrivateMethod> = member;\n    const publicProp: $FlowSubtype<N.ClassMethod> = member;\n    const privateProp: $FlowSubtype<N.ClassPrivateMethod> = member;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(publicMethod.key.start, Errors.ConstructorIsGenerator);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual = this.match(tt.name) && !this.state.containsEsc;\n    const isPrivate = this.match(tt.privateName);\n    const key = this.parseClassElementName(member);\n    const maybeQuestionTokenStart = this.state.start;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(key.start, Errors.DuplicateConstructor);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(key.start, Errors.OverrideOnConstructor);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (\n      isContextual &&\n      key.name === \"async\" &&\n      !this.isLineTerminator()\n    ) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStart);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, Errors.ConstructorIsAsync);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      isContextual &&\n      (key.name === \"get\" || key.name === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = key.name;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, Errors.ConstructorIsAccessor);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/proposal-class-fields/#prod-ClassElementName\n  parseClassElementName(member: N.ClassMember): N.Expression | N.Identifier {\n    const { type, value, start } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(start, Errors.StaticPrototype);\n    }\n\n    if (type === tt.privateName && value === \"constructor\") {\n      this.raise(start, Errors.ConstructorClassPrivateField);\n    }\n\n    return this.parsePropertyName(member, /* isPrivateNameAllowed */ true);\n  }\n\n  parseClassStaticBlock(\n    classBody: N.ClassBody,\n    member: N.StaticBlock & { decorators?: Array<N.Decorator> },\n  ) {\n    this.expectPlugin(\"classStaticBlock\", member.start);\n    // Start a new lexical scope\n    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(PARAM);\n    const body = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(member.start, Errors.DecoratorStaticBlock);\n    }\n  }\n\n  pushClassProperty(classBody: N.ClassBody, prop: N.ClassProperty) {\n    if (\n      !prop.computed &&\n      (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")\n    ) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(prop.key.start, Errors.ConstructorClassField);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    classBody: N.ClassBody,\n    prop: N.ClassPrivateProperty,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      CLASS_ELEMENT_OTHER,\n      node.key.start,\n    );\n  }\n\n  pushClassMethod(\n    classBody: N.ClassBody,\n    method: N.ClassMethod,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    classBody: N.ClassBody,\n    method: N.ClassPrivateMethod,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? CLASS_ELEMENT_STATIC_GETTER\n          : CLASS_ELEMENT_INSTANCE_GETTER\n        : node.kind === \"set\"\n        ? node.static\n          ? CLASS_ELEMENT_STATIC_SETTER\n          : CLASS_ELEMENT_INSTANCE_SETTER\n        : CLASS_ELEMENT_OTHER;\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      kind,\n      node.key.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line no-unused-vars\n    methodOrProp: N.ClassMethod | N.ClassProperty,\n  ): void {}\n\n  // https://tc39.es/proposal-class-fields/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    node: N.ClassPrivateProperty,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/proposal-class-fields/#prod-FieldDefinition\n  parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  // https://tc39.es/proposal-class-fields/#prod-Initializer\n  parseInitializer(node: N.ClassProperty | N.ClassPrivateProperty): void {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId: ?boolean,\n    bindingType: BindingTypes = BIND_CLASS,\n  ): void {\n    if (this.match(tt.name)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.checkLVal(node.id, \"class name\", bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        this.unexpected(null, Errors.MissingClassName);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(node: N.Class): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(node: N.Node): N.AnyExport {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      this.parseExportFrom(node, true);\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (\n      (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) ||\n      (hasNamespace && parseAfterNamespace && !hasSpecifiers)\n    ) {\n      throw this.unexpected(null, tt.braceL);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      this.parseExportFrom(node, isFromRequired);\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(node);\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      this.checkExport(node, true, false, !!node.source);\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      // export default ...\n      node.declaration = this.parseExportDefaultExpression();\n      this.checkExport(node, true, true);\n\n      return this.finishNode(node, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, tt.braceL);\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  eatExportStar(node: N.Node): boolean {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n    if (this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n    if (this.isContextual(\"as\")) {\n      if (!node.specifiers) node.specifiers = [];\n\n      const specifier = this.startNodeAt(\n        this.state.lastTokStart,\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(node: N.Node): boolean {\n    if (this.match(tt.braceL)) {\n      if (!node.specifiers) node.specifiers = [];\n      node.specifiers.push(...this.parseExportSpecifiers());\n\n      node.source = null;\n      node.declaration = null;\n\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(node: N.Node): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(\"async\")) return false;\n    const next = this.nextTokenStart();\n    return (\n      !lineBreak.test(this.input.slice(this.state.pos, next)) &&\n      this.isUnparsedContextual(next, \"function\")\n    );\n  }\n\n  parseExportDefaultExpression(): N.Expression | N.Declaration {\n    const expr = this.startNode();\n\n    const isAsync = this.isAsyncFunction();\n\n    if (this.match(tt._function) || isAsync) {\n      this.next();\n      if (isAsync) {\n        this.next();\n      }\n\n      return this.parseFunction(\n        expr,\n        FUNC_STATEMENT | FUNC_NULLABLE_ID,\n        isAsync,\n      );\n    } else if (this.match(tt._class)) {\n      return this.parseClass(expr, true, true);\n    } else if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n      ) {\n        this.raise(this.state.start, Errors.DecoratorBeforeExport);\n      }\n      this.parseDecorators(false);\n      return this.parseClass(expr, true, true);\n    } else if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n      throw this.raise(this.state.start, Errors.UnsupportedDefaultExport);\n    } else {\n      const res = this.parseMaybeAssignAllowIn();\n      this.semicolon();\n      return res;\n    }\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n    return this.parseStatement(null);\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    if (this.match(tt.name)) {\n      const value = this.state.value;\n      if ((value === \"async\" && !this.state.containsEsc) || value === \"let\") {\n        return false;\n      }\n      if (\n        (value === \"type\" || value === \"interface\") &&\n        !this.state.containsEsc\n      ) {\n        const l = this.lookahead();\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        if (\n          (l.type === tt.name && l.value !== \"from\") ||\n          l.type === tt.braceL\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (this.match(tt.name) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(node: N.ExportNamedDeclaration, expect?: boolean): void {\n    if (this.eatContextual(\"from\")) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      const assertions = this.maybeParseImportAssertions();\n      if (assertions) {\n        node.assertions = assertions;\n      }\n    } else {\n      if (expect) {\n        this.unexpected();\n      } else {\n        node.source = null;\n      }\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    if (this.match(tt.at)) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n          this.unexpected(this.state.start, Errors.DecoratorBeforeExport);\n        } else {\n          return true;\n        }\n      }\n    }\n\n    return (\n      this.state.type.keyword === \"var\" ||\n      this.state.type.keyword === \"const\" ||\n      this.state.type.keyword === \"function\" ||\n      this.state.type.keyword === \"class\" ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: N.ExportNamedDeclaration,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = ((node: any): N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(declaration.start, Errors.ExportDefaultFromAsIdentifier);\n          }\n        }\n      } else if (node.specifiers && node.specifiers.length) {\n        // Named exports\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportedName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportedName);\n          // $FlowIgnore\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(\n                specifier.start,\n                Errors.ExportBindingIsString,\n                local.value,\n                exportedName,\n              );\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        // Exported declarations\n        if (\n          node.declaration.type === \"FunctionDeclaration\" ||\n          node.declaration.type === \"ClassDeclaration\"\n        ) {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (const declaration of node.declaration.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n\n    const currentContextDecorators =\n      this.state.decoratorStack[this.state.decoratorStack.length - 1];\n    // If node.declaration is a class, it will take all decorators in the current context.\n    // Thus we should throw if we see non-empty decorators here.\n    if (currentContextDecorators.length) {\n      throw this.raise(node.start, Errors.UnsupportedDecoratorExport);\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node:\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier,\n    name: string,\n  ): void {\n    if (this.exportedIdentifiers.has(name)) {\n      this.raise(\n        node.start,\n        name === \"default\"\n          ? Errors.DuplicateDefaultExport\n          : Errors.DuplicateExport,\n        name,\n      );\n    }\n    this.exportedIdentifiers.add(name);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const node = this.startNode();\n      const isString = this.match(tt.string);\n      const local = this.parseModuleExportName();\n      node.local = local;\n      if (this.eatContextual(\"as\")) {\n        node.exported = this.parseModuleExportName();\n      } else if (isString) {\n        node.exported = cloneStringLiteral(local);\n      } else {\n        node.exported = cloneIdentifier(local);\n      }\n      nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n    }\n\n    return nodes;\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = result.value.match(loneSurrogate);\n      if (surrogate) {\n        this.raise(\n          result.start,\n          Errors.ModuleExportNameHasLoneSurrogate,\n          surrogate[0].charCodeAt(0).toString(16),\n        );\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(node: N.Node): N.AnyImport {\n    // import '...'\n    node.specifiers = [];\n    if (!this.match(tt.string)) {\n      // check if we have a default import like\n      // import React from \"react\";\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      /* we are checking if we do not have a default import, then it is obvious that we need named imports\n       * import { get } from \"axios\";\n       * but if we do have a default import\n       * we need to check if we have a comma after that and\n       * that is where this `|| this.eat` condition comes into play\n       */\n      const parseNext = !hasDefault || this.eat(tt.comma);\n      // if we do have to parse the next set of specifiers, we first check for star imports\n      // import React, * from \"react\";\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      // now we check if we need to parse the next imports\n      // but only if they are not importing * (everything)\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(\"from\");\n    }\n    node.source = this.parseImportSource();\n    // https://github.com/tc39/proposal-import-assertions\n    // parse module import assertions if the next token is `assert` or ignore\n    // and finish the ImportDeclaration node.\n    const assertions = this.maybeParseImportAssertions();\n    if (assertions) {\n      node.assertions = assertions;\n    } else if (!process.env.BABEL_8_BREAKING) {\n      const attributes = this.maybeParseModuleAttributes();\n      if (attributes) {\n        node.attributes = attributes;\n      }\n    }\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom();\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n    return this.match(tt.name);\n  }\n\n  parseImportSpecifierLocal(\n    node: N.ImportDeclaration,\n    specifier: N.Node,\n    type: string,\n    contextDescription: string,\n  ): void {\n    specifier.local = this.parseIdentifier();\n    this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-assertions/#prod-AssertEntries |AssertEntries}\n   * @returns {N.ImportAttribute[]}\n   * @memberof StatementParser\n   */\n  parseAssertEntries(): N.ImportAttribute[] {\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(\n          this.state.start,\n          Errors.ModuleAttributesWithDuplicateKeys,\n          keyName,\n        );\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.unexpected(\n          this.state.start,\n          Errors.ModuleAttributeInvalidValue,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode<N.ImportAttribute>(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   * @returns\n   * @memberof StatementParser\n   */\n  maybeParseModuleAttributes() {\n    if (this.match(tt._with) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n    const attrs = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(\n          node.key.start,\n          Errors.ModuleAttributeDifferentFromType,\n          node.key.name,\n        );\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(\n          node.key.start,\n          Errors.ModuleAttributesWithDuplicateKeys,\n          node.key.name,\n        );\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.unexpected(\n          this.state.start,\n          Errors.ModuleAttributeInvalidValue,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAssertions() {\n    // [no LineTerminator here] AssertClause\n    if (this.isContextual(\"assert\") && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"importAssertions\");\n      this.next(); // eat `assert`\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n    // https://tc39.es/proposal-import-assertions/#prod-AssertClause\n    this.eat(tt.braceL);\n    const attrs = this.parseAssertEntries();\n    this.eat(tt.braceR);\n\n    return attrs;\n  }\n\n  maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n    if (this.shouldParseDefaultImport(node)) {\n      // import defaultObj, { x, y as z } from '...'\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode(),\n        \"ImportDefaultSpecifier\",\n        \"default import specifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: N.ImportDeclaration): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode();\n      this.next();\n      this.expectContextual(\"as\");\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n        \"import namespace specifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: N.ImportDeclaration) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(this.state.start, Errors.DestructureNamedImport);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      this.parseImportSpecifier(node);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(node: N.ImportDeclaration): void {\n    const specifier = this.startNode();\n    const importedIsString = this.match(tt.string);\n    specifier.imported = this.parseModuleExportName();\n    if (this.eatContextual(\"as\")) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(\n          specifier.start,\n          Errors.ImportBindingIsString,\n          imported.value,\n        );\n      }\n      this.checkReservedWord(imported.name, specifier.start, true, true);\n      specifier.local = cloneIdentifier(imported);\n    }\n    this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n", "// @flow\n\nimport type { Options } from \"../options\";\nimport type { File /*::, JSXOpeningElement */ } from \"../types\";\nimport type { PluginList } from \"../plugin-utils\";\nimport { getOptions } from \"../options\";\nimport StatementParser from \"./statement\";\nimport ScopeHandler from \"../util/scope\";\n\nexport type PluginsMap = Map<string, { [string]: any }>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  /*::\n  +jsxParseOpeningElementAfterName: (\n    node: JSXOpeningElement,\n  ) => JSXOpeningElement;\n  */\n\n  constructor(options: ?Options, input: string) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): Class<ScopeHandler<*>> {\n    return ScopeHandler;\n  }\n\n  parse(): File {\n    this.enterInitialScopes();\n    const file = this.startNode();\n    const program = this.startNode();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n}\n\nfunction pluginsMap(plugins: PluginList): PluginsMap {\n  const pluginMap: PluginsMap = new Map();\n  for (const plugin of plugins) {\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n  return pluginMap;\n}\n", "// @flow\n\nimport { type Options } from \"./options\";\nimport {\n  hasPlugin,\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n  type PluginList,\n} from \"./plugin-utils\";\nimport Parser from \"./parser\";\n\nimport { types as tokTypes } from \"./tokenizer/types\";\nimport \"./tokenizer/context\";\n\nimport type { Expression, File } from \"./types\";\n\nexport function parse(input: string, options?: Options): File {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression();\n}\n\nexport { tokTypes };\n\nfunction getParser(options: ?Options, input: string): Parser {\n  let cls = Parser;\n  if (options?.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n\n  return new cls(options, input);\n}\n\nconst parserClassCache: { [key: string]: Class<Parser> } = {};\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(pluginsFromOptions: PluginList): Class<Parser> {\n  const pluginList = mixinPluginNames.filter(name =>\n    hasPlugin(pluginsFromOptions, name),\n  );\n\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache[key] = cls;\n  }\n  return cls;\n}\n", "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.estreeWalker = {}));\n}(this, (function (exports) { 'use strict';\n\n\t// @ts-check\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\n\t/** @typedef {{\n\t\tskip: () => void;\n\t\tremove: () => void;\n\t\treplace: (node: BaseNode) => void;\n\t}} WalkerContext */\n\n\tclass WalkerBase {\n\t\tconstructor() {\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_skip = false;\n\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_remove = false;\n\n\t\t\t/** @type {BaseNode | null} */\n\t\t\tthis.replacement = null;\n\n\t\t\t/** @type {WalkerContext} */\n\t\t\tthis.context = {\n\t\t\t\tskip: () => (this.should_skip = true),\n\t\t\t\tremove: () => (this.should_remove = true),\n\t\t\t\treplace: (node) => (this.replacement = node)\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t * @param {BaseNode} node\n\t\t */\n\t\treplace(parent, prop, index, node) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop][index] = node;\n\t\t\t\t} else {\n\t\t\t\t\tparent[prop] = node;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t */\n\t\tremove(parent, prop, index) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t\t} else {\n\t\t\t\t\tdelete parent[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => void} SyncHandler */\n\n\tclass SyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {SyncHandler} enter\n\t\t * @param {SyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {BaseNode}\n\t\t */\n\t\tvisit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => Promise<void>} AsyncHandler */\n\n\tclass AsyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {AsyncHandler} enter\n\t\t * @param {AsyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {Promise<BaseNode>}\n\t\t */\n\t\tasync visit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tawait this.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!(await this.visit(value[i], node, key, i))) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tawait this.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tawait this.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n\t/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: SyncHandler\n\t *   leave?: SyncHandler\n\t * }} walker\n\t * @returns {BaseNode}\n\t */\n\tfunction walk(ast, { enter, leave }) {\n\t\tconst instance = new SyncWalker(enter, leave);\n\t\treturn instance.visit(ast, null);\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: AsyncHandler\n\t *   leave?: AsyncHandler\n\t * }} walker\n\t * @returns {Promise<BaseNode>}\n\t */\n\tasync function asyncWalk(ast, { enter, leave }) {\n\t\tconst instance = new AsyncWalker(enter, leave);\n\t\treturn await instance.visit(ast, null);\n\t}\n\n\texports.asyncWalk = asyncWalk;\n\texports.walk = walk;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\nvar sourceMap = require('source-map');\nvar parser = require('@babel/parser');\nvar estreeWalker = require('estree-walker');\n\nfunction defaultOnError(error) {\r\n    throw error;\r\n}\r\nfunction defaultOnWarn(msg) {\r\n    console.warn(`[Vue warn] ${msg.message}`);\r\n}\r\nfunction createCompilerError(code, loc, messages, additionalMessage) {\r\n    const msg = (messages || errorMessages)[code] + (additionalMessage || ``)\r\n        ;\r\n    const error = new SyntaxError(String(msg));\r\n    error.code = code;\r\n    error.loc = loc;\r\n    return error;\r\n}\r\nconst errorMessages = {\r\n    // parse errors\r\n    [0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\r\n    [1 /* CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\r\n    [2 /* DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\r\n    [3 /* END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\r\n    [4 /* END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\r\n    [5 /* EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\r\n    [6 /* EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\r\n    [7 /* EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\r\n    [8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\r\n    [9 /* EOF_IN_TAG */]: 'Unexpected EOF in tag.',\r\n    [10 /* INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\r\n    [11 /* INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\r\n    [12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\r\n    [13 /* MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\r\n    [14 /* MISSING_END_TAG_NAME */]: 'End tag name was expected.',\r\n    [15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\r\n    [16 /* NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\r\n    [17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\r\n    [18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\r\n    [19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\r\n    [21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\r\n    [20 /* UNEXPECTED_NULL_CHARACTER */]: `Unexpected null cahracter.`,\r\n    [22 /* UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\r\n    // Vue-specific parse errors\r\n    [23 /* X_INVALID_END_TAG */]: 'Invalid end tag.',\r\n    [24 /* X_MISSING_END_TAG */]: 'Element is missing end tag.',\r\n    [25 /* X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\r\n    [26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\r\n        'Note that dynamic directive argument cannot contain spaces.',\r\n    // transform errors\r\n    [27 /* X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\r\n    [28 /* X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\r\n    [29 /* X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if.`,\r\n    [30 /* X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\r\n    [31 /* X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\r\n    [32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\r\n    [33 /* X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\r\n    [34 /* X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\r\n    [35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\r\n    [36 /* X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>.` +\r\n        `When there are multiple named slots, all slots should use <template> ` +\r\n        `syntax to avoid scope ambiguity.`,\r\n    [37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\r\n    [38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\r\n        `default slot. These children will be ignored.`,\r\n    [39 /* X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\r\n    [40 /* X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\r\n    [41 /* X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\r\n    [42 /* X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\r\n    [43 /* X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\r\n    [44 /* X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\r\n    // generic errors\r\n    [45 /* X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\r\n    [46 /* X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\r\n    [47 /* X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\r\n    [48 /* X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\r\n    // just to fullfill types\r\n    [49 /* __EXTEND_POINT__ */]: ``\r\n};\n\nconst FRAGMENT = Symbol(`Fragment` );\r\nconst TELEPORT = Symbol(`Teleport` );\r\nconst SUSPENSE = Symbol(`Suspense` );\r\nconst KEEP_ALIVE = Symbol(`KeepAlive` );\r\nconst BASE_TRANSITION = Symbol(`BaseTransition` );\r\nconst OPEN_BLOCK = Symbol(`openBlock` );\r\nconst CREATE_BLOCK = Symbol(`createBlock` );\r\nconst CREATE_ELEMENT_BLOCK = Symbol(`createElementBlock` );\r\nconst CREATE_VNODE = Symbol(`createVNode` );\r\nconst CREATE_ELEMENT_VNODE = Symbol(`createElementVNode` );\r\nconst CREATE_COMMENT = Symbol(`createCommentVNode` );\r\nconst CREATE_TEXT = Symbol(`createTextVNode` );\r\nconst CREATE_STATIC = Symbol(`createStaticVNode` );\r\nconst RESOLVE_COMPONENT = Symbol(`resolveComponent` );\r\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(`resolveDynamicComponent` );\r\nconst RESOLVE_DIRECTIVE = Symbol(`resolveDirective` );\r\nconst RESOLVE_FILTER = Symbol(`resolveFilter` );\r\nconst WITH_DIRECTIVES = Symbol(`withDirectives` );\r\nconst RENDER_LIST = Symbol(`renderList` );\r\nconst RENDER_SLOT = Symbol(`renderSlot` );\r\nconst CREATE_SLOTS = Symbol(`createSlots` );\r\nconst TO_DISPLAY_STRING = Symbol(`toDisplayString` );\r\nconst MERGE_PROPS = Symbol(`mergeProps` );\r\nconst NORMALIZE_CLASS = Symbol(`normalizeClass` );\r\nconst NORMALIZE_STYLE = Symbol(`normalizeStyle` );\r\nconst NORMALIZE_PROPS = Symbol(`normalizeProps` );\r\nconst GUARD_REACTIVE_PROPS = Symbol(`guardReactiveProps` );\r\nconst TO_HANDLERS = Symbol(`toHandlers` );\r\nconst CAMELIZE = Symbol(`camelize` );\r\nconst CAPITALIZE = Symbol(`capitalize` );\r\nconst TO_HANDLER_KEY = Symbol(`toHandlerKey` );\r\nconst SET_BLOCK_TRACKING = Symbol(`setBlockTracking` );\r\nconst PUSH_SCOPE_ID = Symbol(`pushScopeId` );\r\nconst POP_SCOPE_ID = Symbol(`popScopeId` );\r\nconst WITH_SCOPE_ID = Symbol(`withScopeId` );\r\nconst WITH_CTX = Symbol(`withCtx` );\r\nconst UNREF = Symbol(`unref` );\r\nconst IS_REF = Symbol(`isRef` );\r\nconst WITH_MEMO = Symbol(`withMemo` );\r\nconst IS_MEMO_SAME = Symbol(`isMemoSame` );\r\n// Name mapping for runtime helpers that need to be imported from 'vue' in\r\n// generated code. Make sure these are correctly exported in the runtime!\r\n// Using `any` here because TS doesn't allow symbols as index type.\r\nconst helperNameMap = {\r\n    [FRAGMENT]: `Fragment`,\r\n    [TELEPORT]: `Teleport`,\r\n    [SUSPENSE]: `Suspense`,\r\n    [KEEP_ALIVE]: `KeepAlive`,\r\n    [BASE_TRANSITION]: `BaseTransition`,\r\n    [OPEN_BLOCK]: `openBlock`,\r\n    [CREATE_BLOCK]: `createBlock`,\r\n    [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\r\n    [CREATE_VNODE]: `createVNode`,\r\n    [CREATE_ELEMENT_VNODE]: `createElementVNode`,\r\n    [CREATE_COMMENT]: `createCommentVNode`,\r\n    [CREATE_TEXT]: `createTextVNode`,\r\n    [CREATE_STATIC]: `createStaticVNode`,\r\n    [RESOLVE_COMPONENT]: `resolveComponent`,\r\n    [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\r\n    [RESOLVE_DIRECTIVE]: `resolveDirective`,\r\n    [RESOLVE_FILTER]: `resolveFilter`,\r\n    [WITH_DIRECTIVES]: `withDirectives`,\r\n    [RENDER_LIST]: `renderList`,\r\n    [RENDER_SLOT]: `renderSlot`,\r\n    [CREATE_SLOTS]: `createSlots`,\r\n    [TO_DISPLAY_STRING]: `toDisplayString`,\r\n    [MERGE_PROPS]: `mergeProps`,\r\n    [NORMALIZE_CLASS]: `normalizeClass`,\r\n    [NORMALIZE_STYLE]: `normalizeStyle`,\r\n    [NORMALIZE_PROPS]: `normalizeProps`,\r\n    [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\r\n    [TO_HANDLERS]: `toHandlers`,\r\n    [CAMELIZE]: `camelize`,\r\n    [CAPITALIZE]: `capitalize`,\r\n    [TO_HANDLER_KEY]: `toHandlerKey`,\r\n    [SET_BLOCK_TRACKING]: `setBlockTracking`,\r\n    [PUSH_SCOPE_ID]: `pushScopeId`,\r\n    [POP_SCOPE_ID]: `popScopeId`,\r\n    [WITH_SCOPE_ID]: `withScopeId`,\r\n    [WITH_CTX]: `withCtx`,\r\n    [UNREF]: `unref`,\r\n    [IS_REF]: `isRef`,\r\n    [WITH_MEMO]: `withMemo`,\r\n    [IS_MEMO_SAME]: `isMemoSame`\r\n};\r\nfunction registerRuntimeHelpers(helpers) {\r\n    Object.getOwnPropertySymbols(helpers).forEach(s => {\r\n        helperNameMap[s] = helpers[s];\r\n    });\r\n}\n\n// AST Utilities ---------------------------------------------------------------\r\n// Some expressions, e.g. sequence and conditional expressions, are never\r\n// associated with template nodes, so their source locations are just a stub.\r\n// Container types like CompoundExpression also don't need a real location.\r\nconst locStub = {\r\n    source: '',\r\n    start: { line: 1, column: 1, offset: 0 },\r\n    end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createRoot(children, loc = locStub) {\r\n    return {\r\n        type: 0 /* ROOT */,\r\n        children,\r\n        helpers: [],\r\n        components: [],\r\n        directives: [],\r\n        hoists: [],\r\n        imports: [],\r\n        cached: 0,\r\n        temps: 0,\r\n        codegenNode: undefined,\r\n        loc\r\n    };\r\n}\r\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\r\n    if (context) {\r\n        if (isBlock) {\r\n            context.helper(OPEN_BLOCK);\r\n            context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\r\n        }\r\n        else {\r\n            context.helper(getVNodeHelper(context.inSSR, isComponent));\r\n        }\r\n        if (directives) {\r\n            context.helper(WITH_DIRECTIVES);\r\n        }\r\n    }\r\n    return {\r\n        type: 13 /* VNODE_CALL */,\r\n        tag,\r\n        props,\r\n        children,\r\n        patchFlag,\r\n        dynamicProps,\r\n        directives,\r\n        isBlock,\r\n        disableTracking,\r\n        isComponent,\r\n        loc\r\n    };\r\n}\r\nfunction createArrayExpression(elements, loc = locStub) {\r\n    return {\r\n        type: 17 /* JS_ARRAY_EXPRESSION */,\r\n        loc,\r\n        elements\r\n    };\r\n}\r\nfunction createObjectExpression(properties, loc = locStub) {\r\n    return {\r\n        type: 15 /* JS_OBJECT_EXPRESSION */,\r\n        loc,\r\n        properties\r\n    };\r\n}\r\nfunction createObjectProperty(key, value) {\r\n    return {\r\n        type: 16 /* JS_PROPERTY */,\r\n        loc: locStub,\r\n        key: shared.isString(key) ? createSimpleExpression(key, true) : key,\r\n        value\r\n    };\r\n}\r\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* NOT_CONSTANT */) {\r\n    return {\r\n        type: 4 /* SIMPLE_EXPRESSION */,\r\n        loc,\r\n        content,\r\n        isStatic,\r\n        constType: isStatic ? 3 /* CAN_STRINGIFY */ : constType\r\n    };\r\n}\r\nfunction createInterpolation(content, loc) {\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        loc,\r\n        content: shared.isString(content)\r\n            ? createSimpleExpression(content, false, loc)\r\n            : content\r\n    };\r\n}\r\nfunction createCompoundExpression(children, loc = locStub) {\r\n    return {\r\n        type: 8 /* COMPOUND_EXPRESSION */,\r\n        loc,\r\n        children\r\n    };\r\n}\r\nfunction createCallExpression(callee, args = [], loc = locStub) {\r\n    return {\r\n        type: 14 /* JS_CALL_EXPRESSION */,\r\n        loc,\r\n        callee,\r\n        arguments: args\r\n    };\r\n}\r\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\r\n    return {\r\n        type: 18 /* JS_FUNCTION_EXPRESSION */,\r\n        params,\r\n        returns,\r\n        newline,\r\n        isSlot,\r\n        loc\r\n    };\r\n}\r\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\r\n    return {\r\n        type: 19 /* JS_CONDITIONAL_EXPRESSION */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        newline,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createCacheExpression(index, value, isVNode = false) {\r\n    return {\r\n        type: 20 /* JS_CACHE_EXPRESSION */,\r\n        index,\r\n        value,\r\n        isVNode,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createBlockStatement(body) {\r\n    return {\r\n        type: 21 /* JS_BLOCK_STATEMENT */,\r\n        body,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createTemplateLiteral(elements) {\r\n    return {\r\n        type: 22 /* JS_TEMPLATE_LITERAL */,\r\n        elements,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createIfStatement(test, consequent, alternate) {\r\n    return {\r\n        type: 23 /* JS_IF_STATEMENT */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createAssignmentExpression(left, right) {\r\n    return {\r\n        type: 24 /* JS_ASSIGNMENT_EXPRESSION */,\r\n        left,\r\n        right,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createSequenceExpression(expressions) {\r\n    return {\r\n        type: 25 /* JS_SEQUENCE_EXPRESSION */,\r\n        expressions,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createReturnStatement(returns) {\r\n    return {\r\n        type: 26 /* JS_RETURN_STATEMENT */,\r\n        returns,\r\n        loc: locStub\r\n    };\r\n}\n\nconst isStaticExp = (p) => p.type === 4 /* SIMPLE_EXPRESSION */ && p.isStatic;\r\nconst isBuiltInType = (tag, expected) => tag === expected || tag === shared.hyphenate(expected);\r\nfunction isCoreComponent(tag) {\r\n    if (isBuiltInType(tag, 'Teleport')) {\r\n        return TELEPORT;\r\n    }\r\n    else if (isBuiltInType(tag, 'Suspense')) {\r\n        return SUSPENSE;\r\n    }\r\n    else if (isBuiltInType(tag, 'KeepAlive')) {\r\n        return KEEP_ALIVE;\r\n    }\r\n    else if (isBuiltInType(tag, 'BaseTransition')) {\r\n        return BASE_TRANSITION;\r\n    }\r\n}\r\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\r\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\r\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\r\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\r\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\r\n/**\r\n * Simple lexer to check if an expression is a member expression. This is\r\n * lax and only checks validity at the root level (i.e. does not validate exps\r\n * inside square brackets), but it's ok since these are only used on template\r\n * expressions and false positives are invalid expressions in the first place.\r\n */\r\nconst isMemberExpression = (path) => {\r\n    // remove whitespaces around . or [ first\r\n    path = path.trim().replace(whitespaceRE, s => s.trim());\r\n    let state = 0 /* inMemberExp */;\r\n    let stateStack = [];\r\n    let currentOpenBracketCount = 0;\r\n    let currentOpenParensCount = 0;\r\n    let currentStringType = null;\r\n    for (let i = 0; i < path.length; i++) {\r\n        const char = path.charAt(i);\r\n        switch (state) {\r\n            case 0 /* inMemberExp */:\r\n                if (char === '[') {\r\n                    stateStack.push(state);\r\n                    state = 1 /* inBrackets */;\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === '(') {\r\n                    stateStack.push(state);\r\n                    state = 2 /* inParens */;\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\r\n                    return false;\r\n                }\r\n                break;\r\n            case 1 /* inBrackets */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `[`) {\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === `]`) {\r\n                    if (!--currentOpenBracketCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 2 /* inParens */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `(`) {\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (char === `)`) {\r\n                    // if the exp ends as a call then it should not be considered valid\r\n                    if (i === path.length - 1) {\r\n                        return false;\r\n                    }\r\n                    if (!--currentOpenParensCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 3 /* inString */:\r\n                if (char === currentStringType) {\r\n                    state = stateStack.pop();\r\n                    currentStringType = null;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    return !currentOpenBracketCount && !currentOpenParensCount;\r\n};\r\nfunction getInnerRange(loc, offset, length) {\r\n    const source = loc.source.substr(offset, length);\r\n    const newLoc = {\r\n        source,\r\n        start: advancePositionWithClone(loc.start, loc.source, offset),\r\n        end: loc.end\r\n    };\r\n    if (length != null) {\r\n        newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\r\n    }\r\n    return newLoc;\r\n}\r\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\r\n    return advancePositionWithMutation(shared.extend({}, pos), source, numberOfCharacters);\r\n}\r\n// advance by mutation without cloning (for performance reasons), since this\r\n// gets called a lot in the parser\r\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\r\n    let linesCount = 0;\r\n    let lastNewLinePos = -1;\r\n    for (let i = 0; i < numberOfCharacters; i++) {\r\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\r\n            linesCount++;\r\n            lastNewLinePos = i;\r\n        }\r\n    }\r\n    pos.offset += numberOfCharacters;\r\n    pos.line += linesCount;\r\n    pos.column =\r\n        lastNewLinePos === -1\r\n            ? pos.column + numberOfCharacters\r\n            : numberOfCharacters - lastNewLinePos;\r\n    return pos;\r\n}\r\nfunction assert(condition, msg) {\r\n    /* istanbul ignore if */\r\n    if (!condition) {\r\n        throw new Error(msg || `unexpected compiler condition`);\r\n    }\r\n}\r\nfunction findDir(node, name, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 7 /* DIRECTIVE */ &&\r\n            (allowEmpty || p.exp) &&\r\n            (shared.isString(name) ? p.name === name : name.test(p.name))) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (dynamicOnly)\r\n                continue;\r\n            if (p.name === name && (p.value || allowEmpty)) {\r\n                return p;\r\n            }\r\n        }\r\n        else if (p.name === 'bind' &&\r\n            (p.exp || allowEmpty) &&\r\n            isBindKey(p.arg, name)) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction isBindKey(arg, name) {\r\n    return !!(arg && isStaticExp(arg) && arg.content === name);\r\n}\r\nfunction hasDynamicKeyVBind(node) {\r\n    return node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n        p.name === 'bind' &&\r\n        (!p.arg || // v-bind=\"obj\"\r\n            p.arg.type !== 4 /* SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\r\n            !p.arg.isStatic) // v-bind:[foo]\r\n    );\r\n}\r\nfunction isText(node) {\r\n    return node.type === 5 /* INTERPOLATION */ || node.type === 2 /* TEXT */;\r\n}\r\nfunction isVSlot(p) {\r\n    return p.type === 7 /* DIRECTIVE */ && p.name === 'slot';\r\n}\r\nfunction isTemplateNode(node) {\r\n    return (node.type === 1 /* ELEMENT */ && node.tagType === 3 /* TEMPLATE */);\r\n}\r\nfunction isSlotOutlet(node) {\r\n    return node.type === 1 /* ELEMENT */ && node.tagType === 2 /* SLOT */;\r\n}\r\nfunction getVNodeHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\r\n}\r\nfunction getVNodeBlockHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\r\n}\r\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\r\nfunction getUnnormalizedProps(props, callPath = []) {\r\n    if (props &&\r\n        !shared.isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const callee = props.callee;\r\n        if (!shared.isString(callee) && propsHelperSet.has(callee)) {\r\n            return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\r\n        }\r\n    }\r\n    return [props, callPath];\r\n}\r\nfunction injectProp(node, prop, context) {\r\n    let propsWithInjection;\r\n    const originalProps = node.type === 13 /* VNODE_CALL */ ? node.props : node.arguments[2];\r\n    /**\r\n     * 1. mergeProps(...)\r\n     * 2. toHandlers(...)\r\n     * 3. normalizeProps(...)\r\n     * 4. normalizeProps(guardReactiveProps(...))\r\n     *\r\n     * we need to get the real props before normalization\r\n     */\r\n    let props = originalProps;\r\n    let callPath = [];\r\n    let parentCall;\r\n    if (props &&\r\n        !shared.isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const ret = getUnnormalizedProps(props);\r\n        props = ret[0];\r\n        callPath = ret[1];\r\n        parentCall = callPath[callPath.length - 1];\r\n    }\r\n    if (props == null || shared.isString(props)) {\r\n        propsWithInjection = createObjectExpression([prop]);\r\n    }\r\n    else if (props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        // merged props... add ours\r\n        // only inject key to object literal if it's the first argument so that\r\n        // if doesn't override user provided keys\r\n        const first = props.arguments[0];\r\n        if (!shared.isString(first) && first.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n            first.properties.unshift(prop);\r\n        }\r\n        else {\r\n            if (props.callee === TO_HANDLERS) {\r\n                // #2366\r\n                propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n                    createObjectExpression([prop]),\r\n                    props\r\n                ]);\r\n            }\r\n            else {\r\n                props.arguments.unshift(createObjectExpression([prop]));\r\n            }\r\n        }\r\n        !propsWithInjection && (propsWithInjection = props);\r\n    }\r\n    else if (props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        let alreadyExists = false;\r\n        // check existing key to avoid overriding user provided keys\r\n        if (prop.key.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            const propKeyName = prop.key.content;\r\n            alreadyExists = props.properties.some(p => p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                p.key.content === propKeyName);\r\n        }\r\n        if (!alreadyExists) {\r\n            props.properties.unshift(prop);\r\n        }\r\n        propsWithInjection = props;\r\n    }\r\n    else {\r\n        // single v-bind with expression, return a merged replacement\r\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n            createObjectExpression([prop]),\r\n            props\r\n        ]);\r\n        // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\r\n        // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\r\n        // the `guardReactiveProps` will no longer be needed\r\n        if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\r\n            parentCall = callPath[callPath.length - 2];\r\n        }\r\n    }\r\n    if (node.type === 13 /* VNODE_CALL */) {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.props = propsWithInjection;\r\n        }\r\n    }\r\n    else {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.arguments[2] = propsWithInjection;\r\n        }\r\n    }\r\n}\r\nfunction toValidAssetId(name, type) {\r\n    return `_${type}_${name.replace(/[^\\w]/g, '_')}`;\r\n}\r\n// Check if a node contains expressions that reference current context scope ids\r\nfunction hasScopeRef(node, ids) {\r\n    if (!node || Object.keys(ids).length === 0) {\r\n        return false;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            for (let i = 0; i < node.props.length; i++) {\r\n                const p = node.props[i];\r\n                if (p.type === 7 /* DIRECTIVE */ &&\r\n                    (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\r\n                    return true;\r\n                }\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 11 /* FOR */:\r\n            if (hasScopeRef(node.source, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 9 /* IF */:\r\n            return node.branches.some(b => hasScopeRef(b, ids));\r\n        case 10 /* IF_BRANCH */:\r\n            if (hasScopeRef(node.condition, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return (!node.isStatic &&\r\n                isSimpleIdentifier(node.content) &&\r\n                !!ids[node.content]);\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            return node.children.some(c => shared.isObject(c) && hasScopeRef(c, ids));\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return hasScopeRef(node.content, ids);\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return false;\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getMemoedVNodeCall(node) {\r\n    if (node.type === 14 /* JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\r\n        return node.arguments[1].returns;\r\n    }\r\n    else {\r\n        return node;\r\n    }\r\n}\r\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\r\n    if (!node.isBlock) {\r\n        node.isBlock = true;\r\n        removeHelper(getVNodeHelper(inSSR, node.isComponent));\r\n        helper(OPEN_BLOCK);\r\n        helper(getVNodeBlockHelper(inSSR, node.isComponent));\r\n    }\r\n}\n\nconst deprecationData = {\r\n    [\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */]: {\r\n        message: `Platform-native elements with \"is\" prop will no longer be ` +\r\n            `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\r\n            `prefixed with \"vue:\".`,\r\n        link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`\r\n    },\r\n    [\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */]: {\r\n        message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\r\n            `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\r\n            `\\`v-model:${key}\\`.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-model.html`\r\n    },\r\n    [\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */]: {\r\n        message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\r\n            `Vue 3 will automatically set a binding as DOM property when appropriate.`\r\n    },\r\n    [\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */]: {\r\n        message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\r\n            `object spread: it will now overwrite an existing non-mergeable attribute ` +\r\n            `that appears before v-bind in the case of conflict. ` +\r\n            `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\r\n            `You can also suppress this warning if the usage is intended.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-bind.html`\r\n    },\r\n    [\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */]: {\r\n        message: `.native modifier for v-on has been removed as is no longer necessary.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`\r\n    },\r\n    [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\r\n        message: `v-if / v-for precedence when used on the same element has changed ` +\r\n            `in Vue 3: v-if now takes higher precedence and will no longer have ` +\r\n            `access to v-for scope variables. It is best to avoid the ambiguity ` +\r\n            `with <template> tags or use a computed property that filters v-for ` +\r\n            `data source.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`\r\n    },\r\n    [\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */]: {\r\n        message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +\r\n            `Consider using function refs or refactor to avoid ref usage altogether.`,\r\n        link: `https://v3.vuejs.org/guide/migration/array-refs.html`\r\n    },\r\n    [\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */]: {\r\n        message: `<template> with no special directives will render as a native template ` +\r\n            `element instead of its inner content in Vue 3.`\r\n    },\r\n    [\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */]: {\r\n        message: `\"inline-template\" has been removed in Vue 3.`,\r\n        link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`\r\n    },\r\n    [\"COMPILER_FILTER\" /* COMPILER_FILTERS */]: {\r\n        message: `filters have been removed in Vue 3. ` +\r\n            `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\r\n            `Use method calls or computed properties instead.`,\r\n        link: `https://v3.vuejs.org/guide/migration/filters.html`\r\n    }\r\n};\r\nfunction getCompatValue(key, context) {\r\n    const config = context.options\r\n        ? context.options.compatConfig\r\n        : context.compatConfig;\r\n    const value = config && config[key];\r\n    if (key === 'MODE') {\r\n        return value || 3; // compiler defaults to v3 behavior\r\n    }\r\n    else {\r\n        return value;\r\n    }\r\n}\r\nfunction isCompatEnabled(key, context) {\r\n    const mode = getCompatValue('MODE', context);\r\n    const value = getCompatValue(key, context);\r\n    // in v3 mode, only enable if explicitly set to true\r\n    // otherwise enable for any non-false value\r\n    return mode === 3 ? value === true : value !== false;\r\n}\r\nfunction checkCompatEnabled(key, context, loc, ...args) {\r\n    const enabled = isCompatEnabled(key, context);\r\n    if (enabled) {\r\n        warnDeprecation(key, context, loc, ...args);\r\n    }\r\n    return enabled;\r\n}\r\nfunction warnDeprecation(key, context, loc, ...args) {\r\n    const val = getCompatValue(key, context);\r\n    if (val === 'suppress-warning') {\r\n        return;\r\n    }\r\n    const { message, link } = deprecationData[key];\r\n    const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\r\n    const err = new SyntaxError(msg);\r\n    err.code = key;\r\n    if (loc)\r\n        err.loc = loc;\r\n    context.onWarn(err);\r\n}\n\n// The default decoder only provides escapes for characters reserved as part of\r\n// the template syntax, and is only used if the custom renderer did not provide\r\n// a platform-specific decoder.\r\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\r\nconst decodeMap = {\r\n    gt: '>',\r\n    lt: '<',\r\n    amp: '&',\r\n    apos: \"'\",\r\n    quot: '\"'\r\n};\r\nconst defaultParserOptions = {\r\n    delimiters: [`{{`, `}}`],\r\n    getNamespace: () => 0 /* HTML */,\r\n    getTextMode: () => 0 /* DATA */,\r\n    isVoidTag: shared.NO,\r\n    isPreTag: shared.NO,\r\n    isCustomElement: shared.NO,\r\n    decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\r\n    onError: defaultOnError,\r\n    onWarn: defaultOnWarn,\r\n    comments: true\r\n};\r\nfunction baseParse(content, options = {}) {\r\n    const context = createParserContext(content, options);\r\n    const start = getCursor(context);\r\n    return createRoot(parseChildren(context, 0 /* DATA */, []), getSelection(context, start));\r\n}\r\nfunction createParserContext(content, rawOptions) {\r\n    const options = shared.extend({}, defaultParserOptions);\r\n    let key;\r\n    for (key in rawOptions) {\r\n        // @ts-ignore\r\n        options[key] =\r\n            rawOptions[key] === undefined\r\n                ? defaultParserOptions[key]\r\n                : rawOptions[key];\r\n    }\r\n    return {\r\n        options,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        originalSource: content,\r\n        source: content,\r\n        inPre: false,\r\n        inVPre: false,\r\n        onWarn: options.onWarn\r\n    };\r\n}\r\nfunction parseChildren(context, mode, ancestors) {\r\n    const parent = last(ancestors);\r\n    const ns = parent ? parent.ns : 0 /* HTML */;\r\n    const nodes = [];\r\n    while (!isEnd(context, mode, ancestors)) {\r\n        const s = context.source;\r\n        let node = undefined;\r\n        if (mode === 0 /* DATA */ || mode === 1 /* RCDATA */) {\r\n            if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\r\n                // '{{'\r\n                node = parseInterpolation(context, mode);\r\n            }\r\n            else if (mode === 0 /* DATA */ && s[0] === '<') {\r\n                // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\r\n                if (s.length === 1) {\r\n                    emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 1);\r\n                }\r\n                else if (s[1] === '!') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\r\n                    if (startsWith(s, '<!--')) {\r\n                        node = parseComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<!DOCTYPE')) {\r\n                        // Ignore DOCTYPE by a limitation.\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<![CDATA[')) {\r\n                        if (ns !== 0 /* HTML */) {\r\n                            node = parseCDATA(context, ancestors);\r\n                        }\r\n                        else {\r\n                            emitError(context, 1 /* CDATA_IN_HTML_CONTENT */);\r\n                            node = parseBogusComment(context);\r\n                        }\r\n                    }\r\n                    else {\r\n                        emitError(context, 11 /* INCORRECTLY_OPENED_COMMENT */);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (s[1] === '/') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\r\n                    if (s.length === 2) {\r\n                        emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 2);\r\n                    }\r\n                    else if (s[2] === '>') {\r\n                        emitError(context, 14 /* MISSING_END_TAG_NAME */, 2);\r\n                        advanceBy(context, 3);\r\n                        continue;\r\n                    }\r\n                    else if (/[a-z]/i.test(s[2])) {\r\n                        emitError(context, 23 /* X_INVALID_END_TAG */);\r\n                        parseTag(context, 1 /* End */, parent);\r\n                        continue;\r\n                    }\r\n                    else {\r\n                        emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (/[a-z]/i.test(s[1])) {\r\n                    node = parseElement(context, ancestors);\r\n                    // 2.x <template> with no directive compat\r\n                    if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context) &&\r\n                        node &&\r\n                        node.tag === 'template' &&\r\n                        !node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n                            isSpecialTemplateDirective(p.name))) {\r\n                        warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context, node.loc);\r\n                        node = node.children;\r\n                    }\r\n                }\r\n                else if (s[1] === '?') {\r\n                    emitError(context, 21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\r\n                    node = parseBogusComment(context);\r\n                }\r\n                else {\r\n                    emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\r\n                }\r\n            }\r\n        }\r\n        if (!node) {\r\n            node = parseText(context, mode);\r\n        }\r\n        if (shared.isArray(node)) {\r\n            for (let i = 0; i < node.length; i++) {\r\n                pushNode(nodes, node[i]);\r\n            }\r\n        }\r\n        else {\r\n            pushNode(nodes, node);\r\n        }\r\n    }\r\n    // Whitespace handling strategy like v2\r\n    let removedWhitespace = false;\r\n    if (mode !== 2 /* RAWTEXT */ && mode !== 1 /* RCDATA */) {\r\n        const shouldCondense = context.options.whitespace !== 'preserve';\r\n        for (let i = 0; i < nodes.length; i++) {\r\n            const node = nodes[i];\r\n            if (!context.inPre && node.type === 2 /* TEXT */) {\r\n                if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\r\n                    const prev = nodes[i - 1];\r\n                    const next = nodes[i + 1];\r\n                    // Remove if:\r\n                    // - the whitespace is the first or last node, or:\r\n                    // - (condense mode) the whitespace is adjacent to a comment, or:\r\n                    // - (condense mode) the whitespace is between two elements AND contains newline\r\n                    if (!prev ||\r\n                        !next ||\r\n                        (shouldCondense &&\r\n                            (prev.type === 3 /* COMMENT */ ||\r\n                                next.type === 3 /* COMMENT */ ||\r\n                                (prev.type === 1 /* ELEMENT */ &&\r\n                                    next.type === 1 /* ELEMENT */ &&\r\n                                    /[\\r\\n]/.test(node.content))))) {\r\n                        removedWhitespace = true;\r\n                        nodes[i] = null;\r\n                    }\r\n                    else {\r\n                        // Otherwise, the whitespace is condensed into a single space\r\n                        node.content = ' ';\r\n                    }\r\n                }\r\n                else if (shouldCondense) {\r\n                    // in condense mode, consecutive whitespaces in text are condensed\r\n                    // down to a single space.\r\n                    node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\r\n                }\r\n            }\r\n            // Remove comment nodes if desired by configuration.\r\n            else if (node.type === 3 /* COMMENT */ && !context.options.comments) {\r\n                removedWhitespace = true;\r\n                nodes[i] = null;\r\n            }\r\n        }\r\n        if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\r\n            // remove leading newline per html spec\r\n            // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\r\n            const first = nodes[0];\r\n            if (first && first.type === 2 /* TEXT */) {\r\n                first.content = first.content.replace(/^\\r?\\n/, '');\r\n            }\r\n        }\r\n    }\r\n    return removedWhitespace ? nodes.filter(Boolean) : nodes;\r\n}\r\nfunction pushNode(nodes, node) {\r\n    if (node.type === 2 /* TEXT */) {\r\n        const prev = last(nodes);\r\n        // Merge if both this and the previous node are text and those are\r\n        // consecutive. This happens for cases like \"a < b\".\r\n        if (prev &&\r\n            prev.type === 2 /* TEXT */ &&\r\n            prev.loc.end.offset === node.loc.start.offset) {\r\n            prev.content += node.content;\r\n            prev.loc.end = node.loc.end;\r\n            prev.loc.source += node.loc.source;\r\n            return;\r\n        }\r\n    }\r\n    nodes.push(node);\r\n}\r\nfunction parseCDATA(context, ancestors) {\r\n    advanceBy(context, 9);\r\n    const nodes = parseChildren(context, 3 /* CDATA */, ancestors);\r\n    if (context.source.length === 0) {\r\n        emitError(context, 6 /* EOF_IN_CDATA */);\r\n    }\r\n    else {\r\n        advanceBy(context, 3);\r\n    }\r\n    return nodes;\r\n}\r\nfunction parseComment(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    // Regular comment.\r\n    const match = /--(\\!)?>/.exec(context.source);\r\n    if (!match) {\r\n        content = context.source.slice(4);\r\n        advanceBy(context, context.source.length);\r\n        emitError(context, 7 /* EOF_IN_COMMENT */);\r\n    }\r\n    else {\r\n        if (match.index <= 3) {\r\n            emitError(context, 0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\r\n        }\r\n        if (match[1]) {\r\n            emitError(context, 10 /* INCORRECTLY_CLOSED_COMMENT */);\r\n        }\r\n        content = context.source.slice(4, match.index);\r\n        // Advancing with reporting nested comments.\r\n        const s = context.source.slice(0, match.index);\r\n        let prevIndex = 1, nestedIndex = 0;\r\n        while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\r\n            advanceBy(context, nestedIndex - prevIndex + 1);\r\n            if (nestedIndex + 4 < s.length) {\r\n                emitError(context, 16 /* NESTED_COMMENT */);\r\n            }\r\n            prevIndex = nestedIndex + 1;\r\n        }\r\n        advanceBy(context, match.index + match[0].length - prevIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseBogusComment(context) {\r\n    const start = getCursor(context);\r\n    const contentStart = context.source[1] === '?' ? 1 : 2;\r\n    let content;\r\n    const closeIndex = context.source.indexOf('>');\r\n    if (closeIndex === -1) {\r\n        content = context.source.slice(contentStart);\r\n        advanceBy(context, context.source.length);\r\n    }\r\n    else {\r\n        content = context.source.slice(contentStart, closeIndex);\r\n        advanceBy(context, closeIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseElement(context, ancestors) {\r\n    // Start tag.\r\n    const wasInPre = context.inPre;\r\n    const wasInVPre = context.inVPre;\r\n    const parent = last(ancestors);\r\n    const element = parseTag(context, 0 /* Start */, parent);\r\n    const isPreBoundary = context.inPre && !wasInPre;\r\n    const isVPreBoundary = context.inVPre && !wasInVPre;\r\n    if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\r\n        // #4030 self-closing <pre> tag\r\n        if (isPreBoundary) {\r\n            context.inPre = false;\r\n        }\r\n        if (isVPreBoundary) {\r\n            context.inVPre = false;\r\n        }\r\n        return element;\r\n    }\r\n    // Children.\r\n    ancestors.push(element);\r\n    const mode = context.options.getTextMode(element, parent);\r\n    const children = parseChildren(context, mode, ancestors);\r\n    ancestors.pop();\r\n    // 2.x inline-template compat\r\n    {\r\n        const inlineTemplateProp = element.props.find(p => p.type === 6 /* ATTRIBUTE */ && p.name === 'inline-template');\r\n        if (inlineTemplateProp &&\r\n            checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\r\n            const loc = getSelection(context, element.loc.end);\r\n            inlineTemplateProp.value = {\r\n                type: 2 /* TEXT */,\r\n                content: loc.source,\r\n                loc\r\n            };\r\n        }\r\n    }\r\n    element.children = children;\r\n    // End tag.\r\n    if (startsWithEndTagOpen(context.source, element.tag)) {\r\n        parseTag(context, 1 /* End */, parent);\r\n    }\r\n    else {\r\n        emitError(context, 24 /* X_MISSING_END_TAG */, 0, element.loc.start);\r\n        if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\r\n            const first = children[0];\r\n            if (first && startsWith(first.loc.source, '<!--')) {\r\n                emitError(context, 8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\r\n            }\r\n        }\r\n    }\r\n    element.loc = getSelection(context, element.loc.start);\r\n    if (isPreBoundary) {\r\n        context.inPre = false;\r\n    }\r\n    if (isVPreBoundary) {\r\n        context.inVPre = false;\r\n    }\r\n    return element;\r\n}\r\nconst isSpecialTemplateDirective = /*#__PURE__*/ shared.makeMap(`if,else,else-if,for,slot`);\r\nfunction parseTag(context, type, parent) {\r\n    // Tag open.\r\n    const start = getCursor(context);\r\n    const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\r\n    const tag = match[1];\r\n    const ns = context.options.getNamespace(tag, parent);\r\n    advanceBy(context, match[0].length);\r\n    advanceSpaces(context);\r\n    // save current state in case we need to re-parse attributes with v-pre\r\n    const cursor = getCursor(context);\r\n    const currentSource = context.source;\r\n    // check <pre> tag\r\n    if (context.options.isPreTag(tag)) {\r\n        context.inPre = true;\r\n    }\r\n    // Attributes.\r\n    let props = parseAttributes(context, type);\r\n    // check v-pre\r\n    if (type === 0 /* Start */ &&\r\n        !context.inVPre &&\r\n        props.some(p => p.type === 7 /* DIRECTIVE */ && p.name === 'pre')) {\r\n        context.inVPre = true;\r\n        // reset context\r\n        shared.extend(context, cursor);\r\n        context.source = currentSource;\r\n        // re-parse attrs and filter out v-pre itself\r\n        props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\r\n    }\r\n    // Tag close.\r\n    let isSelfClosing = false;\r\n    if (context.source.length === 0) {\r\n        emitError(context, 9 /* EOF_IN_TAG */);\r\n    }\r\n    else {\r\n        isSelfClosing = startsWith(context.source, '/>');\r\n        if (type === 1 /* End */ && isSelfClosing) {\r\n            emitError(context, 4 /* END_TAG_WITH_TRAILING_SOLIDUS */);\r\n        }\r\n        advanceBy(context, isSelfClosing ? 2 : 1);\r\n    }\r\n    if (type === 1 /* End */) {\r\n        return;\r\n    }\r\n    // 2.x deprecation checks\r\n    if (isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\r\n        let hasIf = false;\r\n        let hasFor = false;\r\n        for (let i = 0; i < props.length; i++) {\r\n            const p = props[i];\r\n            if (p.type === 7 /* DIRECTIVE */) {\r\n                if (p.name === 'if') {\r\n                    hasIf = true;\r\n                }\r\n                else if (p.name === 'for') {\r\n                    hasFor = true;\r\n                }\r\n            }\r\n            if (hasIf && hasFor) {\r\n                warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\r\n            }\r\n        }\r\n    }\r\n    let tagType = 0 /* ELEMENT */;\r\n    if (!context.inVPre) {\r\n        if (tag === 'slot') {\r\n            tagType = 2 /* SLOT */;\r\n        }\r\n        else if (tag === 'template') {\r\n            if (props.some(p => p.type === 7 /* DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\r\n                tagType = 3 /* TEMPLATE */;\r\n            }\r\n        }\r\n        else if (isComponent(tag, props, context)) {\r\n            tagType = 1 /* COMPONENT */;\r\n        }\r\n    }\r\n    return {\r\n        type: 1 /* ELEMENT */,\r\n        ns,\r\n        tag,\r\n        tagType,\r\n        props,\r\n        isSelfClosing,\r\n        children: [],\r\n        loc: getSelection(context, start),\r\n        codegenNode: undefined // to be created during transform phase\r\n    };\r\n}\r\nfunction isComponent(tag, props, context) {\r\n    const options = context.options;\r\n    if (options.isCustomElement(tag)) {\r\n        return false;\r\n    }\r\n    if (tag === 'component' ||\r\n        /^[A-Z]/.test(tag) ||\r\n        isCoreComponent(tag) ||\r\n        (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\r\n        (options.isNativeTag && !options.isNativeTag(tag))) {\r\n        return true;\r\n    }\r\n    // at this point the tag should be a native tag, but check for potential \"is\"\r\n    // casting\r\n    for (let i = 0; i < props.length; i++) {\r\n        const p = props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.name === 'is' && p.value) {\r\n                if (p.value.content.startsWith('vue:')) {\r\n                    return true;\r\n                }\r\n                else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            // directive\r\n            // v-is (TODO Deprecate)\r\n            if (p.name === 'is') {\r\n                return true;\r\n            }\r\n            else if (\r\n            // :is on plain element - only treat as component in compat mode\r\n            p.name === 'bind' &&\r\n                isBindKey(p.arg, 'is') &&\r\n                true &&\r\n                checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseAttributes(context, type) {\r\n    const props = [];\r\n    const attributeNames = new Set();\r\n    while (context.source.length > 0 &&\r\n        !startsWith(context.source, '>') &&\r\n        !startsWith(context.source, '/>')) {\r\n        if (startsWith(context.source, '/')) {\r\n            emitError(context, 22 /* UNEXPECTED_SOLIDUS_IN_TAG */);\r\n            advanceBy(context, 1);\r\n            advanceSpaces(context);\r\n            continue;\r\n        }\r\n        if (type === 1 /* End */) {\r\n            emitError(context, 3 /* END_TAG_WITH_ATTRIBUTES */);\r\n        }\r\n        const attr = parseAttribute(context, attributeNames);\r\n        if (type === 0 /* Start */) {\r\n            props.push(attr);\r\n        }\r\n        if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\r\n            emitError(context, 15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\r\n        }\r\n        advanceSpaces(context);\r\n    }\r\n    return props;\r\n}\r\nfunction parseAttribute(context, nameSet) {\r\n    // Name.\r\n    const start = getCursor(context);\r\n    const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\r\n    const name = match[0];\r\n    if (nameSet.has(name)) {\r\n        emitError(context, 2 /* DUPLICATE_ATTRIBUTE */);\r\n    }\r\n    nameSet.add(name);\r\n    if (name[0] === '=') {\r\n        emitError(context, 19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\r\n    }\r\n    {\r\n        const pattern = /[\"'<]/g;\r\n        let m;\r\n        while ((m = pattern.exec(name))) {\r\n            emitError(context, 17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\r\n        }\r\n    }\r\n    advanceBy(context, name.length);\r\n    // Value\r\n    let value = undefined;\r\n    if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\r\n        advanceSpaces(context);\r\n        advanceBy(context, 1);\r\n        advanceSpaces(context);\r\n        value = parseAttributeValue(context);\r\n        if (!value) {\r\n            emitError(context, 13 /* MISSING_ATTRIBUTE_VALUE */);\r\n        }\r\n    }\r\n    const loc = getSelection(context, start);\r\n    if (!context.inVPre && /^(v-|:|\\.|@|#)/.test(name)) {\r\n        const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\r\n        let isPropShorthand = startsWith(name, '.');\r\n        let dirName = match[1] ||\r\n            (isPropShorthand || startsWith(name, ':')\r\n                ? 'bind'\r\n                : startsWith(name, '@')\r\n                    ? 'on'\r\n                    : 'slot');\r\n        let arg;\r\n        if (match[2]) {\r\n            const isSlot = dirName === 'slot';\r\n            const startOffset = name.lastIndexOf(match[2]);\r\n            const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\r\n            let content = match[2];\r\n            let isStatic = true;\r\n            if (content.startsWith('[')) {\r\n                isStatic = false;\r\n                if (!content.endsWith(']')) {\r\n                    emitError(context, 26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\r\n                }\r\n                content = content.substr(1, content.length - 2);\r\n            }\r\n            else if (isSlot) {\r\n                // #1241 special case for v-slot: vuetify relies extensively on slot\r\n                // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\r\n                // supports such usage so we are keeping it consistent with 2.x.\r\n                content += match[3] || '';\r\n            }\r\n            arg = {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content,\r\n                isStatic,\r\n                constType: isStatic\r\n                    ? 3 /* CAN_STRINGIFY */\r\n                    : 0 /* NOT_CONSTANT */,\r\n                loc\r\n            };\r\n        }\r\n        if (value && value.isQuoted) {\r\n            const valueLoc = value.loc;\r\n            valueLoc.start.offset++;\r\n            valueLoc.start.column++;\r\n            valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\r\n            valueLoc.source = valueLoc.source.slice(1, -1);\r\n        }\r\n        const modifiers = match[3] ? match[3].substr(1).split('.') : [];\r\n        if (isPropShorthand)\r\n            modifiers.push('prop');\r\n        // 2.x compat v-bind:foo.sync -> v-model:foo\r\n        if (dirName === 'bind' && arg) {\r\n            if (modifiers.includes('sync') &&\r\n                checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\r\n                dirName = 'model';\r\n                modifiers.splice(modifiers.indexOf('sync'), 1);\r\n            }\r\n            if (modifiers.includes('prop')) {\r\n                checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */, context, loc);\r\n            }\r\n        }\r\n        return {\r\n            type: 7 /* DIRECTIVE */,\r\n            name: dirName,\r\n            exp: value && {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content: value.content,\r\n                isStatic: false,\r\n                // Treat as non-constant by default. This can be potentially set to\r\n                // other values by `transformExpression` to make it eligible for hoisting.\r\n                constType: 0 /* NOT_CONSTANT */,\r\n                loc: value.loc\r\n            },\r\n            arg,\r\n            modifiers,\r\n            loc\r\n        };\r\n    }\r\n    return {\r\n        type: 6 /* ATTRIBUTE */,\r\n        name,\r\n        value: value && {\r\n            type: 2 /* TEXT */,\r\n            content: value.content,\r\n            loc: value.loc\r\n        },\r\n        loc\r\n    };\r\n}\r\nfunction parseAttributeValue(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    const quote = context.source[0];\r\n    const isQuoted = quote === `\"` || quote === `'`;\r\n    if (isQuoted) {\r\n        // Quoted value.\r\n        advanceBy(context, 1);\r\n        const endIndex = context.source.indexOf(quote);\r\n        if (endIndex === -1) {\r\n            content = parseTextData(context, context.source.length, 4 /* ATTRIBUTE_VALUE */);\r\n        }\r\n        else {\r\n            content = parseTextData(context, endIndex, 4 /* ATTRIBUTE_VALUE */);\r\n            advanceBy(context, 1);\r\n        }\r\n    }\r\n    else {\r\n        // Unquoted\r\n        const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\r\n        if (!match) {\r\n            return undefined;\r\n        }\r\n        const unexpectedChars = /[\"'<=`]/g;\r\n        let m;\r\n        while ((m = unexpectedChars.exec(match[0]))) {\r\n            emitError(context, 18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\r\n        }\r\n        content = parseTextData(context, match[0].length, 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n    return { content, isQuoted, loc: getSelection(context, start) };\r\n}\r\nfunction parseInterpolation(context, mode) {\r\n    const [open, close] = context.options.delimiters;\r\n    const closeIndex = context.source.indexOf(close, open.length);\r\n    if (closeIndex === -1) {\r\n        emitError(context, 25 /* X_MISSING_INTERPOLATION_END */);\r\n        return undefined;\r\n    }\r\n    const start = getCursor(context);\r\n    advanceBy(context, open.length);\r\n    const innerStart = getCursor(context);\r\n    const innerEnd = getCursor(context);\r\n    const rawContentLength = closeIndex - open.length;\r\n    const rawContent = context.source.slice(0, rawContentLength);\r\n    const preTrimContent = parseTextData(context, rawContentLength, mode);\r\n    const content = preTrimContent.trim();\r\n    const startOffset = preTrimContent.indexOf(content);\r\n    if (startOffset > 0) {\r\n        advancePositionWithMutation(innerStart, rawContent, startOffset);\r\n    }\r\n    const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\r\n    advancePositionWithMutation(innerEnd, rawContent, endOffset);\r\n    advanceBy(context, close.length);\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        content: {\r\n            type: 4 /* SIMPLE_EXPRESSION */,\r\n            isStatic: false,\r\n            // Set `isConstant` to false by default and will decide in transformExpression\r\n            constType: 0 /* NOT_CONSTANT */,\r\n            content,\r\n            loc: getSelection(context, innerStart, innerEnd)\r\n        },\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseText(context, mode) {\r\n    const endTokens = ['<', context.options.delimiters[0]];\r\n    if (mode === 3 /* CDATA */) {\r\n        endTokens.push(']]>');\r\n    }\r\n    let endIndex = context.source.length;\r\n    for (let i = 0; i < endTokens.length; i++) {\r\n        const index = context.source.indexOf(endTokens[i], 1);\r\n        if (index !== -1 && endIndex > index) {\r\n            endIndex = index;\r\n        }\r\n    }\r\n    const start = getCursor(context);\r\n    const content = parseTextData(context, endIndex, mode);\r\n    return {\r\n        type: 2 /* TEXT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\n/**\r\n * Get text data with a given length from the current location.\r\n * This translates HTML entities in the text data.\r\n */\r\nfunction parseTextData(context, length, mode) {\r\n    const rawText = context.source.slice(0, length);\r\n    advanceBy(context, length);\r\n    if (mode === 2 /* RAWTEXT */ ||\r\n        mode === 3 /* CDATA */ ||\r\n        rawText.indexOf('&') === -1) {\r\n        return rawText;\r\n    }\r\n    else {\r\n        // DATA or RCDATA containing \"&\"\". Entity decoding required.\r\n        return context.options.decodeEntities(rawText, mode === 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n}\r\nfunction getCursor(context) {\r\n    const { column, line, offset } = context;\r\n    return { column, line, offset };\r\n}\r\nfunction getSelection(context, start, end) {\r\n    end = end || getCursor(context);\r\n    return {\r\n        start,\r\n        end,\r\n        source: context.originalSource.slice(start.offset, end.offset)\r\n    };\r\n}\r\nfunction last(xs) {\r\n    return xs[xs.length - 1];\r\n}\r\nfunction startsWith(source, searchString) {\r\n    return source.startsWith(searchString);\r\n}\r\nfunction advanceBy(context, numberOfCharacters) {\r\n    const { source } = context;\r\n    advancePositionWithMutation(context, source, numberOfCharacters);\r\n    context.source = source.slice(numberOfCharacters);\r\n}\r\nfunction advanceSpaces(context) {\r\n    const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\r\n    if (match) {\r\n        advanceBy(context, match[0].length);\r\n    }\r\n}\r\nfunction getNewPosition(context, start, numberOfCharacters) {\r\n    return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\r\n}\r\nfunction emitError(context, code, offset, loc = getCursor(context)) {\r\n    if (offset) {\r\n        loc.offset += offset;\r\n        loc.column += offset;\r\n    }\r\n    context.options.onError(createCompilerError(code, {\r\n        start: loc,\r\n        end: loc,\r\n        source: ''\r\n    }));\r\n}\r\nfunction isEnd(context, mode, ancestors) {\r\n    const s = context.source;\r\n    switch (mode) {\r\n        case 0 /* DATA */:\r\n            if (startsWith(s, '</')) {\r\n                // TODO: probably bad performance\r\n                for (let i = ancestors.length - 1; i >= 0; --i) {\r\n                    if (startsWithEndTagOpen(s, ancestors[i].tag)) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        case 1 /* RCDATA */:\r\n        case 2 /* RAWTEXT */: {\r\n            const parent = last(ancestors);\r\n            if (parent && startsWithEndTagOpen(s, parent.tag)) {\r\n                return true;\r\n            }\r\n            break;\r\n        }\r\n        case 3 /* CDATA */:\r\n            if (startsWith(s, ']]>')) {\r\n                return true;\r\n            }\r\n            break;\r\n    }\r\n    return !s;\r\n}\r\nfunction startsWithEndTagOpen(source, tag) {\r\n    return (startsWith(source, '</') &&\r\n        source.substr(2, tag.length).toLowerCase() === tag.toLowerCase() &&\r\n        /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\r\n}\n\nfunction hoistStatic(root, context) {\r\n    walk(root, context, \r\n    // Root node is unfortunately non-hoistable due to potential parent\r\n    // fallthrough attributes.\r\n    isSingleElementRoot(root, root.children[0]));\r\n}\r\nfunction isSingleElementRoot(root, child) {\r\n    const { children } = root;\r\n    return (children.length === 1 &&\r\n        child.type === 1 /* ELEMENT */ &&\r\n        !isSlotOutlet(child));\r\n}\r\nfunction walk(node, context, doNotHoistNode = false) {\r\n    // Some transforms, e.g. transformAssetUrls from @vue/compiler-sfc, replaces\r\n    // static bindings with expressions. These expressions are guaranteed to be\r\n    // constant so they are still eligible for hoisting, but they are only\r\n    // available at runtime and therefore cannot be evaluated ahead of time.\r\n    // This is only a concern for pre-stringification (via transformHoist by\r\n    // @vue/compiler-dom), but doing it here allows us to perform only one full\r\n    // walk of the AST and allow `stringifyStatic` to stop walking as soon as its\r\n    // stringficiation threshold is met.\r\n    let canStringify = true;\r\n    const { children } = node;\r\n    const originalCount = children.length;\r\n    let hoistedCount = 0;\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        // only plain elements & text calls are eligible for hoisting.\r\n        if (child.type === 1 /* ELEMENT */ &&\r\n            child.tagType === 0 /* ELEMENT */) {\r\n            const constantType = doNotHoistNode\r\n                ? 0 /* NOT_CONSTANT */\r\n                : getConstantType(child, context);\r\n            if (constantType > 0 /* NOT_CONSTANT */) {\r\n                if (constantType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (constantType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode.patchFlag =\r\n                        -1 /* HOISTED */ + (` /* HOISTED */` );\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                    continue;\r\n                }\r\n            }\r\n            else {\r\n                // node may contain dynamic children, but its props may be eligible for\r\n                // hoisting.\r\n                const codegenNode = child.codegenNode;\r\n                if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                    const flag = getPatchFlag(codegenNode);\r\n                    if ((!flag ||\r\n                        flag === 512 /* NEED_PATCH */ ||\r\n                        flag === 1 /* TEXT */) &&\r\n                        getGeneratedPropsConstantType(child, context) >=\r\n                            2 /* CAN_HOIST */) {\r\n                        const props = getNodeProps(child);\r\n                        if (props) {\r\n                            codegenNode.props = context.hoist(props);\r\n                        }\r\n                    }\r\n                    if (codegenNode.dynamicProps) {\r\n                        codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else if (child.type === 12 /* TEXT_CALL */) {\r\n            const contentType = getConstantType(child.content, context);\r\n            if (contentType > 0) {\r\n                if (contentType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (contentType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                }\r\n            }\r\n        }\r\n        // walk further\r\n        if (child.type === 1 /* ELEMENT */) {\r\n            const isComponent = child.tagType === 1 /* COMPONENT */;\r\n            if (isComponent) {\r\n                context.scopes.vSlot++;\r\n            }\r\n            walk(child, context);\r\n            if (isComponent) {\r\n                context.scopes.vSlot--;\r\n            }\r\n        }\r\n        else if (child.type === 11 /* FOR */) {\r\n            // Do not hoist v-for single child because it has to be a block\r\n            walk(child, context, child.children.length === 1);\r\n        }\r\n        else if (child.type === 9 /* IF */) {\r\n            for (let i = 0; i < child.branches.length; i++) {\r\n                // Do not hoist v-if single child because it has to be a block\r\n                walk(child.branches[i], context, child.branches[i].children.length === 1);\r\n            }\r\n        }\r\n    }\r\n    if (canStringify && hoistedCount && context.transformHoist) {\r\n        context.transformHoist(children, context, node);\r\n    }\r\n    // all children were hoisted - the entire children array is hoistable.\r\n    if (hoistedCount &&\r\n        hoistedCount === originalCount &&\r\n        node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 0 /* ELEMENT */ &&\r\n        node.codegenNode &&\r\n        node.codegenNode.type === 13 /* VNODE_CALL */ &&\r\n        shared.isArray(node.codegenNode.children)) {\r\n        node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\r\n    }\r\n}\r\nfunction getConstantType(node, context) {\r\n    const { constantCache } = context;\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            if (node.tagType !== 0 /* ELEMENT */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const cached = constantCache.get(node);\r\n            if (cached !== undefined) {\r\n                return cached;\r\n            }\r\n            const codegenNode = node.codegenNode;\r\n            if (codegenNode.type !== 13 /* VNODE_CALL */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const flag = getPatchFlag(codegenNode);\r\n            if (!flag) {\r\n                let returnType = 3 /* CAN_STRINGIFY */;\r\n                // Element itself has no patch flag. However we still need to check:\r\n                // 1. Even for a node with no patch flag, it is possible for it to contain\r\n                // non-hoistable expressions that refers to scope variables, e.g. compiler\r\n                // injected keys or cached event handlers. Therefore we need to always\r\n                // check the codegenNode's props to be sure.\r\n                const generatedPropsType = getGeneratedPropsConstantType(node, context);\r\n                if (generatedPropsType === 0 /* NOT_CONSTANT */) {\r\n                    constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                if (generatedPropsType < returnType) {\r\n                    returnType = generatedPropsType;\r\n                }\r\n                // 2. its children.\r\n                for (let i = 0; i < node.children.length; i++) {\r\n                    const childType = getConstantType(node.children[i], context);\r\n                    if (childType === 0 /* NOT_CONSTANT */) {\r\n                        constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                        return 0 /* NOT_CONSTANT */;\r\n                    }\r\n                    if (childType < returnType) {\r\n                        returnType = childType;\r\n                    }\r\n                }\r\n                // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\r\n                // type, check if any of the props can cause the type to be lowered\r\n                // we can skip can_patch because it's guaranteed by the absence of a\r\n                // patchFlag.\r\n                if (returnType > 1 /* CAN_SKIP_PATCH */) {\r\n                    for (let i = 0; i < node.props.length; i++) {\r\n                        const p = node.props[i];\r\n                        if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind' && p.exp) {\r\n                            const expType = getConstantType(p.exp, context);\r\n                            if (expType === 0 /* NOT_CONSTANT */) {\r\n                                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                                return 0 /* NOT_CONSTANT */;\r\n                            }\r\n                            if (expType < returnType) {\r\n                                returnType = expType;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                // only svg/foreignObject could be block here, however if they are\r\n                // static then they don't need to be blocks since there will be no\r\n                // nested updates.\r\n                if (codegenNode.isBlock) {\r\n                    context.removeHelper(OPEN_BLOCK);\r\n                    context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\r\n                    codegenNode.isBlock = false;\r\n                    context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\r\n                }\r\n                constantCache.set(node, returnType);\r\n                return returnType;\r\n            }\r\n            else {\r\n                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return 3 /* CAN_STRINGIFY */;\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n        case 10 /* IF_BRANCH */:\r\n            return 0 /* NOT_CONSTANT */;\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return getConstantType(node.content, context);\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return node.constType;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            let returnType = 3 /* CAN_STRINGIFY */;\r\n            for (let i = 0; i < node.children.length; i++) {\r\n                const child = node.children[i];\r\n                if (shared.isString(child) || shared.isSymbol(child)) {\r\n                    continue;\r\n                }\r\n                const childType = getConstantType(child, context);\r\n                if (childType === 0 /* NOT_CONSTANT */) {\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                else if (childType < returnType) {\r\n                    returnType = childType;\r\n                }\r\n            }\r\n            return returnType;\r\n        default:\r\n            return 0 /* NOT_CONSTANT */;\r\n    }\r\n}\r\nconst allowHoistedHelperSet = new Set([\r\n    NORMALIZE_CLASS,\r\n    NORMALIZE_STYLE,\r\n    NORMALIZE_PROPS,\r\n    GUARD_REACTIVE_PROPS\r\n]);\r\nfunction getConstantTypeOfHelperCall(value, context) {\r\n    if (value.type === 14 /* JS_CALL_EXPRESSION */ &&\r\n        !shared.isString(value.callee) &&\r\n        allowHoistedHelperSet.has(value.callee)) {\r\n        const arg = value.arguments[0];\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            return getConstantType(arg, context);\r\n        }\r\n        else if (arg.type === 14 /* JS_CALL_EXPRESSION */) {\r\n            // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\r\n            return getConstantTypeOfHelperCall(arg, context);\r\n        }\r\n    }\r\n    return 0 /* NOT_CONSTANT */;\r\n}\r\nfunction getGeneratedPropsConstantType(node, context) {\r\n    let returnType = 3 /* CAN_STRINGIFY */;\r\n    const props = getNodeProps(node);\r\n    if (props && props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        const { properties } = props;\r\n        for (let i = 0; i < properties.length; i++) {\r\n            const { key, value } = properties[i];\r\n            const keyType = getConstantType(key, context);\r\n            if (keyType === 0 /* NOT_CONSTANT */) {\r\n                return keyType;\r\n            }\r\n            if (keyType < returnType) {\r\n                returnType = keyType;\r\n            }\r\n            if (value.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n                // some helper calls can be hoisted,\r\n                // such as the `normalizeProps` generated by the compiler for pre-normalize class,\r\n                // in this case we need to respect the ConstanType of the helper's argments\r\n                if (value.type === 14 /* JS_CALL_EXPRESSION */) {\r\n                    return getConstantTypeOfHelperCall(value, context);\r\n                }\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const valueType = getConstantType(value, context);\r\n            if (valueType === 0 /* NOT_CONSTANT */) {\r\n                return valueType;\r\n            }\r\n            if (valueType < returnType) {\r\n                returnType = valueType;\r\n            }\r\n        }\r\n    }\r\n    return returnType;\r\n}\r\nfunction getNodeProps(node) {\r\n    const codegenNode = node.codegenNode;\r\n    if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n        return codegenNode.props;\r\n    }\r\n}\r\nfunction getPatchFlag(node) {\r\n    const flag = node.patchFlag;\r\n    return flag ? parseInt(flag, 10) : undefined;\r\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = shared.NOOP, isCustomElement = shared.NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = shared.EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\r\n    const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\r\n    const context = {\r\n        // options\r\n        selfName: nameMatch && shared.capitalize(shared.camelize(nameMatch[1])),\r\n        prefixIdentifiers,\r\n        hoistStatic,\r\n        cacheHandlers,\r\n        nodeTransforms,\r\n        directiveTransforms,\r\n        transformHoist,\r\n        isBuiltInComponent,\r\n        isCustomElement,\r\n        expressionPlugins,\r\n        scopeId,\r\n        slotted,\r\n        ssr,\r\n        inSSR,\r\n        ssrCssVars,\r\n        bindingMetadata,\r\n        inline,\r\n        isTS,\r\n        onError,\r\n        onWarn,\r\n        compatConfig,\r\n        // state\r\n        root,\r\n        helpers: new Map(),\r\n        components: new Set(),\r\n        directives: new Set(),\r\n        hoists: [],\r\n        imports: [],\r\n        constantCache: new Map(),\r\n        temps: 0,\r\n        cached: 0,\r\n        identifiers: Object.create(null),\r\n        scopes: {\r\n            vFor: 0,\r\n            vSlot: 0,\r\n            vPre: 0,\r\n            vOnce: 0\r\n        },\r\n        parent: null,\r\n        currentNode: root,\r\n        childIndex: 0,\r\n        inVOnce: false,\r\n        // methods\r\n        helper(name) {\r\n            const count = context.helpers.get(name) || 0;\r\n            context.helpers.set(name, count + 1);\r\n            return name;\r\n        },\r\n        removeHelper(name) {\r\n            const count = context.helpers.get(name);\r\n            if (count) {\r\n                const currentCount = count - 1;\r\n                if (!currentCount) {\r\n                    context.helpers.delete(name);\r\n                }\r\n                else {\r\n                    context.helpers.set(name, currentCount);\r\n                }\r\n            }\r\n        },\r\n        helperString(name) {\r\n            return `_${helperNameMap[context.helper(name)]}`;\r\n        },\r\n        replaceNode(node) {\r\n            /* istanbul ignore if */\r\n            {\r\n                if (!context.currentNode) {\r\n                    throw new Error(`Node being replaced is already removed.`);\r\n                }\r\n                if (!context.parent) {\r\n                    throw new Error(`Cannot replace root node.`);\r\n                }\r\n            }\r\n            context.parent.children[context.childIndex] = context.currentNode = node;\r\n        },\r\n        removeNode(node) {\r\n            if (!context.parent) {\r\n                throw new Error(`Cannot remove root node.`);\r\n            }\r\n            const list = context.parent.children;\r\n            const removalIndex = node\r\n                ? list.indexOf(node)\r\n                : context.currentNode\r\n                    ? context.childIndex\r\n                    : -1;\r\n            /* istanbul ignore if */\r\n            if (removalIndex < 0) {\r\n                throw new Error(`node being removed is not a child of current parent`);\r\n            }\r\n            if (!node || node === context.currentNode) {\r\n                // current node removed\r\n                context.currentNode = null;\r\n                context.onNodeRemoved();\r\n            }\r\n            else {\r\n                // sibling node removed\r\n                if (context.childIndex > removalIndex) {\r\n                    context.childIndex--;\r\n                    context.onNodeRemoved();\r\n                }\r\n            }\r\n            context.parent.children.splice(removalIndex, 1);\r\n        },\r\n        onNodeRemoved: () => { },\r\n        addIdentifiers(exp) {\r\n            // identifier tracking only happens in non-browser builds.\r\n            {\r\n                if (shared.isString(exp)) {\r\n                    addId(exp);\r\n                }\r\n                else if (exp.identifiers) {\r\n                    exp.identifiers.forEach(addId);\r\n                }\r\n                else if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                    addId(exp.content);\r\n                }\r\n            }\r\n        },\r\n        removeIdentifiers(exp) {\r\n            {\r\n                if (shared.isString(exp)) {\r\n                    removeId(exp);\r\n                }\r\n                else if (exp.identifiers) {\r\n                    exp.identifiers.forEach(removeId);\r\n                }\r\n                else if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                    removeId(exp.content);\r\n                }\r\n            }\r\n        },\r\n        hoist(exp) {\r\n            if (shared.isString(exp))\r\n                exp = createSimpleExpression(exp);\r\n            context.hoists.push(exp);\r\n            const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* CAN_HOIST */);\r\n            identifier.hoisted = exp;\r\n            return identifier;\r\n        },\r\n        cache(exp, isVNode = false) {\r\n            return createCacheExpression(context.cached++, exp, isVNode);\r\n        }\r\n    };\r\n    {\r\n        context.filters = new Set();\r\n    }\r\n    function addId(id) {\r\n        const { identifiers } = context;\r\n        if (identifiers[id] === undefined) {\r\n            identifiers[id] = 0;\r\n        }\r\n        identifiers[id]++;\r\n    }\r\n    function removeId(id) {\r\n        context.identifiers[id]--;\r\n    }\r\n    return context;\r\n}\r\nfunction transform(root, options) {\r\n    const context = createTransformContext(root, options);\r\n    traverseNode(root, context);\r\n    if (options.hoistStatic) {\r\n        hoistStatic(root, context);\r\n    }\r\n    if (!options.ssr) {\r\n        createRootCodegen(root, context);\r\n    }\r\n    // finalize meta information\r\n    root.helpers = [...context.helpers.keys()];\r\n    root.components = [...context.components];\r\n    root.directives = [...context.directives];\r\n    root.imports = context.imports;\r\n    root.hoists = context.hoists;\r\n    root.temps = context.temps;\r\n    root.cached = context.cached;\r\n    {\r\n        root.filters = [...context.filters];\r\n    }\r\n}\r\nfunction createRootCodegen(root, context) {\r\n    const { helper } = context;\r\n    const { children } = root;\r\n    if (children.length === 1) {\r\n        const child = children[0];\r\n        // if the single child is an element, turn it into a block.\r\n        if (isSingleElementRoot(root, child) && child.codegenNode) {\r\n            // single element root is never hoisted so codegenNode will never be\r\n            // SimpleExpressionNode\r\n            const codegenNode = child.codegenNode;\r\n            if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                makeBlock(codegenNode, context);\r\n            }\r\n            root.codegenNode = codegenNode;\r\n        }\r\n        else {\r\n            // - single <slot/>, IfNode, ForNode: already blocks.\r\n            // - single text node: always patched.\r\n            // root codegen falls through via genNode()\r\n            root.codegenNode = child;\r\n        }\r\n    }\r\n    else if (children.length > 1) {\r\n        // root has multiple nodes - return a fragment block.\r\n        let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n        let patchFlagText = shared.PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n        // check if the fragment actually contains a single valid child with\r\n        // the rest being comments\r\n        if (children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n            patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n            patchFlagText += `, ${shared.PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n        }\r\n        root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, undefined, false /* isComponent */);\r\n    }\r\n    else ;\r\n}\r\nfunction traverseChildren(parent, context) {\r\n    let i = 0;\r\n    const nodeRemoved = () => {\r\n        i--;\r\n    };\r\n    for (; i < parent.children.length; i++) {\r\n        const child = parent.children[i];\r\n        if (shared.isString(child))\r\n            continue;\r\n        context.parent = parent;\r\n        context.childIndex = i;\r\n        context.onNodeRemoved = nodeRemoved;\r\n        traverseNode(child, context);\r\n    }\r\n}\r\nfunction traverseNode(node, context) {\r\n    context.currentNode = node;\r\n    // apply transform plugins\r\n    const { nodeTransforms } = context;\r\n    const exitFns = [];\r\n    for (let i = 0; i < nodeTransforms.length; i++) {\r\n        const onExit = nodeTransforms[i](node, context);\r\n        if (onExit) {\r\n            if (shared.isArray(onExit)) {\r\n                exitFns.push(...onExit);\r\n            }\r\n            else {\r\n                exitFns.push(onExit);\r\n            }\r\n        }\r\n        if (!context.currentNode) {\r\n            // node was removed\r\n            return;\r\n        }\r\n        else {\r\n            // node may have been replaced\r\n            node = context.currentNode;\r\n        }\r\n    }\r\n    switch (node.type) {\r\n        case 3 /* COMMENT */:\r\n            if (!context.ssr) {\r\n                // inject import for the Comment symbol, which is needed for creating\r\n                // comment nodes with `createVNode`\r\n                context.helper(CREATE_COMMENT);\r\n            }\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            // no need to traverse, but we need to inject toString helper\r\n            if (!context.ssr) {\r\n                context.helper(TO_DISPLAY_STRING);\r\n            }\r\n            break;\r\n        // for container types, further traverse downwards\r\n        case 9 /* IF */:\r\n            for (let i = 0; i < node.branches.length; i++) {\r\n                traverseNode(node.branches[i], context);\r\n            }\r\n            break;\r\n        case 10 /* IF_BRANCH */:\r\n        case 11 /* FOR */:\r\n        case 1 /* ELEMENT */:\r\n        case 0 /* ROOT */:\r\n            traverseChildren(node, context);\r\n            break;\r\n    }\r\n    // exit transforms\r\n    context.currentNode = node;\r\n    let i = exitFns.length;\r\n    while (i--) {\r\n        exitFns[i]();\r\n    }\r\n}\r\nfunction createStructuralDirectiveTransform(name, fn) {\r\n    const matches = shared.isString(name)\r\n        ? (n) => n === name\r\n        : (n) => name.test(n);\r\n    return (node, context) => {\r\n        if (node.type === 1 /* ELEMENT */) {\r\n            const { props } = node;\r\n            // structural directive transforms are not concerned with slots\r\n            // as they are handled separately in vSlot.ts\r\n            if (node.tagType === 3 /* TEMPLATE */ && props.some(isVSlot)) {\r\n                return;\r\n            }\r\n            const exitFns = [];\r\n            for (let i = 0; i < props.length; i++) {\r\n                const prop = props[i];\r\n                if (prop.type === 7 /* DIRECTIVE */ && matches(prop.name)) {\r\n                    // structural directives are removed to avoid infinite recursion\r\n                    // also we remove them *before* applying so that it can further\r\n                    // traverse itself in case it moves the node around\r\n                    props.splice(i, 1);\r\n                    i--;\r\n                    const onExit = fn(node, prop, context);\r\n                    if (onExit)\r\n                        exitFns.push(onExit);\r\n                }\r\n            }\r\n            return exitFns;\r\n        }\r\n    };\r\n}\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\r\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap: sourceMap$1 = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssr = false, isTS = false, inSSR = false }) {\r\n    const context = {\r\n        mode,\r\n        prefixIdentifiers,\r\n        sourceMap: sourceMap$1,\r\n        filename,\r\n        scopeId,\r\n        optimizeImports,\r\n        runtimeGlobalName,\r\n        runtimeModuleName,\r\n        ssr,\r\n        isTS,\r\n        inSSR,\r\n        source: ast.loc.source,\r\n        code: ``,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        indentLevel: 0,\r\n        pure: false,\r\n        map: undefined,\r\n        helper(key) {\r\n            return `_${helperNameMap[key]}`;\r\n        },\r\n        push(code, node) {\r\n            context.code += code;\r\n            if (context.map) {\r\n                if (node) {\r\n                    let name;\r\n                    if (node.type === 4 /* SIMPLE_EXPRESSION */ && !node.isStatic) {\r\n                        const content = node.content.replace(/^_ctx\\./, '');\r\n                        if (content !== node.content && isSimpleIdentifier(content)) {\r\n                            name = content;\r\n                        }\r\n                    }\r\n                    addMapping(node.loc.start, name);\r\n                }\r\n                advancePositionWithMutation(context, code);\r\n                if (node && node.loc !== locStub) {\r\n                    addMapping(node.loc.end);\r\n                }\r\n            }\r\n        },\r\n        indent() {\r\n            newline(++context.indentLevel);\r\n        },\r\n        deindent(withoutNewLine = false) {\r\n            if (withoutNewLine) {\r\n                --context.indentLevel;\r\n            }\r\n            else {\r\n                newline(--context.indentLevel);\r\n            }\r\n        },\r\n        newline() {\r\n            newline(context.indentLevel);\r\n        }\r\n    };\r\n    function newline(n) {\r\n        context.push('\\n' + `  `.repeat(n));\r\n    }\r\n    function addMapping(loc, name) {\r\n        context.map.addMapping({\r\n            name,\r\n            source: context.filename,\r\n            original: {\r\n                line: loc.line,\r\n                column: loc.column - 1 // source-map column is 0 based\r\n            },\r\n            generated: {\r\n                line: context.line,\r\n                column: context.column - 1\r\n            }\r\n        });\r\n    }\r\n    if (sourceMap$1) {\r\n        // lazy require source-map implementation, only in non-browser builds\r\n        context.map = new sourceMap.SourceMapGenerator();\r\n        context.map.setSourceContent(filename, context.source);\r\n    }\r\n    return context;\r\n}\r\nfunction generate(ast, options = {}) {\r\n    const context = createCodegenContext(ast, options);\r\n    if (options.onContextCreated)\r\n        options.onContextCreated(context);\r\n    const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\r\n    const hasHelpers = ast.helpers.length > 0;\r\n    const useWithBlock = !prefixIdentifiers && mode !== 'module';\r\n    const genScopeId = scopeId != null && mode === 'module';\r\n    const isSetupInlined = !!options.inline;\r\n    // preambles\r\n    // in setup() inline mode, the preamble is generated in a sub context\r\n    // and returned separately.\r\n    const preambleContext = isSetupInlined\r\n        ? createCodegenContext(ast, options)\r\n        : context;\r\n    if (mode === 'module') {\r\n        genModulePreamble(ast, preambleContext, genScopeId, isSetupInlined);\r\n    }\r\n    else {\r\n        genFunctionPreamble(ast, preambleContext);\r\n    }\r\n    // enter render function\r\n    const functionName = ssr ? `ssrRender` : `render`;\r\n    const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\r\n    if (options.bindingMetadata && !options.inline) {\r\n        // binding optimization args\r\n        args.push('$props', '$setup', '$data', '$options');\r\n    }\r\n    const signature = options.isTS\r\n        ? args.map(arg => `${arg}: any`).join(',')\r\n        : args.join(', ');\r\n    if (isSetupInlined) {\r\n        push(`(${signature}) => {`);\r\n    }\r\n    else {\r\n        push(`function ${functionName}(${signature}) {`);\r\n    }\r\n    indent();\r\n    if (useWithBlock) {\r\n        push(`with (_ctx) {`);\r\n        indent();\r\n        // function mode const declarations should be inside with block\r\n        // also they should be renamed to avoid collision with user properties\r\n        if (hasHelpers) {\r\n            push(`const { ${ast.helpers\r\n                .map(s => `${helperNameMap[s]}: _${helperNameMap[s]}`)\r\n                .join(', ')} } = _Vue`);\r\n            push(`\\n`);\r\n            newline();\r\n        }\r\n    }\r\n    // generate asset resolution statements\r\n    if (ast.components.length) {\r\n        genAssets(ast.components, 'component', context);\r\n        if (ast.directives.length || ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.directives.length) {\r\n        genAssets(ast.directives, 'directive', context);\r\n        if (ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.filters && ast.filters.length) {\r\n        newline();\r\n        genAssets(ast.filters, 'filter', context);\r\n        newline();\r\n    }\r\n    if (ast.temps > 0) {\r\n        push(`let `);\r\n        for (let i = 0; i < ast.temps; i++) {\r\n            push(`${i > 0 ? `, ` : ``}_temp${i}`);\r\n        }\r\n    }\r\n    if (ast.components.length || ast.directives.length || ast.temps) {\r\n        push(`\\n`);\r\n        newline();\r\n    }\r\n    // generate the VNode tree expression\r\n    if (!ssr) {\r\n        push(`return `);\r\n    }\r\n    if (ast.codegenNode) {\r\n        genNode(ast.codegenNode, context);\r\n    }\r\n    else {\r\n        push(`null`);\r\n    }\r\n    if (useWithBlock) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    deindent();\r\n    push(`}`);\r\n    return {\r\n        ast,\r\n        code: context.code,\r\n        preamble: isSetupInlined ? preambleContext.code : ``,\r\n        // SourceMapGenerator does have toJSON() method but it's not in the types\r\n        map: context.map ? context.map.toJSON() : undefined\r\n    };\r\n}\r\nfunction genFunctionPreamble(ast, context) {\r\n    const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName } = context;\r\n    const VueBinding = ssr\r\n        ? `require(${JSON.stringify(runtimeModuleName)})`\r\n        : runtimeGlobalName;\r\n    const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\r\n    // Generate const declaration for helpers\r\n    // In prefix mode, we place the const declaration at top so it's done\r\n    // only once; But if we not prefixing, we place the declaration inside the\r\n    // with block so it doesn't incur the `in` check cost for every helper access.\r\n    if (ast.helpers.length > 0) {\r\n        if (prefixIdentifiers) {\r\n            push(`const { ${ast.helpers.map(aliasHelper).join(', ')} } = ${VueBinding}\\n`);\r\n        }\r\n        else {\r\n            // \"with\" mode.\r\n            // save Vue in a separate variable to avoid collision\r\n            push(`const _Vue = ${VueBinding}\\n`);\r\n            // in \"with\" mode, helpers are declared inside the with block to avoid\r\n            // has check cost, but hoists are lifted out of the function - we need\r\n            // to provide the helper here.\r\n            if (ast.hoists.length) {\r\n                const staticHelpers = [\r\n                    CREATE_VNODE,\r\n                    CREATE_ELEMENT_VNODE,\r\n                    CREATE_COMMENT,\r\n                    CREATE_TEXT,\r\n                    CREATE_STATIC\r\n                ]\r\n                    .filter(helper => ast.helpers.includes(helper))\r\n                    .map(aliasHelper)\r\n                    .join(', ');\r\n                push(`const { ${staticHelpers} } = _Vue\\n`);\r\n            }\r\n        }\r\n    }\r\n    // generate variables for ssr helpers\r\n    if (ast.ssrHelpers && ast.ssrHelpers.length) {\r\n        // ssr guarantees prefixIdentifier: true\r\n        push(`const { ${ast.ssrHelpers\r\n            .map(aliasHelper)\r\n            .join(', ')} } = require(\"@vue/server-renderer\")\\n`);\r\n    }\r\n    genHoists(ast.hoists, context);\r\n    newline();\r\n    push(`return `);\r\n}\r\nfunction genModulePreamble(ast, context, genScopeId, inline) {\r\n    const { push, newline, optimizeImports, runtimeModuleName } = context;\r\n    if (genScopeId) {\r\n        ast.helpers.push(WITH_SCOPE_ID);\r\n        if (ast.hoists.length) {\r\n            ast.helpers.push(PUSH_SCOPE_ID, POP_SCOPE_ID);\r\n        }\r\n    }\r\n    // generate import statements for helpers\r\n    if (ast.helpers.length) {\r\n        if (optimizeImports) {\r\n            // when bundled with webpack with code-split, calling an import binding\r\n            // as a function leads to it being wrapped with `Object(a.b)` or `(0,a.b)`,\r\n            // incurring both payload size increase and potential perf overhead.\r\n            // therefore we assign the imports to variables (which is a constant ~50b\r\n            // cost per-component instead of scaling with template size)\r\n            push(`import { ${ast.helpers\r\n                .map(s => helperNameMap[s])\r\n                .join(', ')} } from ${JSON.stringify(runtimeModuleName)}\\n`);\r\n            push(`\\n// Binding optimization for webpack code-split\\nconst ${ast.helpers\r\n                .map(s => `_${helperNameMap[s]} = ${helperNameMap[s]}`)\r\n                .join(', ')}\\n`);\r\n        }\r\n        else {\r\n            push(`import { ${ast.helpers\r\n                .map(s => `${helperNameMap[s]} as _${helperNameMap[s]}`)\r\n                .join(', ')} } from ${JSON.stringify(runtimeModuleName)}\\n`);\r\n        }\r\n    }\r\n    if (ast.ssrHelpers && ast.ssrHelpers.length) {\r\n        push(`import { ${ast.ssrHelpers\r\n            .map(s => `${helperNameMap[s]} as _${helperNameMap[s]}`)\r\n            .join(', ')} } from \"@vue/server-renderer\"\\n`);\r\n    }\r\n    if (ast.imports.length) {\r\n        genImports(ast.imports, context);\r\n        newline();\r\n    }\r\n    genHoists(ast.hoists, context);\r\n    newline();\r\n    if (!inline) {\r\n        push(`export `);\r\n    }\r\n}\r\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\r\n    const resolver = helper(type === 'filter'\r\n        ? RESOLVE_FILTER\r\n        : type === 'component'\r\n            ? RESOLVE_COMPONENT\r\n            : RESOLVE_DIRECTIVE);\r\n    for (let i = 0; i < assets.length; i++) {\r\n        let id = assets[i];\r\n        // potential component implicit self-reference inferred from SFC filename\r\n        const maybeSelfReference = id.endsWith('__self');\r\n        if (maybeSelfReference) {\r\n            id = id.slice(0, -6);\r\n        }\r\n        push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\r\n        if (i < assets.length - 1) {\r\n            newline();\r\n        }\r\n    }\r\n}\r\nfunction genHoists(hoists, context) {\r\n    if (!hoists.length) {\r\n        return;\r\n    }\r\n    context.pure = true;\r\n    const { push, newline, helper, scopeId, mode } = context;\r\n    const genScopeId = scopeId != null && mode !== 'function';\r\n    newline();\r\n    // push scope Id before initializing hoisted vnodes so that these vnodes\r\n    // get the proper scopeId as well.\r\n    if (genScopeId) {\r\n        push(`${helper(PUSH_SCOPE_ID)}(\"${scopeId}\")`);\r\n        newline();\r\n    }\r\n    hoists.forEach((exp, i) => {\r\n        if (exp) {\r\n            push(`const _hoisted_${i + 1} = `);\r\n            genNode(exp, context);\r\n            newline();\r\n        }\r\n    });\r\n    if (genScopeId) {\r\n        push(`${helper(POP_SCOPE_ID)}()`);\r\n        newline();\r\n    }\r\n    context.pure = false;\r\n}\r\nfunction genImports(importsOptions, context) {\r\n    if (!importsOptions.length) {\r\n        return;\r\n    }\r\n    importsOptions.forEach(imports => {\r\n        context.push(`import `);\r\n        genNode(imports.exp, context);\r\n        context.push(` from '${imports.path}'`);\r\n        context.newline();\r\n    });\r\n}\r\nfunction isText$1(n) {\r\n    return (shared.isString(n) ||\r\n        n.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n        n.type === 2 /* TEXT */ ||\r\n        n.type === 5 /* INTERPOLATION */ ||\r\n        n.type === 8 /* COMPOUND_EXPRESSION */);\r\n}\r\nfunction genNodeListAsArray(nodes, context) {\r\n    const multilines = nodes.length > 3 ||\r\n        (nodes.some(n => shared.isArray(n) || !isText$1(n)));\r\n    context.push(`[`);\r\n    multilines && context.indent();\r\n    genNodeList(nodes, context, multilines);\r\n    multilines && context.deindent();\r\n    context.push(`]`);\r\n}\r\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\r\n    const { push, newline } = context;\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        const node = nodes[i];\r\n        if (shared.isString(node)) {\r\n            push(node);\r\n        }\r\n        else if (shared.isArray(node)) {\r\n            genNodeListAsArray(node, context);\r\n        }\r\n        else {\r\n            genNode(node, context);\r\n        }\r\n        if (i < nodes.length - 1) {\r\n            if (multilines) {\r\n                comma && push(',');\r\n                newline();\r\n            }\r\n            else {\r\n                comma && push(', ');\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction genNode(node, context) {\r\n    if (shared.isString(node)) {\r\n        context.push(node);\r\n        return;\r\n    }\r\n    if (shared.isSymbol(node)) {\r\n        context.push(context.helper(node));\r\n        return;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n            assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\r\n                    `Apply appropriate transforms first.`);\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 2 /* TEXT */:\r\n            genText(node, context);\r\n            break;\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            genExpression(node, context);\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            genInterpolation(node, context);\r\n            break;\r\n        case 12 /* TEXT_CALL */:\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            genCompoundExpression(node, context);\r\n            break;\r\n        case 3 /* COMMENT */:\r\n            genComment(node, context);\r\n            break;\r\n        case 13 /* VNODE_CALL */:\r\n            genVNodeCall(node, context);\r\n            break;\r\n        case 14 /* JS_CALL_EXPRESSION */:\r\n            genCallExpression(node, context);\r\n            break;\r\n        case 15 /* JS_OBJECT_EXPRESSION */:\r\n            genObjectExpression(node, context);\r\n            break;\r\n        case 17 /* JS_ARRAY_EXPRESSION */:\r\n            genArrayExpression(node, context);\r\n            break;\r\n        case 18 /* JS_FUNCTION_EXPRESSION */:\r\n            genFunctionExpression(node, context);\r\n            break;\r\n        case 19 /* JS_CONDITIONAL_EXPRESSION */:\r\n            genConditionalExpression(node, context);\r\n            break;\r\n        case 20 /* JS_CACHE_EXPRESSION */:\r\n            genCacheExpression(node, context);\r\n            break;\r\n        case 21 /* JS_BLOCK_STATEMENT */:\r\n            genNodeList(node.body, context, true, false);\r\n            break;\r\n        // SSR only types\r\n        case 22 /* JS_TEMPLATE_LITERAL */:\r\n            genTemplateLiteral(node, context);\r\n            break;\r\n        case 23 /* JS_IF_STATEMENT */:\r\n            genIfStatement(node, context);\r\n            break;\r\n        case 24 /* JS_ASSIGNMENT_EXPRESSION */:\r\n            genAssignmentExpression(node, context);\r\n            break;\r\n        case 25 /* JS_SEQUENCE_EXPRESSION */:\r\n            genSequenceExpression(node, context);\r\n            break;\r\n        case 26 /* JS_RETURN_STATEMENT */:\r\n            genReturnStatement(node, context);\r\n            break;\r\n        /* istanbul ignore next */\r\n        case 10 /* IF_BRANCH */:\r\n            // noop\r\n            break;\r\n        default:\r\n            {\r\n                assert(false, `unhandled codegen node type: ${node.type}`);\r\n                // make sure we exhaust all possible types\r\n                const exhaustiveCheck = node;\r\n                return exhaustiveCheck;\r\n            }\r\n    }\r\n}\r\nfunction genText(node, context) {\r\n    context.push(JSON.stringify(node.content), node);\r\n}\r\nfunction genExpression(node, context) {\r\n    const { content, isStatic } = node;\r\n    context.push(isStatic ? JSON.stringify(content) : content, node);\r\n}\r\nfunction genInterpolation(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure)\r\n        push(PURE_ANNOTATION);\r\n    push(`${helper(TO_DISPLAY_STRING)}(`);\r\n    genNode(node.content, context);\r\n    push(`)`);\r\n}\r\nfunction genCompoundExpression(node, context) {\r\n    for (let i = 0; i < node.children.length; i++) {\r\n        const child = node.children[i];\r\n        if (shared.isString(child)) {\r\n            context.push(child);\r\n        }\r\n        else {\r\n            genNode(child, context);\r\n        }\r\n    }\r\n}\r\nfunction genExpressionAsPropertyKey(node, context) {\r\n    const { push } = context;\r\n    if (node.type === 8 /* COMPOUND_EXPRESSION */) {\r\n        push(`[`);\r\n        genCompoundExpression(node, context);\r\n        push(`]`);\r\n    }\r\n    else if (node.isStatic) {\r\n        // only quote keys if necessary\r\n        const text = isSimpleIdentifier(node.content)\r\n            ? node.content\r\n            : JSON.stringify(node.content);\r\n        push(text, node);\r\n    }\r\n    else {\r\n        push(`[${node.content}]`, node);\r\n    }\r\n}\r\nfunction genComment(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\r\n}\r\nfunction genVNodeCall(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\r\n    if (directives) {\r\n        push(helper(WITH_DIRECTIVES) + `(`);\r\n    }\r\n    if (isBlock) {\r\n        push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\r\n    }\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    const callHelper = isBlock\r\n        ? getVNodeBlockHelper(context.inSSR, isComponent)\r\n        : getVNodeHelper(context.inSSR, isComponent);\r\n    push(helper(callHelper) + `(`, node);\r\n    genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\r\n    push(`)`);\r\n    if (isBlock) {\r\n        push(`)`);\r\n    }\r\n    if (directives) {\r\n        push(`, `);\r\n        genNode(directives, context);\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genNullableArgs(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i] != null)\r\n            break;\r\n    }\r\n    return args.slice(0, i + 1).map(arg => arg || `null`);\r\n}\r\n// JavaScript\r\nfunction genCallExpression(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const callee = shared.isString(node.callee) ? node.callee : helper(node.callee);\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(callee + `(`, node);\r\n    genNodeList(node.arguments, context);\r\n    push(`)`);\r\n}\r\nfunction genObjectExpression(node, context) {\r\n    const { push, indent, deindent, newline } = context;\r\n    const { properties } = node;\r\n    if (!properties.length) {\r\n        push(`{}`, node);\r\n        return;\r\n    }\r\n    const multilines = properties.length > 1 ||\r\n        (properties.some(p => p.value.type !== 4 /* SIMPLE_EXPRESSION */));\r\n    push(multilines ? `{` : `{ `);\r\n    multilines && indent();\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const { key, value } = properties[i];\r\n        // key\r\n        genExpressionAsPropertyKey(key, context);\r\n        push(`: `);\r\n        // value\r\n        genNode(value, context);\r\n        if (i < properties.length - 1) {\r\n            // will only reach this if it's multilines\r\n            push(`,`);\r\n            newline();\r\n        }\r\n    }\r\n    multilines && deindent();\r\n    push(multilines ? `}` : ` }`);\r\n}\r\nfunction genArrayExpression(node, context) {\r\n    genNodeListAsArray(node.elements, context);\r\n}\r\nfunction genFunctionExpression(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    const { params, returns, body, newline, isSlot } = node;\r\n    if (isSlot) {\r\n        // wrap slot functions with owner context\r\n        push(`_${helperNameMap[WITH_CTX]}(`);\r\n    }\r\n    push(`(`, node);\r\n    if (shared.isArray(params)) {\r\n        genNodeList(params, context);\r\n    }\r\n    else if (params) {\r\n        genNode(params, context);\r\n    }\r\n    push(`) => `);\r\n    if (newline || body) {\r\n        push(`{`);\r\n        indent();\r\n    }\r\n    if (returns) {\r\n        if (newline) {\r\n            push(`return `);\r\n        }\r\n        if (shared.isArray(returns)) {\r\n            genNodeListAsArray(returns, context);\r\n        }\r\n        else {\r\n            genNode(returns, context);\r\n        }\r\n    }\r\n    else if (body) {\r\n        genNode(body, context);\r\n    }\r\n    if (newline || body) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    if (isSlot) {\r\n        if (node.isNonScopedSlot) {\r\n            push(`, undefined, true`);\r\n        }\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genConditionalExpression(node, context) {\r\n    const { test, consequent, alternate, newline: needNewline } = node;\r\n    const { push, indent, deindent, newline } = context;\r\n    if (test.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        const needsParens = !isSimpleIdentifier(test.content);\r\n        needsParens && push(`(`);\r\n        genExpression(test, context);\r\n        needsParens && push(`)`);\r\n    }\r\n    else {\r\n        push(`(`);\r\n        genNode(test, context);\r\n        push(`)`);\r\n    }\r\n    needNewline && indent();\r\n    context.indentLevel++;\r\n    needNewline || push(` `);\r\n    push(`? `);\r\n    genNode(consequent, context);\r\n    context.indentLevel--;\r\n    needNewline && newline();\r\n    needNewline || push(` `);\r\n    push(`: `);\r\n    const isNested = alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */;\r\n    if (!isNested) {\r\n        context.indentLevel++;\r\n    }\r\n    genNode(alternate, context);\r\n    if (!isNested) {\r\n        context.indentLevel--;\r\n    }\r\n    needNewline && deindent(true /* without newline */);\r\n}\r\nfunction genCacheExpression(node, context) {\r\n    const { push, helper, indent, deindent, newline } = context;\r\n    push(`_cache[${node.index}] || (`);\r\n    if (node.isVNode) {\r\n        indent();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\r\n        newline();\r\n    }\r\n    push(`_cache[${node.index}] = `);\r\n    genNode(node.value, context);\r\n    if (node.isVNode) {\r\n        push(`,`);\r\n        newline();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(1),`);\r\n        newline();\r\n        push(`_cache[${node.index}]`);\r\n        deindent();\r\n    }\r\n    push(`)`);\r\n}\r\nfunction genTemplateLiteral(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    push('`');\r\n    const l = node.elements.length;\r\n    const multilines = l > 3;\r\n    for (let i = 0; i < l; i++) {\r\n        const e = node.elements[i];\r\n        if (shared.isString(e)) {\r\n            push(e.replace(/(`|\\$|\\\\)/g, '\\\\$1'));\r\n        }\r\n        else {\r\n            push('${');\r\n            if (multilines)\r\n                indent();\r\n            genNode(e, context);\r\n            if (multilines)\r\n                deindent();\r\n            push('}');\r\n        }\r\n    }\r\n    push('`');\r\n}\r\nfunction genIfStatement(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    const { test, consequent, alternate } = node;\r\n    push(`if (`);\r\n    genNode(test, context);\r\n    push(`) {`);\r\n    indent();\r\n    genNode(consequent, context);\r\n    deindent();\r\n    push(`}`);\r\n    if (alternate) {\r\n        push(` else `);\r\n        if (alternate.type === 23 /* JS_IF_STATEMENT */) {\r\n            genIfStatement(alternate, context);\r\n        }\r\n        else {\r\n            push(`{`);\r\n            indent();\r\n            genNode(alternate, context);\r\n            deindent();\r\n            push(`}`);\r\n        }\r\n    }\r\n}\r\nfunction genAssignmentExpression(node, context) {\r\n    genNode(node.left, context);\r\n    context.push(` = `);\r\n    genNode(node.right, context);\r\n}\r\nfunction genSequenceExpression(node, context) {\r\n    context.push(`(`);\r\n    genNodeList(node.expressions, context);\r\n    context.push(`)`);\r\n}\r\nfunction genReturnStatement({ returns }, context) {\r\n    context.push(`return `);\r\n    if (shared.isArray(returns)) {\r\n        genNodeListAsArray(returns, context);\r\n    }\r\n    else {\r\n        genNode(returns, context);\r\n    }\r\n}\n\nconst isLiteralWhitelisted = /*#__PURE__*/ shared.makeMap('true,false,null,this');\r\nconst transformExpression = (node, context) => {\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        node.content = processExpression(node.content, context);\r\n    }\r\n    else if (node.type === 1 /* ELEMENT */) {\r\n        // handle directives on element\r\n        for (let i = 0; i < node.props.length; i++) {\r\n            const dir = node.props[i];\r\n            // do not process for v-on & v-for since they are special handled\r\n            if (dir.type === 7 /* DIRECTIVE */ && dir.name !== 'for') {\r\n                const exp = dir.exp;\r\n                const arg = dir.arg;\r\n                // do not process exp if this is v-on:arg - we need special handling\r\n                // for wrapping inline statements.\r\n                if (exp &&\r\n                    exp.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                    !(dir.name === 'on' && arg)) {\r\n                    dir.exp = processExpression(exp, context, \r\n                    // slot args must be processed as function params\r\n                    dir.name === 'slot');\r\n                }\r\n                if (arg && arg.type === 4 /* SIMPLE_EXPRESSION */ && !arg.isStatic) {\r\n                    dir.arg = processExpression(arg, context);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n// Important: since this function uses Node.js only dependencies, it should\r\n// always be used with a leading !false check so that it can be\r\n// tree-shaken from the browser build.\r\nfunction processExpression(node, context, \r\n// some expressions like v-slot props & v-for aliases should be parsed as\r\n// function params\r\nasParams = false, \r\n// v-on handler values may contain multiple statements\r\nasRawStatements = false) {\r\n    if (!context.prefixIdentifiers || !node.content.trim()) {\r\n        return node;\r\n    }\r\n    const { inline, bindingMetadata } = context;\r\n    const rewriteIdentifier = (raw, parent, id) => {\r\n        const type = shared.hasOwn(bindingMetadata, raw) && bindingMetadata[raw];\r\n        if (inline) {\r\n            // x = y\r\n            const isAssignmentLVal = parent && parent.type === 'AssignmentExpression' && parent.left === id;\r\n            // x++\r\n            const isUpdateArg = parent && parent.type === 'UpdateExpression' && parent.argument === id;\r\n            // ({ x } = y)\r\n            const isDestructureAssignment = parent && isInDestructureAssignment(parent, parentStack);\r\n            if (type === \"setup-const\" /* SETUP_CONST */) {\r\n                return raw;\r\n            }\r\n            else if (type === \"setup-ref\" /* SETUP_REF */) {\r\n                return `${raw}.value`;\r\n            }\r\n            else if (type === \"setup-maybe-ref\" /* SETUP_MAYBE_REF */) {\r\n                // const binding that may or may not be ref\r\n                // if it's not a ref, then assignments don't make sense -\r\n                // so we ignore the non-ref assignment case and generate code\r\n                // that assumes the value to be a ref for more efficiency\r\n                return isAssignmentLVal || isUpdateArg || isDestructureAssignment\r\n                    ? `${raw}.value`\r\n                    : `${context.helperString(UNREF)}(${raw})`;\r\n            }\r\n            else if (type === \"setup-let\" /* SETUP_LET */) {\r\n                if (isAssignmentLVal) {\r\n                    // let binding.\r\n                    // this is a bit more tricky as we need to cover the case where\r\n                    // let is a local non-ref value, and we need to replicate the\r\n                    // right hand side value.\r\n                    // x = y --> isRef(x) ? x.value = y : x = y\r\n                    const { right: rVal, operator } = parent;\r\n                    const rExp = rawExp.slice(rVal.start - 1, rVal.end - 1);\r\n                    const rExpString = stringifyExpression(processExpression(createSimpleExpression(rExp, false), context));\r\n                    return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\\n` : ``} ? ${raw}.value ${operator} ${rExpString} : ${raw}`;\r\n                }\r\n                else if (isUpdateArg) {\r\n                    // make id replace parent in the code range so the raw update operator\r\n                    // is removed\r\n                    id.start = parent.start;\r\n                    id.end = parent.end;\r\n                    const { prefix: isPrefix, operator } = parent;\r\n                    const prefix = isPrefix ? operator : ``;\r\n                    const postfix = isPrefix ? `` : operator;\r\n                    // let binding.\r\n                    // x++ --> isRef(a) ? a.value++ : a++\r\n                    return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\\n` : ``} ? ${prefix}${raw}.value${postfix} : ${prefix}${raw}${postfix}`;\r\n                }\r\n                else if (isDestructureAssignment) {\r\n                    // TODO\r\n                    // let binding in a destructure assignment - it's very tricky to\r\n                    // handle both possible cases here without altering the original\r\n                    // structure of the code, so we just assume it's not a ref here\r\n                    // for now\r\n                    return raw;\r\n                }\r\n                else {\r\n                    return `${context.helperString(UNREF)}(${raw})`;\r\n                }\r\n            }\r\n            else if (type === \"props\" /* PROPS */) {\r\n                // use __props which is generated by compileScript so in ts mode\r\n                // it gets correct type\r\n                return `__props.${raw}`;\r\n            }\r\n        }\r\n        else {\r\n            if (type && type.startsWith('setup')) {\r\n                // setup bindings in non-inline mode\r\n                return `$setup.${raw}`;\r\n            }\r\n            else if (type) {\r\n                return `$${type}.${raw}`;\r\n            }\r\n        }\r\n        // fallback to ctx\r\n        return `_ctx.${raw}`;\r\n    };\r\n    // fast path if expression is a simple identifier.\r\n    const rawExp = node.content;\r\n    // bail constant on parens (function invocation) and dot (member access)\r\n    const bailConstant = rawExp.indexOf(`(`) > -1 || rawExp.indexOf('.') > 0;\r\n    if (isSimpleIdentifier(rawExp)) {\r\n        const isScopeVarReference = context.identifiers[rawExp];\r\n        const isAllowedGlobal = shared.isGloballyWhitelisted(rawExp);\r\n        const isLiteral = isLiteralWhitelisted(rawExp);\r\n        if (!asParams && !isScopeVarReference && !isAllowedGlobal && !isLiteral) {\r\n            // const bindings exposed from setup can be skipped for patching but\r\n            // cannot be hoisted to module scope\r\n            if (bindingMetadata[node.content] === \"setup-const\" /* SETUP_CONST */) {\r\n                node.constType = 1 /* CAN_SKIP_PATCH */;\r\n            }\r\n            node.content = rewriteIdentifier(rawExp);\r\n        }\r\n        else if (!isScopeVarReference) {\r\n            if (isLiteral) {\r\n                node.constType = 3 /* CAN_STRINGIFY */;\r\n            }\r\n            else {\r\n                node.constType = 2 /* CAN_HOIST */;\r\n            }\r\n        }\r\n        return node;\r\n    }\r\n    let ast;\r\n    // exp needs to be parsed differently:\r\n    // 1. Multiple inline statements (v-on, with presence of `;`): parse as raw\r\n    //    exp, but make sure to pad with spaces for consistent ranges\r\n    // 2. Expressions: wrap with parens (for e.g. object expressions)\r\n    // 3. Function arguments (v-for, v-slot): place in a function argument position\r\n    const source = asRawStatements\r\n        ? ` ${rawExp} `\r\n        : `(${rawExp})${asParams ? `=>{}` : ``}`;\r\n    try {\r\n        ast = parser.parse(source, {\r\n            plugins: [...context.expressionPlugins, ...shared.babelParserDefaultPlugins]\r\n        }).program;\r\n    }\r\n    catch (e) {\r\n        context.onError(createCompilerError(43 /* X_INVALID_EXPRESSION */, node.loc, undefined, e.message));\r\n        return node;\r\n    }\r\n    const ids = [];\r\n    const knownIds = Object.create(context.identifiers);\r\n    const isDuplicate = (node) => ids.some(id => id.start === node.start);\r\n    const parentStack = [];\r\n    estreeWalker.walk(ast, {\r\n        enter(node, parent) {\r\n            parent && parentStack.push(parent);\r\n            if (node.type === 'Identifier') {\r\n                if (!isDuplicate(node)) {\r\n                    // v2 wrapped filter call\r\n                    if (node.name.startsWith('_filter_')) {\r\n                        return;\r\n                    }\r\n                    const needPrefix = shouldPrefix(node, parent, parentStack);\r\n                    if (!knownIds[node.name] && needPrefix) {\r\n                        if (isStaticProperty(parent) && parent.shorthand) {\r\n                            // property shorthand like { foo }, we need to add the key since\r\n                            // we rewrite the value\r\n                            node.prefix = `${node.name}: `;\r\n                        }\r\n                        node.name = rewriteIdentifier(node.name, parent, node);\r\n                        ids.push(node);\r\n                    }\r\n                    else if (!isStaticPropertyKey(node, parent)) {\r\n                        // The identifier is considered constant unless it's pointing to a\r\n                        // scope variable (a v-for alias, or a v-slot prop)\r\n                        if (!(needPrefix && knownIds[node.name]) && !bailConstant) {\r\n                            node.isConstant = true;\r\n                        }\r\n                        // also generate sub-expressions for other identifiers for better\r\n                        // source map support. (except for property keys which are static)\r\n                        ids.push(node);\r\n                    }\r\n                }\r\n            }\r\n            else if (isFunction(node)) {\r\n                // walk function expressions and add its arguments to known identifiers\r\n                // so that we don't prefix them\r\n                node.params.forEach(p => estreeWalker.walk(p, {\r\n                    enter(child, parent) {\r\n                        if (child.type === 'Identifier' &&\r\n                            // do not record as scope variable if is a destructured key\r\n                            !isStaticPropertyKey(child, parent) &&\r\n                            // do not record if this is a default value\r\n                            // assignment of a destructured variable\r\n                            !(parent &&\r\n                                parent.type === 'AssignmentPattern' &&\r\n                                parent.right === child)) {\r\n                            const { name } = child;\r\n                            if (node.scopeIds && node.scopeIds.has(name)) {\r\n                                return;\r\n                            }\r\n                            if (name in knownIds) {\r\n                                knownIds[name]++;\r\n                            }\r\n                            else {\r\n                                knownIds[name] = 1;\r\n                            }\r\n                            (node.scopeIds || (node.scopeIds = new Set())).add(name);\r\n                        }\r\n                    }\r\n                }));\r\n            }\r\n        },\r\n        leave(node, parent) {\r\n            parent && parentStack.pop();\r\n            if (node !== ast.body[0].expression && node.scopeIds) {\r\n                node.scopeIds.forEach((id) => {\r\n                    knownIds[id]--;\r\n                    if (knownIds[id] === 0) {\r\n                        delete knownIds[id];\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    });\r\n    // We break up the compound expression into an array of strings and sub\r\n    // expressions (for identifiers that have been prefixed). In codegen, if\r\n    // an ExpressionNode has the `.children` property, it will be used instead of\r\n    // `.content`.\r\n    const children = [];\r\n    ids.sort((a, b) => a.start - b.start);\r\n    ids.forEach((id, i) => {\r\n        // range is offset by -1 due to the wrapping parens when parsed\r\n        const start = id.start - 1;\r\n        const end = id.end - 1;\r\n        const last = ids[i - 1];\r\n        const leadingText = rawExp.slice(last ? last.end - 1 : 0, start);\r\n        if (leadingText.length || id.prefix) {\r\n            children.push(leadingText + (id.prefix || ``));\r\n        }\r\n        const source = rawExp.slice(start, end);\r\n        children.push(createSimpleExpression(id.name, false, {\r\n            source,\r\n            start: advancePositionWithClone(node.loc.start, source, start),\r\n            end: advancePositionWithClone(node.loc.start, source, end)\r\n        }, id.isConstant ? 3 /* CAN_STRINGIFY */ : 0 /* NOT_CONSTANT */));\r\n        if (i === ids.length - 1 && end < rawExp.length) {\r\n            children.push(rawExp.slice(end));\r\n        }\r\n    });\r\n    let ret;\r\n    if (children.length) {\r\n        ret = createCompoundExpression(children, node.loc);\r\n    }\r\n    else {\r\n        ret = node;\r\n        ret.constType = bailConstant\r\n            ? 0 /* NOT_CONSTANT */\r\n            : 3 /* CAN_STRINGIFY */;\r\n    }\r\n    ret.identifiers = Object.keys(knownIds);\r\n    return ret;\r\n}\r\nconst isFunction = (node) => {\r\n    return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\r\n};\r\nconst isStaticProperty = (node) => node &&\r\n    (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&\r\n    !node.computed;\r\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\r\nfunction shouldPrefix(id, parent, parentStack) {\r\n    // declaration id\r\n    if ((parent.type === 'VariableDeclarator' ||\r\n        parent.type === 'ClassDeclaration') &&\r\n        parent.id === id) {\r\n        return false;\r\n    }\r\n    if (isFunction(parent)) {\r\n        // function decalration/expression id\r\n        if (parent.id === id) {\r\n            return false;\r\n        }\r\n        // params list\r\n        if (parent.params.includes(id)) {\r\n            return false;\r\n        }\r\n    }\r\n    // property key\r\n    // this also covers object destructure pattern\r\n    if (isStaticPropertyKey(id, parent)) {\r\n        return false;\r\n    }\r\n    // non-assignment array destructure pattern\r\n    if (parent.type === 'ArrayPattern' &&\r\n        !isInDestructureAssignment(parent, parentStack)) {\r\n        return false;\r\n    }\r\n    // member expression property\r\n    if ((parent.type === 'MemberExpression' ||\r\n        parent.type === 'OptionalMemberExpression') &&\r\n        parent.property === id &&\r\n        !parent.computed) {\r\n        return false;\r\n    }\r\n    // is a special keyword but parsed as identifier\r\n    if (id.name === 'arguments') {\r\n        return false;\r\n    }\r\n    // skip whitelisted globals\r\n    if (shared.isGloballyWhitelisted(id.name)) {\r\n        return false;\r\n    }\r\n    // special case for webpack compilation\r\n    if (id.name === 'require') {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction isInDestructureAssignment(parent, parentStack) {\r\n    if (parent &&\r\n        (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {\r\n        let i = parentStack.length;\r\n        while (i--) {\r\n            const p = parentStack[i];\r\n            if (p.type === 'AssignmentExpression') {\r\n                return true;\r\n            }\r\n            else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction stringifyExpression(exp) {\r\n    if (shared.isString(exp)) {\r\n        return exp;\r\n    }\r\n    else if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        return exp.content;\r\n    }\r\n    else {\r\n        return exp.children\r\n            .map(stringifyExpression)\r\n            .join('');\r\n    }\r\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\r\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\r\n        // #1587: We need to dynamically increment the key based on the current\r\n        // node's sibling nodes, since chained v-if/else branches are\r\n        // rendered at the same depth\r\n        const siblings = context.parent.children;\r\n        let i = siblings.indexOf(ifNode);\r\n        let key = 0;\r\n        while (i-- >= 0) {\r\n            const sibling = siblings[i];\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                key += sibling.branches.length;\r\n            }\r\n        }\r\n        // Exit callback. Complete the codegenNode when all children have been\r\n        // transformed.\r\n        return () => {\r\n            if (isRoot) {\r\n                ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\r\n            }\r\n            else {\r\n                // attach this branch's codegen node to the v-if root.\r\n                const parentCondition = getParentCondition(ifNode.codegenNode);\r\n                parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processIf(node, dir, context, processCodegen) {\r\n    if (dir.name !== 'else' &&\r\n        (!dir.exp || !dir.exp.content.trim())) {\r\n        const loc = dir.exp ? dir.exp.loc : node.loc;\r\n        context.onError(createCompilerError(27 /* X_V_IF_NO_EXPRESSION */, dir.loc));\r\n        dir.exp = createSimpleExpression(`true`, false, loc);\r\n    }\r\n    if (context.prefixIdentifiers && dir.exp) {\r\n        // dir.exp can only be simple expression because vIf transform is applied\r\n        // before expression transform.\r\n        dir.exp = processExpression(dir.exp, context);\r\n    }\r\n    if (dir.name === 'if') {\r\n        const branch = createIfBranch(node, dir);\r\n        const ifNode = {\r\n            type: 9 /* IF */,\r\n            loc: node.loc,\r\n            branches: [branch]\r\n        };\r\n        context.replaceNode(ifNode);\r\n        if (processCodegen) {\r\n            return processCodegen(ifNode, branch, true);\r\n        }\r\n    }\r\n    else {\r\n        // locate the adjacent v-if\r\n        const siblings = context.parent.children;\r\n        const comments = [];\r\n        let i = siblings.indexOf(node);\r\n        while (i-- >= -1) {\r\n            const sibling = siblings[i];\r\n            if (sibling && sibling.type === 3 /* COMMENT */) {\r\n                context.removeNode(sibling);\r\n                comments.unshift(sibling);\r\n                continue;\r\n            }\r\n            if (sibling &&\r\n                sibling.type === 2 /* TEXT */ &&\r\n                !sibling.content.trim().length) {\r\n                context.removeNode(sibling);\r\n                continue;\r\n            }\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                // move the node to the if node's branches\r\n                context.removeNode();\r\n                const branch = createIfBranch(node, dir);\r\n                if (comments.length &&\r\n                    // #3619 ignore comments if the v-if is direct child of <transition>\r\n                    !(context.parent &&\r\n                        context.parent.type === 1 /* ELEMENT */ &&\r\n                        isBuiltInType(context.parent.tag, 'transition'))) {\r\n                    branch.children = [...comments, ...branch.children];\r\n                }\r\n                // check if user is forcing same key on different branches\r\n                {\r\n                    const key = branch.userKey;\r\n                    if (key) {\r\n                        sibling.branches.forEach(({ userKey }) => {\r\n                            if (isSameKey(userKey, key)) {\r\n                                context.onError(createCompilerError(28 /* X_V_IF_SAME_KEY */, branch.userKey.loc));\r\n                            }\r\n                        });\r\n                    }\r\n                }\r\n                sibling.branches.push(branch);\r\n                const onExit = processCodegen && processCodegen(sibling, branch, false);\r\n                // since the branch was removed, it will not be traversed.\r\n                // make sure to traverse here.\r\n                traverseNode(branch, context);\r\n                // call on exit\r\n                if (onExit)\r\n                    onExit();\r\n                // make sure to reset currentNode after traversal to indicate this\r\n                // node has been removed.\r\n                context.currentNode = null;\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));\r\n            }\r\n            break;\r\n        }\r\n    }\r\n}\r\nfunction createIfBranch(node, dir) {\r\n    return {\r\n        type: 10 /* IF_BRANCH */,\r\n        loc: node.loc,\r\n        condition: dir.name === 'else' ? undefined : dir.exp,\r\n        children: node.tagType === 3 /* TEMPLATE */ && !findDir(node, 'for')\r\n            ? node.children\r\n            : [node],\r\n        userKey: findProp(node, `key`)\r\n    };\r\n}\r\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\r\n    if (branch.condition) {\r\n        return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \r\n        // make sure to pass in asBlock: true so that the comment node call\r\n        // closes the current block.\r\n        createCallExpression(context.helper(CREATE_COMMENT), [\r\n            '\"v-if\"' ,\r\n            'true'\r\n        ]));\r\n    }\r\n    else {\r\n        return createChildrenCodegenNode(branch, keyIndex, context);\r\n    }\r\n}\r\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\r\n    const { helper } = context;\r\n    const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* CAN_HOIST */));\r\n    const { children } = branch;\r\n    const firstChild = children[0];\r\n    const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;\r\n    if (needFragmentWrapper) {\r\n        if (children.length === 1 && firstChild.type === 11 /* FOR */) {\r\n            // optimize away nested fragments when child is a ForNode\r\n            const vnodeCall = firstChild.codegenNode;\r\n            injectProp(vnodeCall, keyProperty, context);\r\n            return vnodeCall;\r\n        }\r\n        else {\r\n            let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n            let patchFlagText = shared.PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n            // check if the fragment actually contains a single valid child with\r\n            // the rest being comments\r\n            if (children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n                patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n                patchFlagText += `, ${shared.PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n            }\r\n            return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, false, false /* isComponent */, branch.loc);\r\n        }\r\n    }\r\n    else {\r\n        const ret = firstChild.codegenNode;\r\n        const vnodeCall = getMemoedVNodeCall(ret);\r\n        // Change createVNode to createBlock.\r\n        if (vnodeCall.type === 13 /* VNODE_CALL */) {\r\n            makeBlock(vnodeCall, context);\r\n        }\r\n        // inject branch key\r\n        injectProp(vnodeCall, keyProperty, context);\r\n        return ret;\r\n    }\r\n}\r\nfunction isSameKey(a, b) {\r\n    if (!a || a.type !== b.type) {\r\n        return false;\r\n    }\r\n    if (a.type === 6 /* ATTRIBUTE */) {\r\n        if (a.value.content !== b.value.content) {\r\n            return false;\r\n        }\r\n    }\r\n    else {\r\n        // directive\r\n        const exp = a.exp;\r\n        const branchExp = b.exp;\r\n        if (exp.type !== branchExp.type) {\r\n            return false;\r\n        }\r\n        if (exp.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n            exp.isStatic !== branchExp.isStatic ||\r\n            exp.content !== branchExp.content) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction getParentCondition(node) {\r\n    while (true) {\r\n        if (node.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n            if (node.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                node = node.alternate;\r\n            }\r\n            else {\r\n                return node;\r\n            }\r\n        }\r\n        else if (node.type === 20 /* JS_CACHE_EXPRESSION */) {\r\n            node = node.value;\r\n        }\r\n    }\r\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\r\n    const { helper, removeHelper } = context;\r\n    return processFor(node, dir, context, forNode => {\r\n        // create the loop render function expression now, and add the\r\n        // iterator on exit after all children have been traversed\r\n        const renderExp = createCallExpression(helper(RENDER_LIST), [\r\n            forNode.source\r\n        ]);\r\n        const memo = findDir(node, 'memo');\r\n        const keyProp = findProp(node, `key`);\r\n        const keyExp = keyProp &&\r\n            (keyProp.type === 6 /* ATTRIBUTE */\r\n                ? createSimpleExpression(keyProp.value.content, true)\r\n                : keyProp.exp);\r\n        const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\r\n        if (context.prefixIdentifiers && keyProperty) {\r\n            // #2085 process :key expression needs to be processed in order for it\r\n            // to behave consistently for <template v-for> and <div v-for>.\r\n            // In the case of `<template v-for>`, the node is discarded and never\r\n            // traversed so its key expression won't be processed by the normal\r\n            // transforms.\r\n            keyProperty.value = processExpression(keyProperty.value, context);\r\n        }\r\n        const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n            forNode.source.constType > 0 /* NOT_CONSTANT */;\r\n        const fragmentFlag = isStableFragment\r\n            ? 64 /* STABLE_FRAGMENT */\r\n            : keyProp\r\n                ? 128 /* KEYED_FRAGMENT */\r\n                : 256 /* UNKEYED_FRAGMENT */;\r\n        forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\r\n            (` /* ${shared.PatchFlagNames[fragmentFlag]} */` ), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\r\n        return () => {\r\n            // finish the codegen now that all children have been traversed\r\n            let childBlock;\r\n            const isTemplate = isTemplateNode(node);\r\n            const { children } = forNode;\r\n            // check <template v-for> key placement\r\n            if (isTemplate) {\r\n                node.children.some(c => {\r\n                    if (c.type === 1 /* ELEMENT */) {\r\n                        const key = findProp(c, 'key');\r\n                        if (key) {\r\n                            context.onError(createCompilerError(32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\r\n                            return true;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;\r\n            const slotOutlet = isSlotOutlet(node)\r\n                ? node\r\n                : isTemplate &&\r\n                    node.children.length === 1 &&\r\n                    isSlotOutlet(node.children[0])\r\n                    ? node.children[0] // api-extractor somehow fails to infer this\r\n                    : null;\r\n            if (slotOutlet) {\r\n                // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\r\n                childBlock = slotOutlet.codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    // <template v-for=\"...\" :key=\"...\"><slot/></template>\r\n                    // we need to inject the key to the renderSlot() call.\r\n                    // the props for renderSlot is passed as the 3rd argument.\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n            }\r\n            else if (needFragmentWrapper) {\r\n                // <template v-for=\"...\"> with text or multi-elements\r\n                // should generate a fragment block for each loop\r\n                childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* STABLE_FRAGMENT */ +\r\n                    (` /* ${shared.PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`\r\n                        ), undefined, undefined, true, undefined, false /* isComponent */);\r\n            }\r\n            else {\r\n                // Normal element v-for. Directly use the child's codegenNode\r\n                // but mark it as a block.\r\n                childBlock = children[0]\r\n                    .codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n                if (childBlock.isBlock !== !isStableFragment) {\r\n                    if (childBlock.isBlock) {\r\n                        // switch from block to vnode\r\n                        removeHelper(OPEN_BLOCK);\r\n                        removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                    else {\r\n                        // switch from vnode to block\r\n                        removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                }\r\n                childBlock.isBlock = !isStableFragment;\r\n                if (childBlock.isBlock) {\r\n                    helper(OPEN_BLOCK);\r\n                    helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n                else {\r\n                    helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n            }\r\n            if (memo) {\r\n                const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\r\n                    createSimpleExpression(`_cached`)\r\n                ]));\r\n                loop.body = createBlockStatement([\r\n                    createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\r\n                    createCompoundExpression([\r\n                        `if (_cached`,\r\n                        ...(keyExp ? [` && _cached.key === `, keyExp] : []),\r\n                        ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\r\n                    ]),\r\n                    createCompoundExpression([`const _item = `, childBlock]),\r\n                    createSimpleExpression(`_item.memo = _memo`),\r\n                    createSimpleExpression(`return _item`)\r\n                ]);\r\n                renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\r\n            }\r\n            else {\r\n                renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processFor(node, dir, context, processCodegen) {\r\n    if (!dir.exp) {\r\n        context.onError(createCompilerError(30 /* X_V_FOR_NO_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const parseResult = parseForExpression(\r\n    // can only be simple expression because vFor transform is applied\r\n    // before expression transform.\r\n    dir.exp, context);\r\n    if (!parseResult) {\r\n        context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const { addIdentifiers, removeIdentifiers, scopes } = context;\r\n    const { source, value, key, index } = parseResult;\r\n    const forNode = {\r\n        type: 11 /* FOR */,\r\n        loc: dir.loc,\r\n        source,\r\n        valueAlias: value,\r\n        keyAlias: key,\r\n        objectIndexAlias: index,\r\n        parseResult,\r\n        children: isTemplateNode(node) ? node.children : [node]\r\n    };\r\n    context.replaceNode(forNode);\r\n    // bookkeeping\r\n    scopes.vFor++;\r\n    if (context.prefixIdentifiers) {\r\n        // scope management\r\n        // inject identifiers to context\r\n        value && addIdentifiers(value);\r\n        key && addIdentifiers(key);\r\n        index && addIdentifiers(index);\r\n    }\r\n    const onExit = processCodegen && processCodegen(forNode);\r\n    return () => {\r\n        scopes.vFor--;\r\n        if (context.prefixIdentifiers) {\r\n            value && removeIdentifiers(value);\r\n            key && removeIdentifiers(key);\r\n            index && removeIdentifiers(index);\r\n        }\r\n        if (onExit)\r\n            onExit();\r\n    };\r\n}\r\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\r\n// This regex doesn't cover the case if key or index aliases have destructuring,\r\n// but those do not make sense in the first place, so this works in practice.\r\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\r\nconst stripParensRE = /^\\(|\\)$/g;\r\nfunction parseForExpression(input, context) {\r\n    const loc = input.loc;\r\n    const exp = input.content;\r\n    const inMatch = exp.match(forAliasRE);\r\n    if (!inMatch)\r\n        return;\r\n    const [, LHS, RHS] = inMatch;\r\n    const result = {\r\n        source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\r\n        value: undefined,\r\n        key: undefined,\r\n        index: undefined\r\n    };\r\n    if (context.prefixIdentifiers) {\r\n        result.source = processExpression(result.source, context);\r\n    }\r\n    let valueContent = LHS.trim().replace(stripParensRE, '').trim();\r\n    const trimmedOffset = LHS.indexOf(valueContent);\r\n    const iteratorMatch = valueContent.match(forIteratorRE);\r\n    if (iteratorMatch) {\r\n        valueContent = valueContent.replace(forIteratorRE, '').trim();\r\n        const keyContent = iteratorMatch[1].trim();\r\n        let keyOffset;\r\n        if (keyContent) {\r\n            keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\r\n            result.key = createAliasExpression(loc, keyContent, keyOffset);\r\n            if (context.prefixIdentifiers) {\r\n                result.key = processExpression(result.key, context, true);\r\n            }\r\n        }\r\n        if (iteratorMatch[2]) {\r\n            const indexContent = iteratorMatch[2].trim();\r\n            if (indexContent) {\r\n                result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\r\n                    ? keyOffset + keyContent.length\r\n                    : trimmedOffset + valueContent.length));\r\n                if (context.prefixIdentifiers) {\r\n                    result.index = processExpression(result.index, context, true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (valueContent) {\r\n        result.value = createAliasExpression(loc, valueContent, trimmedOffset);\r\n        if (context.prefixIdentifiers) {\r\n            result.value = processExpression(result.value, context, true);\r\n        }\r\n    }\r\n    return result;\r\n}\r\nfunction createAliasExpression(range, content, offset) {\r\n    return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\r\n}\r\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\r\n    return createParamsList([value, key, index, ...memoArgs]);\r\n}\r\nfunction createParamsList(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i])\r\n            break;\r\n    }\r\n    return args\r\n        .slice(0, i + 1)\r\n        .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\r\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\r\n// A NodeTransform that:\r\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\r\n//    by transformExpression. This is only applied in non-browser builds with\r\n//    { prefixIdentifiers: true }.\r\n// 2. Track v-slot depths so that we know a slot is inside another slot.\r\n//    Note the exit callback is executed before buildSlots() on the same node,\r\n//    so only nested slots see positive numbers.\r\nconst trackSlotScopes = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        (node.tagType === 1 /* COMPONENT */ ||\r\n            node.tagType === 3 /* TEMPLATE */)) {\r\n        // We are only checking non-empty v-slot here\r\n        // since we only care about slots that introduce scope variables.\r\n        const vSlot = findDir(node, 'slot');\r\n        if (vSlot) {\r\n            const slotProps = vSlot.exp;\r\n            if (context.prefixIdentifiers) {\r\n                slotProps && context.addIdentifiers(slotProps);\r\n            }\r\n            context.scopes.vSlot++;\r\n            return () => {\r\n                if (context.prefixIdentifiers) {\r\n                    slotProps && context.removeIdentifiers(slotProps);\r\n                }\r\n                context.scopes.vSlot--;\r\n            };\r\n        }\r\n    }\r\n};\r\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\r\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\r\nconst trackVForSlotScopes = (node, context) => {\r\n    let vFor;\r\n    if (isTemplateNode(node) &&\r\n        node.props.some(isVSlot) &&\r\n        (vFor = findDir(node, 'for'))) {\r\n        const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\r\n        if (result) {\r\n            const { value, key, index } = result;\r\n            const { addIdentifiers, removeIdentifiers } = context;\r\n            value && addIdentifiers(value);\r\n            key && addIdentifiers(key);\r\n            index && addIdentifiers(index);\r\n            return () => {\r\n                value && removeIdentifiers(value);\r\n                key && removeIdentifiers(key);\r\n                index && removeIdentifiers(index);\r\n            };\r\n        }\r\n    }\r\n};\r\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\r\n// Instead of being a DirectiveTransform, v-slot processing is called during\r\n// transformElement to build the slots object for a component.\r\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\r\n    context.helper(WITH_CTX);\r\n    const { children, loc } = node;\r\n    const slotsProperties = [];\r\n    const dynamicSlots = [];\r\n    // If the slot is inside a v-for or another v-slot, force it to be dynamic\r\n    // since it likely uses a scope variable.\r\n    let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\r\n    // with `prefixIdentifiers: true`, this can be further optimized to make\r\n    // it dynamic only when the slot actually uses the scope variables.\r\n    if (!context.ssr && context.prefixIdentifiers) {\r\n        hasDynamicSlots = hasScopeRef(node, context.identifiers);\r\n    }\r\n    // 1. Check for slot with slotProps on component itself.\r\n    //    <Comp v-slot=\"{ prop }\"/>\r\n    const onComponentSlot = findDir(node, 'slot', true);\r\n    if (onComponentSlot) {\r\n        const { arg, exp } = onComponentSlot;\r\n        if (arg && !isStaticExp(arg)) {\r\n            hasDynamicSlots = true;\r\n        }\r\n        slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\r\n    }\r\n    // 2. Iterate through children and check for template slots\r\n    //    <template v-slot:foo=\"{ prop }\">\r\n    let hasTemplateSlots = false;\r\n    let hasNamedDefaultSlot = false;\r\n    const implicitDefaultChildren = [];\r\n    const seenSlotNames = new Set();\r\n    for (let i = 0; i < children.length; i++) {\r\n        const slotElement = children[i];\r\n        let slotDir;\r\n        if (!isTemplateNode(slotElement) ||\r\n            !(slotDir = findDir(slotElement, 'slot', true))) {\r\n            // not a <template v-slot>, skip.\r\n            if (slotElement.type !== 3 /* COMMENT */) {\r\n                implicitDefaultChildren.push(slotElement);\r\n            }\r\n            continue;\r\n        }\r\n        if (onComponentSlot) {\r\n            // already has on-component slot - this is incorrect usage.\r\n            context.onError(createCompilerError(36 /* X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\r\n            break;\r\n        }\r\n        hasTemplateSlots = true;\r\n        const { children: slotChildren, loc: slotLoc } = slotElement;\r\n        const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\r\n        // check if name is dynamic.\r\n        let staticSlotName;\r\n        if (isStaticExp(slotName)) {\r\n            staticSlotName = slotName ? slotName.content : `default`;\r\n        }\r\n        else {\r\n            hasDynamicSlots = true;\r\n        }\r\n        const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\r\n        // check if this slot is conditional (v-if/v-for)\r\n        let vIf;\r\n        let vElse;\r\n        let vFor;\r\n        if ((vIf = findDir(slotElement, 'if'))) {\r\n            hasDynamicSlots = true;\r\n            dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback));\r\n        }\r\n        else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\r\n            // find adjacent v-if\r\n            let j = i;\r\n            let prev;\r\n            while (j--) {\r\n                prev = children[j];\r\n                if (prev.type !== 3 /* COMMENT */) {\r\n                    break;\r\n                }\r\n            }\r\n            if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\r\n                // remove node\r\n                children.splice(i, 1);\r\n                i--;\r\n                // attach this slot to previous conditional\r\n                let conditional = dynamicSlots[dynamicSlots.length - 1];\r\n                while (conditional.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                    conditional = conditional.alternate;\r\n                }\r\n                conditional.alternate = vElse.exp\r\n                    ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback)\r\n                    : buildDynamicSlot(slotName, slotFunction);\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\r\n            }\r\n        }\r\n        else if ((vFor = findDir(slotElement, 'for'))) {\r\n            hasDynamicSlots = true;\r\n            const parseResult = vFor.parseResult ||\r\n                parseForExpression(vFor.exp, context);\r\n            if (parseResult) {\r\n                // Render the dynamic slots as an array and add it to the createSlot()\r\n                // args. The runtime knows how to handle it appropriately.\r\n                dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\r\n                    parseResult.source,\r\n                    createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\r\n                ]));\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\r\n            }\r\n        }\r\n        else {\r\n            // check duplicate static names\r\n            if (staticSlotName) {\r\n                if (seenSlotNames.has(staticSlotName)) {\r\n                    context.onError(createCompilerError(37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\r\n                    continue;\r\n                }\r\n                seenSlotNames.add(staticSlotName);\r\n                if (staticSlotName === 'default') {\r\n                    hasNamedDefaultSlot = true;\r\n                }\r\n            }\r\n            slotsProperties.push(createObjectProperty(slotName, slotFunction));\r\n        }\r\n    }\r\n    if (!onComponentSlot) {\r\n        const buildDefaultSlotProperty = (props, children) => {\r\n            const fn = buildSlotFn(props, children, loc);\r\n            if (context.compatConfig) {\r\n                fn.isNonScopedSlot = true;\r\n            }\r\n            return createObjectProperty(`default`, fn);\r\n        };\r\n        if (!hasTemplateSlots) {\r\n            // implicit default slot (on component)\r\n            slotsProperties.push(buildDefaultSlotProperty(undefined, children));\r\n        }\r\n        else if (implicitDefaultChildren.length &&\r\n            // #3766\r\n            // with whitespace: 'preserve', whitespaces between slots will end up in\r\n            // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\r\n            implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\r\n            // implicit default slot (mixed with named slots)\r\n            if (hasNamedDefaultSlot) {\r\n                context.onError(createCompilerError(38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\r\n            }\r\n            else {\r\n                slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\r\n            }\r\n        }\r\n    }\r\n    const slotFlag = hasDynamicSlots\r\n        ? 2 /* DYNAMIC */\r\n        : hasForwardedSlots(node.children)\r\n            ? 3 /* FORWARDED */\r\n            : 1 /* STABLE */;\r\n    let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \r\n    // 2 = compiled but dynamic = can skip normalization, but must run diff\r\n    // 1 = compiled and static = can skip normalization AND diff as optimized\r\n    createSimpleExpression(slotFlag + (` /* ${shared.slotFlagsText[slotFlag]} */` ), false))), loc);\r\n    if (dynamicSlots.length) {\r\n        slots = createCallExpression(context.helper(CREATE_SLOTS), [\r\n            slots,\r\n            createArrayExpression(dynamicSlots)\r\n        ]);\r\n    }\r\n    return {\r\n        slots,\r\n        hasDynamicSlots\r\n    };\r\n}\r\nfunction buildDynamicSlot(name, fn) {\r\n    return createObjectExpression([\r\n        createObjectProperty(`name`, name),\r\n        createObjectProperty(`fn`, fn)\r\n    ]);\r\n}\r\nfunction hasForwardedSlots(children) {\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        switch (child.type) {\r\n            case 1 /* ELEMENT */:\r\n                if (child.tagType === 2 /* SLOT */ ||\r\n                    hasForwardedSlots(child.children)) {\r\n                    return true;\r\n                }\r\n                break;\r\n            case 9 /* IF */:\r\n                if (hasForwardedSlots(child.branches))\r\n                    return true;\r\n                break;\r\n            case 10 /* IF_BRANCH */:\r\n            case 11 /* FOR */:\r\n                if (hasForwardedSlots(child.children))\r\n                    return true;\r\n                break;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction isNonWhitespaceContent(node) {\r\n    if (node.type !== 2 /* TEXT */ && node.type !== 12 /* TEXT_CALL */)\r\n        return true;\r\n    return node.type === 2 /* TEXT */\r\n        ? !!node.content.trim()\r\n        : isNonWhitespaceContent(node.content);\r\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\r\n// import, which should be used instead of a resolveDirective call.\r\nconst directiveImportMap = new WeakMap();\r\n// generate a JavaScript AST for this element's codegen\r\nconst transformElement = (node, context) => {\r\n    // perform the work on exit, after all child expressions have been\r\n    // processed and merged.\r\n    return function postTransformElement() {\r\n        node = context.currentNode;\r\n        if (!(node.type === 1 /* ELEMENT */ &&\r\n            (node.tagType === 0 /* ELEMENT */ ||\r\n                node.tagType === 1 /* COMPONENT */))) {\r\n            return;\r\n        }\r\n        const { tag, props } = node;\r\n        const isComponent = node.tagType === 1 /* COMPONENT */;\r\n        // The goal of the transform is to create a codegenNode implementing the\r\n        // VNodeCall interface.\r\n        let vnodeTag = isComponent\r\n            ? resolveComponentType(node, context)\r\n            : `\"${tag}\"`;\r\n        const isDynamicComponent = shared.isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\r\n        let vnodeProps;\r\n        let vnodeChildren;\r\n        let vnodePatchFlag;\r\n        let patchFlag = 0;\r\n        let vnodeDynamicProps;\r\n        let dynamicPropNames;\r\n        let vnodeDirectives;\r\n        let shouldUseBlock = \r\n        // dynamic component may resolve to plain elements\r\n        isDynamicComponent ||\r\n            vnodeTag === TELEPORT ||\r\n            vnodeTag === SUSPENSE ||\r\n            (!isComponent &&\r\n                // <svg> and <foreignObject> must be forced into blocks so that block\r\n                // updates inside get proper isSVG flag at runtime. (#639, #643)\r\n                // This is technically web-specific, but splitting the logic out of core\r\n                // leads to too much unnecessary complexity.\r\n                (tag === 'svg' ||\r\n                    tag === 'foreignObject' ||\r\n                    // #938: elements with dynamic keys should be forced into blocks\r\n                    findProp(node, 'key', true)));\r\n        // props\r\n        if (props.length > 0) {\r\n            const propsBuildResult = buildProps(node, context);\r\n            vnodeProps = propsBuildResult.props;\r\n            patchFlag = propsBuildResult.patchFlag;\r\n            dynamicPropNames = propsBuildResult.dynamicPropNames;\r\n            const directives = propsBuildResult.directives;\r\n            vnodeDirectives =\r\n                directives && directives.length\r\n                    ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\r\n                    : undefined;\r\n        }\r\n        // children\r\n        if (node.children.length > 0) {\r\n            if (vnodeTag === KEEP_ALIVE) {\r\n                // Although a built-in component, we compile KeepAlive with raw children\r\n                // instead of slot functions so that it can be used inside Transition\r\n                // or other Transition-wrapping HOCs.\r\n                // To ensure correct updates with block optimizations, we need to:\r\n                // 1. Force keep-alive into a block. This avoids its children being\r\n                //    collected by a parent block.\r\n                shouldUseBlock = true;\r\n                // 2. Force keep-alive to always be updated, since it uses raw children.\r\n                patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                if (node.children.length > 1) {\r\n                    context.onError(createCompilerError(44 /* X_KEEP_ALIVE_INVALID_CHILDREN */, {\r\n                        start: node.children[0].loc.start,\r\n                        end: node.children[node.children.length - 1].loc.end,\r\n                        source: ''\r\n                    }));\r\n                }\r\n            }\r\n            const shouldBuildAsSlots = isComponent &&\r\n                // Teleport is not a real component and has dedicated runtime handling\r\n                vnodeTag !== TELEPORT &&\r\n                // explained above.\r\n                vnodeTag !== KEEP_ALIVE;\r\n            if (shouldBuildAsSlots) {\r\n                const { slots, hasDynamicSlots } = buildSlots(node, context);\r\n                vnodeChildren = slots;\r\n                if (hasDynamicSlots) {\r\n                    patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                }\r\n            }\r\n            else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\r\n                const child = node.children[0];\r\n                const type = child.type;\r\n                // check for dynamic text children\r\n                const hasDynamicTextChild = type === 5 /* INTERPOLATION */ ||\r\n                    type === 8 /* COMPOUND_EXPRESSION */;\r\n                if (hasDynamicTextChild &&\r\n                    getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                    patchFlag |= 1 /* TEXT */;\r\n                }\r\n                // pass directly if the only child is a text node\r\n                // (plain / interpolation / expression)\r\n                if (hasDynamicTextChild || type === 2 /* TEXT */) {\r\n                    vnodeChildren = child;\r\n                }\r\n                else {\r\n                    vnodeChildren = node.children;\r\n                }\r\n            }\r\n            else {\r\n                vnodeChildren = node.children;\r\n            }\r\n        }\r\n        // patchFlag & dynamicPropNames\r\n        if (patchFlag !== 0) {\r\n            {\r\n                if (patchFlag < 0) {\r\n                    // special flags (negative and mutually exclusive)\r\n                    vnodePatchFlag = patchFlag + ` /* ${shared.PatchFlagNames[patchFlag]} */`;\r\n                }\r\n                else {\r\n                    // bitwise flags\r\n                    const flagNames = Object.keys(shared.PatchFlagNames)\r\n                        .map(Number)\r\n                        .filter(n => n > 0 && patchFlag & n)\r\n                        .map(n => shared.PatchFlagNames[n])\r\n                        .join(`, `);\r\n                    vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\r\n                }\r\n            }\r\n            if (dynamicPropNames && dynamicPropNames.length) {\r\n                vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\r\n            }\r\n        }\r\n        node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\r\n    };\r\n};\r\nfunction resolveComponentType(node, context, ssr = false) {\r\n    let { tag } = node;\r\n    // 1. dynamic component\r\n    const isExplicitDynamic = isComponentTag(tag);\r\n    const isProp = findProp(node, 'is');\r\n    if (isProp) {\r\n        if (isExplicitDynamic ||\r\n            (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))) {\r\n            const exp = isProp.type === 6 /* ATTRIBUTE */\r\n                ? isProp.value && createSimpleExpression(isProp.value.content, true)\r\n                : isProp.exp;\r\n            if (exp) {\r\n                return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n                    exp\r\n                ]);\r\n            }\r\n        }\r\n        else if (isProp.type === 6 /* ATTRIBUTE */ &&\r\n            isProp.value.content.startsWith('vue:')) {\r\n            // <button is=\"vue:xxx\">\r\n            // if not <component>, only is value that starts with \"vue:\" will be\r\n            // treated as component by the parse phase and reach here, unless it's\r\n            // compat mode where all is values are considered components\r\n            tag = isProp.value.content.slice(4);\r\n        }\r\n    }\r\n    // 1.5 v-is (TODO: Deprecate)\r\n    const isDir = !isExplicitDynamic && findDir(node, 'is');\r\n    if (isDir && isDir.exp) {\r\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n            isDir.exp\r\n        ]);\r\n    }\r\n    // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\r\n    const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\r\n    if (builtIn) {\r\n        // built-ins are simply fallthroughs / have special handling during ssr\r\n        // so we don't need to import their runtime equivalents\r\n        if (!ssr)\r\n            context.helper(builtIn);\r\n        return builtIn;\r\n    }\r\n    // 3. user component (from setup bindings)\r\n    // this is skipped in browser build since browser builds do not perform\r\n    // binding analysis.\r\n    {\r\n        const fromSetup = resolveSetupReference(tag, context);\r\n        if (fromSetup) {\r\n            return fromSetup;\r\n        }\r\n        const dotIndex = tag.indexOf('.');\r\n        if (dotIndex > 0) {\r\n            const ns = resolveSetupReference(tag.slice(0, dotIndex), context);\r\n            if (ns) {\r\n                return ns + tag.slice(dotIndex);\r\n            }\r\n        }\r\n    }\r\n    // 4. Self referencing component (inferred from filename)\r\n    if (context.selfName &&\r\n        shared.capitalize(shared.camelize(tag)) === context.selfName) {\r\n        context.helper(RESOLVE_COMPONENT);\r\n        // codegen.ts has special check for __self postfix when generating\r\n        // component imports, which will pass additional `maybeSelfReference` flag\r\n        // to `resolveComponent`.\r\n        context.components.add(tag + `__self`);\r\n        return toValidAssetId(tag, `component`);\r\n    }\r\n    // 5. user component (resolve)\r\n    context.helper(RESOLVE_COMPONENT);\r\n    context.components.add(tag);\r\n    return toValidAssetId(tag, `component`);\r\n}\r\nfunction resolveSetupReference(name, context) {\r\n    const bindings = context.bindingMetadata;\r\n    if (!bindings || bindings.__isScriptSetup === false) {\r\n        return;\r\n    }\r\n    const camelName = shared.camelize(name);\r\n    const PascalName = shared.capitalize(camelName);\r\n    const checkType = (type) => {\r\n        if (bindings[name] === type) {\r\n            return name;\r\n        }\r\n        if (bindings[camelName] === type) {\r\n            return camelName;\r\n        }\r\n        if (bindings[PascalName] === type) {\r\n            return PascalName;\r\n        }\r\n    };\r\n    const fromConst = checkType(\"setup-const\" /* SETUP_CONST */);\r\n    if (fromConst) {\r\n        return context.inline\r\n            ? // in inline mode, const setup bindings (e.g. imports) can be used as-is\r\n                fromConst\r\n            : `$setup[${JSON.stringify(fromConst)}]`;\r\n    }\r\n    const fromMaybeRef = checkType(\"setup-let\" /* SETUP_LET */) ||\r\n        checkType(\"setup-ref\" /* SETUP_REF */) ||\r\n        checkType(\"setup-maybe-ref\" /* SETUP_MAYBE_REF */);\r\n    if (fromMaybeRef) {\r\n        return context.inline\r\n            ? // setup scope bindings that may be refs need to be unrefed\r\n                `${context.helperString(UNREF)}(${fromMaybeRef})`\r\n            : `$setup[${JSON.stringify(fromMaybeRef)}]`;\r\n    }\r\n}\r\nfunction buildProps(node, context, props = node.props, ssr = false) {\r\n    const { tag, loc: elementLoc } = node;\r\n    const isComponent = node.tagType === 1 /* COMPONENT */;\r\n    let properties = [];\r\n    const mergeArgs = [];\r\n    const runtimeDirectives = [];\r\n    // patchFlag analysis\r\n    let patchFlag = 0;\r\n    let hasRef = false;\r\n    let hasClassBinding = false;\r\n    let hasStyleBinding = false;\r\n    let hasHydrationEventBinding = false;\r\n    let hasDynamicKeys = false;\r\n    let hasVnodeHook = false;\r\n    const dynamicPropNames = [];\r\n    const analyzePatchFlag = ({ key, value }) => {\r\n        if (isStaticExp(key)) {\r\n            const name = key.content;\r\n            const isEventHandler = shared.isOn(name);\r\n            if (!isComponent &&\r\n                isEventHandler &&\r\n                // omit the flag for click handlers because hydration gives click\r\n                // dedicated fast path.\r\n                name.toLowerCase() !== 'onclick' &&\r\n                // omit v-model handlers\r\n                name !== 'onUpdate:modelValue' &&\r\n                // omit onVnodeXXX hooks\r\n                !shared.isReservedProp(name)) {\r\n                hasHydrationEventBinding = true;\r\n            }\r\n            if (isEventHandler && shared.isReservedProp(name)) {\r\n                hasVnodeHook = true;\r\n            }\r\n            if (value.type === 20 /* JS_CACHE_EXPRESSION */ ||\r\n                ((value.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n                    value.type === 8 /* COMPOUND_EXPRESSION */) &&\r\n                    getConstantType(value, context) > 0)) {\r\n                // skip if the prop is a cached handler or has constant value\r\n                return;\r\n            }\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n            }\r\n            else if (name === 'class') {\r\n                hasClassBinding = true;\r\n            }\r\n            else if (name === 'style') {\r\n                hasStyleBinding = true;\r\n            }\r\n            else if (name !== 'key' && !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n            // treat the dynamic class and style binding of the component as dynamic props\r\n            if (isComponent &&\r\n                (name === 'class' || name === 'style') &&\r\n                !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n        }\r\n        else {\r\n            hasDynamicKeys = true;\r\n        }\r\n    };\r\n    for (let i = 0; i < props.length; i++) {\r\n        // static attribute\r\n        const prop = props[i];\r\n        if (prop.type === 6 /* ATTRIBUTE */) {\r\n            const { loc, name, value } = prop;\r\n            let isStatic = true;\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n                // in inline mode there is no setupState object, so we can't use string\r\n                // keys to set the ref. Instead, we need to transform it to pass the\r\n                // acrtual ref instead.\r\n                if (context.inline) {\r\n                    isStatic = false;\r\n                }\r\n            }\r\n            // skip is on <component>, or is=\"vue:xxx\"\r\n            if (name === 'is' &&\r\n                (isComponentTag(tag) ||\r\n                    (value && value.content.startsWith('vue:')) ||\r\n                    (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context)))) {\r\n                continue;\r\n            }\r\n            properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\r\n        }\r\n        else {\r\n            // directives\r\n            const { name, arg, exp, loc } = prop;\r\n            const isVBind = name === 'bind';\r\n            const isVOn = name === 'on';\r\n            // skip v-slot - it is handled by its dedicated transform.\r\n            if (name === 'slot') {\r\n                if (!isComponent) {\r\n                    context.onError(createCompilerError(39 /* X_V_SLOT_MISPLACED */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            // skip v-once/v-memo - they are handled by dedicated transforms.\r\n            if (name === 'once' || name === 'memo') {\r\n                continue;\r\n            }\r\n            // skip v-is and :is on <component>\r\n            if (name === 'is' ||\r\n                (isVBind &&\r\n                    isBindKey(arg, 'is') &&\r\n                    (isComponentTag(tag) ||\r\n                        (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))))) {\r\n                continue;\r\n            }\r\n            // skip v-on in SSR compilation\r\n            if (isVOn && ssr) {\r\n                continue;\r\n            }\r\n            // special case for v-bind and v-on with no argument\r\n            if (!arg && (isVBind || isVOn)) {\r\n                hasDynamicKeys = true;\r\n                if (exp) {\r\n                    if (properties.length) {\r\n                        mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n                        properties = [];\r\n                    }\r\n                    if (isVBind) {\r\n                        {\r\n                            // 2.x v-bind object order compat\r\n                            {\r\n                                const hasOverridableKeys = mergeArgs.some(arg => {\r\n                                    if (arg.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n                                        return arg.properties.some(({ key }) => {\r\n                                            if (key.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n                                                !key.isStatic) {\r\n                                                return true;\r\n                                            }\r\n                                            return (key.content !== 'class' &&\r\n                                                key.content !== 'style' &&\r\n                                                !shared.isOn(key.content));\r\n                                        });\r\n                                    }\r\n                                    else {\r\n                                        // dynamic expression\r\n                                        return true;\r\n                                    }\r\n                                });\r\n                                if (hasOverridableKeys) {\r\n                                    checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\r\n                                }\r\n                            }\r\n                            if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context)) {\r\n                                mergeArgs.unshift(exp);\r\n                                continue;\r\n                            }\r\n                        }\r\n                        mergeArgs.push(exp);\r\n                    }\r\n                    else {\r\n                        // v-on=\"obj\" -> toHandlers(obj)\r\n                        mergeArgs.push({\r\n                            type: 14 /* JS_CALL_EXPRESSION */,\r\n                            loc,\r\n                            callee: context.helper(TO_HANDLERS),\r\n                            arguments: [exp]\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    context.onError(createCompilerError(isVBind\r\n                        ? 33 /* X_V_BIND_NO_EXPRESSION */\r\n                        : 34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            const directiveTransform = context.directiveTransforms[name];\r\n            if (directiveTransform) {\r\n                // has built-in directive transform.\r\n                const { props, needRuntime } = directiveTransform(prop, node, context);\r\n                !ssr && props.forEach(analyzePatchFlag);\r\n                properties.push(...props);\r\n                if (needRuntime) {\r\n                    runtimeDirectives.push(prop);\r\n                    if (shared.isSymbol(needRuntime)) {\r\n                        directiveImportMap.set(prop, needRuntime);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                // no built-in transform, this is a user custom directive.\r\n                runtimeDirectives.push(prop);\r\n            }\r\n        }\r\n        if (prop.type === 6 /* ATTRIBUTE */ &&\r\n            prop.name === 'ref' &&\r\n            context.scopes.vFor > 0 &&\r\n            checkCompatEnabled(\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */, context, prop.loc)) {\r\n            properties.push(createObjectProperty(createSimpleExpression('refInFor', true), createSimpleExpression('true', false)));\r\n        }\r\n    }\r\n    let propsExpression = undefined;\r\n    // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\r\n    if (mergeArgs.length) {\r\n        if (properties.length) {\r\n            mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n        }\r\n        if (mergeArgs.length > 1) {\r\n            propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\r\n        }\r\n        else {\r\n            // single v-bind with nothing else - no need for a mergeProps call\r\n            propsExpression = mergeArgs[0];\r\n        }\r\n    }\r\n    else if (properties.length) {\r\n        propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\r\n    }\r\n    // patchFlag analysis\r\n    if (hasDynamicKeys) {\r\n        patchFlag |= 16 /* FULL_PROPS */;\r\n    }\r\n    else {\r\n        if (hasClassBinding && !isComponent) {\r\n            patchFlag |= 2 /* CLASS */;\r\n        }\r\n        if (hasStyleBinding && !isComponent) {\r\n            patchFlag |= 4 /* STYLE */;\r\n        }\r\n        if (dynamicPropNames.length) {\r\n            patchFlag |= 8 /* PROPS */;\r\n        }\r\n        if (hasHydrationEventBinding) {\r\n            patchFlag |= 32 /* HYDRATE_EVENTS */;\r\n        }\r\n    }\r\n    if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */) &&\r\n        (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\r\n        patchFlag |= 512 /* NEED_PATCH */;\r\n    }\r\n    // pre-normalize props, SSR is skipped for now\r\n    if (!context.inSSR && propsExpression) {\r\n        switch (propsExpression.type) {\r\n            case 15 /* JS_OBJECT_EXPRESSION */:\r\n                // means that there is no v-bind,\r\n                // but still need to deal with dynamic key binding\r\n                let classKeyIndex = -1;\r\n                let styleKeyIndex = -1;\r\n                let hasDynamicKey = false;\r\n                for (let i = 0; i < propsExpression.properties.length; i++) {\r\n                    const key = propsExpression.properties[i].key;\r\n                    if (isStaticExp(key)) {\r\n                        if (key.content === 'class') {\r\n                            classKeyIndex = i;\r\n                        }\r\n                        else if (key.content === 'style') {\r\n                            styleKeyIndex = i;\r\n                        }\r\n                    }\r\n                    else if (!key.isHandlerKey) {\r\n                        hasDynamicKey = true;\r\n                    }\r\n                }\r\n                const classProp = propsExpression.properties[classKeyIndex];\r\n                const styleProp = propsExpression.properties[styleKeyIndex];\r\n                // no dynamic key\r\n                if (!hasDynamicKey) {\r\n                    if (classProp && !isStaticExp(classProp.value)) {\r\n                        classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\r\n                    }\r\n                    if (styleProp &&\r\n                        !isStaticExp(styleProp.value) &&\r\n                        // the static style is compiled into an object,\r\n                        // so use `hasStyleBinding` to ensure that it is a dynamic style binding\r\n                        hasStyleBinding) {\r\n                        styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\r\n                    }\r\n                }\r\n                else {\r\n                    // dynamic key binding, wrap with `normalizeProps`\r\n                    propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\r\n                }\r\n                break;\r\n            case 14 /* JS_CALL_EXPRESSION */:\r\n                // mergeProps call, do nothing\r\n                break;\r\n            default:\r\n                // single v-bind\r\n                propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\r\n                    createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\r\n                        propsExpression\r\n                    ])\r\n                ]);\r\n                break;\r\n        }\r\n    }\r\n    return {\r\n        props: propsExpression,\r\n        directives: runtimeDirectives,\r\n        patchFlag,\r\n        dynamicPropNames\r\n    };\r\n}\r\n// Dedupe props in an object literal.\r\n// Literal duplicated attributes would have been warned during the parse phase,\r\n// however, it's possible to encounter duplicated `onXXX` handlers with different\r\n// modifiers. We also need to merge static and dynamic class / style attributes.\r\n// - onXXX handlers / style: merge into array\r\n// - class: merge into single expression with concatenation\r\nfunction dedupeProperties(properties) {\r\n    const knownProps = new Map();\r\n    const deduped = [];\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const prop = properties[i];\r\n        // dynamic keys are always allowed\r\n        if (prop.key.type === 8 /* COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\r\n            deduped.push(prop);\r\n            continue;\r\n        }\r\n        const name = prop.key.content;\r\n        const existing = knownProps.get(name);\r\n        if (existing) {\r\n            if (name === 'style' || name === 'class' || name.startsWith('on')) {\r\n                mergeAsArray(existing, prop);\r\n            }\r\n            // unexpected duplicate, should have emitted error during parse\r\n        }\r\n        else {\r\n            knownProps.set(name, prop);\r\n            deduped.push(prop);\r\n        }\r\n    }\r\n    return deduped;\r\n}\r\nfunction mergeAsArray(existing, incoming) {\r\n    if (existing.value.type === 17 /* JS_ARRAY_EXPRESSION */) {\r\n        existing.value.elements.push(incoming.value);\r\n    }\r\n    else {\r\n        existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\r\n    }\r\n}\r\nfunction buildDirectiveArgs(dir, context) {\r\n    const dirArgs = [];\r\n    const runtime = directiveImportMap.get(dir);\r\n    if (runtime) {\r\n        // built-in directive with runtime\r\n        dirArgs.push(context.helperString(runtime));\r\n    }\r\n    else {\r\n        // user directive.\r\n        // see if we have directives exposed via <script setup>\r\n        const fromSetup = resolveSetupReference('v-' + dir.name, context);\r\n        if (fromSetup) {\r\n            dirArgs.push(fromSetup);\r\n        }\r\n        else {\r\n            // inject statement for resolving directive\r\n            context.helper(RESOLVE_DIRECTIVE);\r\n            context.directives.add(dir.name);\r\n            dirArgs.push(toValidAssetId(dir.name, `directive`));\r\n        }\r\n    }\r\n    const { loc } = dir;\r\n    if (dir.exp)\r\n        dirArgs.push(dir.exp);\r\n    if (dir.arg) {\r\n        if (!dir.exp) {\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        dirArgs.push(dir.arg);\r\n    }\r\n    if (Object.keys(dir.modifiers).length) {\r\n        if (!dir.arg) {\r\n            if (!dir.exp) {\r\n                dirArgs.push(`void 0`);\r\n            }\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        const trueExpression = createSimpleExpression(`true`, false, loc);\r\n        dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\r\n    }\r\n    return createArrayExpression(dirArgs, dir.loc);\r\n}\r\nfunction stringifyDynamicPropNames(props) {\r\n    let propsNamesString = `[`;\r\n    for (let i = 0, l = props.length; i < l; i++) {\r\n        propsNamesString += JSON.stringify(props[i]);\r\n        if (i < l - 1)\r\n            propsNamesString += ', ';\r\n    }\r\n    return propsNamesString + `]`;\r\n}\r\nfunction isComponentTag(tag) {\r\n    return tag[0].toLowerCase() + tag.slice(1) === 'component';\r\n}\n\nObject.freeze({})\r\n    ;\r\nObject.freeze([]) ;\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\n\nconst transformSlotOutlet = (node, context) => {\r\n    if (isSlotOutlet(node)) {\r\n        const { children, loc } = node;\r\n        const { slotName, slotProps } = processSlotOutlet(node, context);\r\n        const slotArgs = [\r\n            context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\r\n            slotName\r\n        ];\r\n        if (slotProps) {\r\n            slotArgs.push(slotProps);\r\n        }\r\n        if (children.length) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            slotArgs.push(createFunctionExpression([], children, false, false, loc));\r\n        }\r\n        if (context.scopeId && !context.slotted) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            if (!children.length) {\r\n                slotArgs.push(`undefined`);\r\n            }\r\n            slotArgs.push(`true`);\r\n        }\r\n        node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\r\n    }\r\n};\r\nfunction processSlotOutlet(node, context) {\r\n    let slotName = `\"default\"`;\r\n    let slotProps = undefined;\r\n    const nonNameProps = [];\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.value) {\r\n                if (p.name === 'name') {\r\n                    slotName = JSON.stringify(p.value.content);\r\n                }\r\n                else {\r\n                    p.name = camelize(p.name);\r\n                    nonNameProps.push(p);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            if (p.name === 'bind' && isBindKey(p.arg, 'name')) {\r\n                if (p.exp)\r\n                    slotName = p.exp;\r\n            }\r\n            else {\r\n                if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\r\n                    p.arg.content = camelize(p.arg.content);\r\n                }\r\n                nonNameProps.push(p);\r\n            }\r\n        }\r\n    }\r\n    if (nonNameProps.length > 0) {\r\n        const { props, directives } = buildProps(node, context, nonNameProps);\r\n        slotProps = props;\r\n        if (directives.length) {\r\n            context.onError(createCompilerError(35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\r\n        }\r\n    }\r\n    return {\r\n        slotName,\r\n        slotProps\r\n    };\r\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^\\s*function(?:\\s+[\\w$]+)?\\s*\\(/;\r\nconst transformOn = (dir, node, context, augmentor) => {\r\n    const { loc, modifiers, arg } = dir;\r\n    if (!dir.exp && !modifiers.length) {\r\n        context.onError(createCompilerError(34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n    }\r\n    let eventName;\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            const rawName = arg.content;\r\n            // for all event listeners, auto convert it to camelCase. See issue #2249\r\n            eventName = createSimpleExpression(shared.toHandlerKey(shared.camelize(rawName)), true, arg.loc);\r\n        }\r\n        else {\r\n            // #2388\r\n            eventName = createCompoundExpression([\r\n                `${context.helperString(TO_HANDLER_KEY)}(`,\r\n                arg,\r\n                `)`\r\n            ]);\r\n        }\r\n    }\r\n    else {\r\n        // already a compound expression.\r\n        eventName = arg;\r\n        eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\r\n        eventName.children.push(`)`);\r\n    }\r\n    // handler processing\r\n    let exp = dir.exp;\r\n    if (exp && !exp.content.trim()) {\r\n        exp = undefined;\r\n    }\r\n    let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\r\n    if (exp) {\r\n        const isMemberExp = isMemberExpression(exp.content);\r\n        const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\r\n        const hasMultipleStatements = exp.content.includes(`;`);\r\n        // process the expression since it's been skipped\r\n        if (context.prefixIdentifiers) {\r\n            isInlineStatement && context.addIdentifiers(`$event`);\r\n            exp = dir.exp = processExpression(exp, context, false, hasMultipleStatements);\r\n            isInlineStatement && context.removeIdentifiers(`$event`);\r\n            // with scope analysis, the function is hoistable if it has no reference\r\n            // to scope variables.\r\n            shouldCache =\r\n                context.cacheHandlers &&\r\n                    // unnecessary to cache inside v-once\r\n                    !context.inVOnce &&\r\n                    // runtime constants don't need to be cached\r\n                    // (this is analyzed by compileScript in SFC <script setup>)\r\n                    !(exp.type === 4 /* SIMPLE_EXPRESSION */ && exp.constType > 0) &&\r\n                    // #1541 bail if this is a member exp handler passed to a component -\r\n                    // we need to use the original function to preserve arity,\r\n                    // e.g. <transition> relies on checking cb.length to determine\r\n                    // transition end handling. Inline function is ok since its arity\r\n                    // is preserved even when cached.\r\n                    !(isMemberExp && node.tagType === 1 /* COMPONENT */) &&\r\n                    // bail if the function references closure variables (v-for, v-slot)\r\n                    // it must be passed fresh to avoid stale values.\r\n                    !hasScopeRef(exp, context.identifiers);\r\n            // If the expression is optimizable and is a member expression pointing\r\n            // to a function, turn it into invocation (and wrap in an arrow function\r\n            // below) so that it always accesses the latest value when called - thus\r\n            // avoiding the need to be patched.\r\n            if (shouldCache && isMemberExp) {\r\n                if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                    exp.content = `${exp.content} && ${exp.content}(...args)`;\r\n                }\r\n                else {\r\n                    exp.children = [...exp.children, ` && `, ...exp.children, `(...args)`];\r\n                }\r\n            }\r\n        }\r\n        if (isInlineStatement || (shouldCache && isMemberExp)) {\r\n            // wrap inline statement in a function expression\r\n            exp = createCompoundExpression([\r\n                `${isInlineStatement\r\n                    ? context.isTS\r\n                        ? `($event: any)`\r\n                        : `$event`\r\n                    : `${context.isTS ? `\\n//@ts-ignore\\n` : ``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\r\n                exp,\r\n                hasMultipleStatements ? `}` : `)`\r\n            ]);\r\n        }\r\n    }\r\n    let ret = {\r\n        props: [\r\n            createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\r\n        ]\r\n    };\r\n    // apply extended compiler augmentor\r\n    if (augmentor) {\r\n        ret = augmentor(ret);\r\n    }\r\n    if (shouldCache) {\r\n        // cache handlers so that it's always the same handler being passed down.\r\n        // this avoids unnecessary re-renders when users use inline handlers on\r\n        // components.\r\n        ret.props[0].value = context.cache(ret.props[0].value);\r\n    }\r\n    // mark the key as handler for props normalization check\r\n    ret.props.forEach(p => (p.key.isHandlerKey = true));\r\n    return ret;\r\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\r\n// codegen for the entire props object. This transform here is only for v-bind\r\n// *with* args.\r\nconst transformBind = (dir, _node, context) => {\r\n    const { exp, modifiers, loc } = dir;\r\n    const arg = dir.arg;\r\n    if (arg.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n        arg.children.unshift(`(`);\r\n        arg.children.push(`) || \"\"`);\r\n    }\r\n    else if (!arg.isStatic) {\r\n        arg.content = `${arg.content} || \"\"`;\r\n    }\r\n    // .sync is replaced by v-model:arg\r\n    if (modifiers.includes('camel')) {\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            if (arg.isStatic) {\r\n                arg.content = shared.camelize(arg.content);\r\n            }\r\n            else {\r\n                arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\r\n            }\r\n        }\r\n        else {\r\n            arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\r\n            arg.children.push(`)`);\r\n        }\r\n    }\r\n    if (!context.inSSR) {\r\n        if (modifiers.includes('prop')) {\r\n            injectPrefix(arg, '.');\r\n        }\r\n        if (modifiers.includes('attr')) {\r\n            injectPrefix(arg, '^');\r\n        }\r\n    }\r\n    if (!exp ||\r\n        (exp.type === 4 /* SIMPLE_EXPRESSION */ && !exp.content.trim())) {\r\n        context.onError(createCompilerError(33 /* X_V_BIND_NO_EXPRESSION */, loc));\r\n        return {\r\n            props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\r\n        };\r\n    }\r\n    return {\r\n        props: [createObjectProperty(arg, exp)]\r\n    };\r\n};\r\nconst injectPrefix = (arg, prefix) => {\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            arg.content = prefix + arg.content;\r\n        }\r\n        else {\r\n            arg.content = `\\`${prefix}\\${${arg.content}}\\``;\r\n        }\r\n    }\r\n    else {\r\n        arg.children.unshift(`'${prefix}' + (`);\r\n        arg.children.push(`)`);\r\n    }\r\n};\n\n// Merge adjacent text nodes and expressions into a single expression\r\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\r\nconst transformText = (node, context) => {\r\n    if (node.type === 0 /* ROOT */ ||\r\n        node.type === 1 /* ELEMENT */ ||\r\n        node.type === 11 /* FOR */ ||\r\n        node.type === 10 /* IF_BRANCH */) {\r\n        // perform the transform on node exit so that all expressions have already\r\n        // been processed.\r\n        return () => {\r\n            const children = node.children;\r\n            let currentContainer = undefined;\r\n            let hasText = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child)) {\r\n                    hasText = true;\r\n                    for (let j = i + 1; j < children.length; j++) {\r\n                        const next = children[j];\r\n                        if (isText(next)) {\r\n                            if (!currentContainer) {\r\n                                currentContainer = children[i] = {\r\n                                    type: 8 /* COMPOUND_EXPRESSION */,\r\n                                    loc: child.loc,\r\n                                    children: [child]\r\n                                };\r\n                            }\r\n                            // merge adjacent text node into current\r\n                            currentContainer.children.push(` + `, next);\r\n                            children.splice(j, 1);\r\n                            j--;\r\n                        }\r\n                        else {\r\n                            currentContainer = undefined;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (!hasText ||\r\n                // if this is a plain element with a single text child, leave it\r\n                // as-is since the runtime has dedicated fast path for this by directly\r\n                // setting textContent of the element.\r\n                // for component root it's always normalized anyway.\r\n                (children.length === 1 &&\r\n                    (node.type === 0 /* ROOT */ ||\r\n                        (node.type === 1 /* ELEMENT */ &&\r\n                            node.tagType === 0 /* ELEMENT */ &&\r\n                            // #3756\r\n                            // custom directives can potentially add DOM elements arbitrarily,\r\n                            // we need to avoid setting textContent of the element at runtime\r\n                            // to avoid accidentally overwriting the DOM elements added\r\n                            // by the user through custom directives.\r\n                            !node.props.find(p => p.type === 7 /* DIRECTIVE */ &&\r\n                                !context.directiveTransforms[p.name]) &&\r\n                            // in compat mode, <template> tags with no special directives\r\n                            // will be rendered as a fragment so its children must be\r\n                            // converted into vnodes.\r\n                            !(node.tag === 'template'))))) {\r\n                return;\r\n            }\r\n            // pre-convert text nodes into createTextVNode(text) calls to avoid\r\n            // runtime normalization.\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child) || child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                    const callArgs = [];\r\n                    // createTextVNode defaults to single whitespace, so if it is a\r\n                    // single space the code could be an empty call to save bytes.\r\n                    if (child.type !== 2 /* TEXT */ || child.content !== ' ') {\r\n                        callArgs.push(child);\r\n                    }\r\n                    // mark dynamic text with flag so it gets patched inside a block\r\n                    if (!context.ssr &&\r\n                        getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                        callArgs.push(1 /* TEXT */ +\r\n                            (` /* ${shared.PatchFlagNames[1 /* TEXT */]} */` ));\r\n                    }\r\n                    children[i] = {\r\n                        type: 12 /* TEXT_CALL */,\r\n                        content: child,\r\n                        loc: child.loc,\r\n                        codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\r\n                    };\r\n                }\r\n            }\r\n        };\r\n    }\r\n};\n\nconst seen = new WeakSet();\r\nconst transformOnce = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ && findDir(node, 'once', true)) {\r\n        if (seen.has(node) || context.inVOnce) {\r\n            return;\r\n        }\r\n        seen.add(node);\r\n        context.inVOnce = true;\r\n        context.helper(SET_BLOCK_TRACKING);\r\n        return () => {\r\n            context.inVOnce = false;\r\n            const cur = context.currentNode;\r\n            if (cur.codegenNode) {\r\n                cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\r\n            }\r\n        };\r\n    }\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n    const { exp, arg } = dir;\r\n    if (!exp) {\r\n        context.onError(createCompilerError(40 /* X_V_MODEL_NO_EXPRESSION */, dir.loc));\r\n        return createTransformProps();\r\n    }\r\n    const rawExp = exp.loc.source;\r\n    const expString = exp.type === 4 /* SIMPLE_EXPRESSION */ ? exp.content : rawExp;\r\n    // im SFC <script setup> inline mode, the exp may have been transformed into\r\n    // _unref(exp)\r\n    const bindingType = context.bindingMetadata[rawExp];\r\n    const maybeRef = context.inline &&\r\n        bindingType &&\r\n        bindingType !== \"setup-const\" /* SETUP_CONST */;\r\n    if (!expString.trim() || (!isMemberExpression(expString) && !maybeRef)) {\r\n        context.onError(createCompilerError(41 /* X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\r\n        return createTransformProps();\r\n    }\r\n    if (context.prefixIdentifiers &&\r\n        isSimpleIdentifier(expString) &&\r\n        context.identifiers[expString]) {\r\n        context.onError(createCompilerError(42 /* X_V_MODEL_ON_SCOPE_VARIABLE */, exp.loc));\r\n        return createTransformProps();\r\n    }\r\n    const propName = arg ? arg : createSimpleExpression('modelValue', true);\r\n    const eventName = arg\r\n        ? isStaticExp(arg)\r\n            ? `onUpdate:${arg.content}`\r\n            : createCompoundExpression(['\"onUpdate:\" + ', arg])\r\n        : `onUpdate:modelValue`;\r\n    let assignmentExp;\r\n    const eventArg = context.isTS ? `($event: any)` : `$event`;\r\n    if (maybeRef) {\r\n        if (bindingType === \"setup-ref\" /* SETUP_REF */) {\r\n            // v-model used on known ref.\r\n            assignmentExp = createCompoundExpression([\r\n                `${eventArg} => (`,\r\n                createSimpleExpression(rawExp, false, exp.loc),\r\n                `.value = $event)`\r\n            ]);\r\n        }\r\n        else {\r\n            // v-model used on a potentially ref binding in <script setup> inline mode.\r\n            // the assignment needs to check whether the binding is actually a ref.\r\n            const altAssignment = bindingType === \"setup-let\" /* SETUP_LET */ ? `${rawExp} = $event` : `null`;\r\n            assignmentExp = createCompoundExpression([\r\n                `${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? `,\r\n                createSimpleExpression(rawExp, false, exp.loc),\r\n                `.value = $event : ${altAssignment})`\r\n            ]);\r\n        }\r\n    }\r\n    else {\r\n        assignmentExp = createCompoundExpression([\r\n            `${eventArg} => (`,\r\n            exp,\r\n            ` = $event)`\r\n        ]);\r\n    }\r\n    const props = [\r\n        // modelValue: foo\r\n        createObjectProperty(propName, dir.exp),\r\n        // \"onUpdate:modelValue\": $event => (foo = $event)\r\n        createObjectProperty(eventName, assignmentExp)\r\n    ];\r\n    // cache v-model handler if applicable (when it doesn't refer any scope vars)\r\n    if (context.prefixIdentifiers &&\r\n        !context.inVOnce &&\r\n        context.cacheHandlers &&\r\n        !hasScopeRef(exp, context.identifiers)) {\r\n        props[1].value = context.cache(props[1].value);\r\n    }\r\n    // modelModifiers: { foo: true, \"bar-baz\": true }\r\n    if (dir.modifiers.length && node.tagType === 1 /* COMPONENT */) {\r\n        const modifiers = dir.modifiers\r\n            .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\r\n            .join(`, `);\r\n        const modifiersKey = arg\r\n            ? isStaticExp(arg)\r\n                ? `${arg.content}Modifiers`\r\n                : createCompoundExpression([arg, ' + \"Modifiers\"'])\r\n            : `modelModifiers`;\r\n        props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* CAN_HOIST */)));\r\n    }\r\n    return createTransformProps(props);\r\n};\r\nfunction createTransformProps(props = []) {\r\n    return { props };\r\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\r\nconst transformFilter = (node, context) => {\r\n    if (!isCompatEnabled(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context)) {\r\n        return;\r\n    }\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        // filter rewrite is applied before expression transform so only\r\n        // simple expressions are possible at this stage\r\n        rewriteFilter(node.content, context);\r\n    }\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        node.props.forEach((prop) => {\r\n            if (prop.type === 7 /* DIRECTIVE */ &&\r\n                prop.name !== 'for' &&\r\n                prop.exp) {\r\n                rewriteFilter(prop.exp, context);\r\n            }\r\n        });\r\n    }\r\n};\r\nfunction rewriteFilter(node, context) {\r\n    if (node.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        parseFilter(node, context);\r\n    }\r\n    else {\r\n        for (let i = 0; i < node.children.length; i++) {\r\n            const child = node.children[i];\r\n            if (typeof child !== 'object')\r\n                continue;\r\n            if (child.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                parseFilter(child, context);\r\n            }\r\n            else if (child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                rewriteFilter(node, context);\r\n            }\r\n            else if (child.type === 5 /* INTERPOLATION */) {\r\n                rewriteFilter(child.content, context);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseFilter(node, context) {\r\n    const exp = node.content;\r\n    let inSingle = false;\r\n    let inDouble = false;\r\n    let inTemplateString = false;\r\n    let inRegex = false;\r\n    let curly = 0;\r\n    let square = 0;\r\n    let paren = 0;\r\n    let lastFilterIndex = 0;\r\n    let c, prev, i, expression, filters = [];\r\n    for (i = 0; i < exp.length; i++) {\r\n        prev = c;\r\n        c = exp.charCodeAt(i);\r\n        if (inSingle) {\r\n            if (c === 0x27 && prev !== 0x5c)\r\n                inSingle = false;\r\n        }\r\n        else if (inDouble) {\r\n            if (c === 0x22 && prev !== 0x5c)\r\n                inDouble = false;\r\n        }\r\n        else if (inTemplateString) {\r\n            if (c === 0x60 && prev !== 0x5c)\r\n                inTemplateString = false;\r\n        }\r\n        else if (inRegex) {\r\n            if (c === 0x2f && prev !== 0x5c)\r\n                inRegex = false;\r\n        }\r\n        else if (c === 0x7c && // pipe\r\n            exp.charCodeAt(i + 1) !== 0x7c &&\r\n            exp.charCodeAt(i - 1) !== 0x7c &&\r\n            !curly &&\r\n            !square &&\r\n            !paren) {\r\n            if (expression === undefined) {\r\n                // first filter, end of expression\r\n                lastFilterIndex = i + 1;\r\n                expression = exp.slice(0, i).trim();\r\n            }\r\n            else {\r\n                pushFilter();\r\n            }\r\n        }\r\n        else {\r\n            switch (c) {\r\n                case 0x22:\r\n                    inDouble = true;\r\n                    break; // \"\r\n                case 0x27:\r\n                    inSingle = true;\r\n                    break; // '\r\n                case 0x60:\r\n                    inTemplateString = true;\r\n                    break; // `\r\n                case 0x28:\r\n                    paren++;\r\n                    break; // (\r\n                case 0x29:\r\n                    paren--;\r\n                    break; // )\r\n                case 0x5b:\r\n                    square++;\r\n                    break; // [\r\n                case 0x5d:\r\n                    square--;\r\n                    break; // ]\r\n                case 0x7b:\r\n                    curly++;\r\n                    break; // {\r\n                case 0x7d:\r\n                    curly--;\r\n                    break; // }\r\n            }\r\n            if (c === 0x2f) {\r\n                // /\r\n                let j = i - 1;\r\n                let p;\r\n                // find first non-whitespace prev char\r\n                for (; j >= 0; j--) {\r\n                    p = exp.charAt(j);\r\n                    if (p !== ' ')\r\n                        break;\r\n                }\r\n                if (!p || !validDivisionCharRE.test(p)) {\r\n                    inRegex = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (expression === undefined) {\r\n        expression = exp.slice(0, i).trim();\r\n    }\r\n    else if (lastFilterIndex !== 0) {\r\n        pushFilter();\r\n    }\r\n    function pushFilter() {\r\n        filters.push(exp.slice(lastFilterIndex, i).trim());\r\n        lastFilterIndex = i + 1;\r\n    }\r\n    if (filters.length) {\r\n        warnDeprecation(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context, node.loc);\r\n        for (i = 0; i < filters.length; i++) {\r\n            expression = wrapFilter(expression, filters[i], context);\r\n        }\r\n        node.content = expression;\r\n    }\r\n}\r\nfunction wrapFilter(exp, filter, context) {\r\n    context.helper(RESOLVE_FILTER);\r\n    const i = filter.indexOf('(');\r\n    if (i < 0) {\r\n        context.filters.add(filter);\r\n        return `${toValidAssetId(filter, 'filter')}(${exp})`;\r\n    }\r\n    else {\r\n        const name = filter.slice(0, i);\r\n        const args = filter.slice(i + 1);\r\n        context.filters.add(name);\r\n        return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\r\n    }\r\n}\n\nconst seen$1 = new WeakSet();\r\nconst transformMemo = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        const dir = findDir(node, 'memo');\r\n        if (!dir || seen$1.has(node)) {\r\n            return;\r\n        }\r\n        seen$1.add(node);\r\n        return () => {\r\n            const codegenNode = node.codegenNode ||\r\n                context.currentNode.codegenNode;\r\n            if (codegenNode && codegenNode.type === 13 /* VNODE_CALL */) {\r\n                // non-component sub tree should be turned into a block\r\n                if (node.tagType !== 1 /* COMPONENT */) {\r\n                    makeBlock(codegenNode, context);\r\n                }\r\n                node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\r\n                    dir.exp,\r\n                    createFunctionExpression(undefined, codegenNode),\r\n                    `_cache`,\r\n                    String(context.cached++)\r\n                ]);\r\n            }\r\n        };\r\n    }\r\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\r\n    return [\r\n        [\r\n            transformOnce,\r\n            transformIf,\r\n            transformMemo,\r\n            transformFor,\r\n            ...([transformFilter] ),\r\n            ...(prefixIdentifiers\r\n                ? [\r\n                    // order is important\r\n                    trackVForSlotScopes,\r\n                    transformExpression\r\n                ]\r\n                : []),\r\n            transformSlotOutlet,\r\n            transformElement,\r\n            trackSlotScopes,\r\n            transformText\r\n        ],\r\n        {\r\n            on: transformOn,\r\n            bind: transformBind,\r\n            model: transformModel\r\n        }\r\n    ];\r\n}\r\n// we name it `baseCompile` so that higher order compilers like\r\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\r\nfunction baseCompile(template, options = {}) {\r\n    const onError = options.onError || defaultOnError;\r\n    const isModuleMode = options.mode === 'module';\r\n    const prefixIdentifiers = (options.prefixIdentifiers === true || isModuleMode);\r\n    if (!prefixIdentifiers && options.cacheHandlers) {\r\n        onError(createCompilerError(47 /* X_CACHE_HANDLER_NOT_SUPPORTED */));\r\n    }\r\n    if (options.scopeId && !isModuleMode) {\r\n        onError(createCompilerError(48 /* X_SCOPE_ID_NOT_SUPPORTED */));\r\n    }\r\n    const ast = shared.isString(template) ? baseParse(template, options) : template;\r\n    const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers);\r\n    transform(ast, shared.extend({}, options, {\r\n        prefixIdentifiers,\r\n        nodeTransforms: [\r\n            ...nodeTransforms,\r\n            ...(options.nodeTransforms || []) // user transforms\r\n        ],\r\n        directiveTransforms: shared.extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\r\n        )\r\n    }));\r\n    return generate(ast, shared.extend({}, options, {\r\n        prefixIdentifiers\r\n    }));\r\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexports.generateCodeFrame = shared.generateCodeFrame;\nexports.BASE_TRANSITION = BASE_TRANSITION;\nexports.CAMELIZE = CAMELIZE;\nexports.CAPITALIZE = CAPITALIZE;\nexports.CREATE_BLOCK = CREATE_BLOCK;\nexports.CREATE_COMMENT = CREATE_COMMENT;\nexports.CREATE_ELEMENT_BLOCK = CREATE_ELEMENT_BLOCK;\nexports.CREATE_ELEMENT_VNODE = CREATE_ELEMENT_VNODE;\nexports.CREATE_SLOTS = CREATE_SLOTS;\nexports.CREATE_STATIC = CREATE_STATIC;\nexports.CREATE_TEXT = CREATE_TEXT;\nexports.CREATE_VNODE = CREATE_VNODE;\nexports.FRAGMENT = FRAGMENT;\nexports.GUARD_REACTIVE_PROPS = GUARD_REACTIVE_PROPS;\nexports.IS_MEMO_SAME = IS_MEMO_SAME;\nexports.IS_REF = IS_REF;\nexports.KEEP_ALIVE = KEEP_ALIVE;\nexports.MERGE_PROPS = MERGE_PROPS;\nexports.NORMALIZE_CLASS = NORMALIZE_CLASS;\nexports.NORMALIZE_PROPS = NORMALIZE_PROPS;\nexports.NORMALIZE_STYLE = NORMALIZE_STYLE;\nexports.OPEN_BLOCK = OPEN_BLOCK;\nexports.POP_SCOPE_ID = POP_SCOPE_ID;\nexports.PUSH_SCOPE_ID = PUSH_SCOPE_ID;\nexports.RENDER_LIST = RENDER_LIST;\nexports.RENDER_SLOT = RENDER_SLOT;\nexports.RESOLVE_COMPONENT = RESOLVE_COMPONENT;\nexports.RESOLVE_DIRECTIVE = RESOLVE_DIRECTIVE;\nexports.RESOLVE_DYNAMIC_COMPONENT = RESOLVE_DYNAMIC_COMPONENT;\nexports.RESOLVE_FILTER = RESOLVE_FILTER;\nexports.SET_BLOCK_TRACKING = SET_BLOCK_TRACKING;\nexports.SUSPENSE = SUSPENSE;\nexports.TELEPORT = TELEPORT;\nexports.TO_DISPLAY_STRING = TO_DISPLAY_STRING;\nexports.TO_HANDLERS = TO_HANDLERS;\nexports.TO_HANDLER_KEY = TO_HANDLER_KEY;\nexports.UNREF = UNREF;\nexports.WITH_CTX = WITH_CTX;\nexports.WITH_DIRECTIVES = WITH_DIRECTIVES;\nexports.WITH_MEMO = WITH_MEMO;\nexports.WITH_SCOPE_ID = WITH_SCOPE_ID;\nexports.advancePositionWithClone = advancePositionWithClone;\nexports.advancePositionWithMutation = advancePositionWithMutation;\nexports.assert = assert;\nexports.baseCompile = baseCompile;\nexports.baseParse = baseParse;\nexports.buildProps = buildProps;\nexports.buildSlots = buildSlots;\nexports.checkCompatEnabled = checkCompatEnabled;\nexports.createArrayExpression = createArrayExpression;\nexports.createAssignmentExpression = createAssignmentExpression;\nexports.createBlockStatement = createBlockStatement;\nexports.createCacheExpression = createCacheExpression;\nexports.createCallExpression = createCallExpression;\nexports.createCompilerError = createCompilerError;\nexports.createCompoundExpression = createCompoundExpression;\nexports.createConditionalExpression = createConditionalExpression;\nexports.createForLoopParams = createForLoopParams;\nexports.createFunctionExpression = createFunctionExpression;\nexports.createIfStatement = createIfStatement;\nexports.createInterpolation = createInterpolation;\nexports.createObjectExpression = createObjectExpression;\nexports.createObjectProperty = createObjectProperty;\nexports.createReturnStatement = createReturnStatement;\nexports.createRoot = createRoot;\nexports.createSequenceExpression = createSequenceExpression;\nexports.createSimpleExpression = createSimpleExpression;\nexports.createStructuralDirectiveTransform = createStructuralDirectiveTransform;\nexports.createTemplateLiteral = createTemplateLiteral;\nexports.createTransformContext = createTransformContext;\nexports.createVNodeCall = createVNodeCall;\nexports.findDir = findDir;\nexports.findProp = findProp;\nexports.generate = generate;\nexports.getBaseTransformPreset = getBaseTransformPreset;\nexports.getInnerRange = getInnerRange;\nexports.getMemoedVNodeCall = getMemoedVNodeCall;\nexports.getVNodeBlockHelper = getVNodeBlockHelper;\nexports.getVNodeHelper = getVNodeHelper;\nexports.hasDynamicKeyVBind = hasDynamicKeyVBind;\nexports.hasScopeRef = hasScopeRef;\nexports.helperNameMap = helperNameMap;\nexports.injectProp = injectProp;\nexports.isBindKey = isBindKey;\nexports.isBuiltInType = isBuiltInType;\nexports.isCoreComponent = isCoreComponent;\nexports.isMemberExpression = isMemberExpression;\nexports.isSimpleIdentifier = isSimpleIdentifier;\nexports.isSlotOutlet = isSlotOutlet;\nexports.isStaticExp = isStaticExp;\nexports.isTemplateNode = isTemplateNode;\nexports.isText = isText;\nexports.isVSlot = isVSlot;\nexports.locStub = locStub;\nexports.makeBlock = makeBlock;\nexports.noopDirectiveTransform = noopDirectiveTransform;\nexports.processExpression = processExpression;\nexports.processFor = processFor;\nexports.processIf = processIf;\nexports.processSlotOutlet = processSlotOutlet;\nexports.registerRuntimeHelpers = registerRuntimeHelpers;\nexports.resolveComponentType = resolveComponentType;\nexports.toValidAssetId = toValidAssetId;\nexports.trackSlotScopes = trackSlotScopes;\nexports.trackVForSlotScopes = trackVForSlotScopes;\nexports.transform = transform;\nexports.transformBind = transformBind;\nexports.transformElement = transformElement;\nexports.transformExpression = transformExpression;\nexports.transformModel = transformModel;\nexports.transformOn = transformOn;\nexports.traverseNode = traverseNode;\nexports.warnDeprecation = warnDeprecation;\n", "// @flow\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the \u201Cargument\u201D subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string,\n  beforeExpr?: boolean,\n  startsExpr?: boolean,\n  rightAssociative?: boolean,\n  isLoop?: boolean,\n  isAssign?: boolean,\n  prefix?: boolean,\n  postfix?: boolean,\n  binop?: ?number,\n};\n\nexport class TokenType {\n  label: string;\n  keyword: ?string;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: ?number;\n  updateContext: ?(prevType: TokenType) => void;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    this.updateContext = null;\n  }\n}\n\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = new TokenType(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return new TokenType(name, { beforeExpr, binop });\n}\n\nexport const types: { [name: string]: TokenType } = {\n  num: new TokenType(\"num\", { startsExpr }),\n  bigint: new TokenType(\"bigint\", { startsExpr }),\n  decimal: new TokenType(\"decimal\", { startsExpr }),\n  regexp: new TokenType(\"regexp\", { startsExpr }),\n  string: new TokenType(\"string\", { startsExpr }),\n  name: new TokenType(\"name\", { startsExpr }),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", { beforeExpr, startsExpr }),\n  bracketHashL: new TokenType(\"#[\", { beforeExpr, startsExpr }),\n  bracketBarL: new TokenType(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: new TokenType(\"]\"),\n  bracketBarR: new TokenType(\"|]\"),\n  braceL: new TokenType(\"{\", { beforeExpr, startsExpr }),\n  braceBarL: new TokenType(\"{|\", { beforeExpr, startsExpr }),\n  braceHashL: new TokenType(\"#{\", { beforeExpr, startsExpr }),\n  braceR: new TokenType(\"}\"),\n  braceBarR: new TokenType(\"|}\"),\n  parenL: new TokenType(\"(\", { beforeExpr, startsExpr }),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", { beforeExpr }),\n  semi: new TokenType(\";\", { beforeExpr }),\n  colon: new TokenType(\":\", { beforeExpr }),\n  doubleColon: new TokenType(\"::\", { beforeExpr }),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", { beforeExpr }),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", { beforeExpr }),\n  template: new TokenType(\"template\"),\n  ellipsis: new TokenType(\"...\", { beforeExpr }),\n  backQuote: new TokenType(\"`\", { startsExpr }),\n  dollarBraceL: new TokenType(\"${\", { beforeExpr, startsExpr }),\n  at: new TokenType(\"@\"),\n  hash: new TokenType(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: new TokenType(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", { beforeExpr, isAssign }),\n  assign: new TokenType(\"_=\", { beforeExpr, isAssign }),\n  incDec: new TokenType(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: new TokenType(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: new TokenType(\"~\", { beforeExpr, prefix, startsExpr }),\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: new TokenType(\"%\", { beforeExpr, binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: new TokenType(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: new TokenType(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _for: createKeyword(\"for\", { isLoop }),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _while: createKeyword(\"while\", { isLoop }),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n};\n", "// @flow\n\n// Each scope gets a bitset that may contain these flags\n// prettier-ignore\nexport const SCOPE_OTHER        = 0b00000000,\n             SCOPE_PROGRAM      = 0b00000001,\n             SCOPE_FUNCTION     = 0b00000010,\n             SCOPE_ARROW        = 0b00000100,\n             SCOPE_SIMPLE_CATCH = 0b00001000,\n             SCOPE_SUPER        = 0b00010000,\n             SCOPE_DIRECT_SUPER = 0b00100000,\n             SCOPE_CLASS        = 0b01000000,\n             SCOPE_TS_MODULE    = 0b10000000,\n             SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\n\nexport type ScopeFlags =\n  | typeof SCOPE_OTHER\n  | typeof SCOPE_PROGRAM\n  | typeof SCOPE_FUNCTION\n  | typeof SCOPE_VAR\n  | typeof SCOPE_ARROW\n  | typeof SCOPE_SIMPLE_CATCH\n  | typeof SCOPE_SUPER\n  | typeof SCOPE_DIRECT_SUPER\n  | typeof SCOPE_CLASS;\n\n// These flags are meant to be _only_ used inside the Scope class (or subclasses).\n// prettier-ignore\nexport const BIND_KIND_VALUE           = 0b00000_0000_01,\n             BIND_KIND_TYPE            = 0b00000_0000_10,\n             // Used in checkLVal and declareName to determine the type of a binding\n             BIND_SCOPE_VAR            = 0b00000_0001_00, // Var-style binding\n             BIND_SCOPE_LEXICAL        = 0b00000_0010_00, // Let- or const-style binding\n             BIND_SCOPE_FUNCTION       = 0b00000_0100_00, // Function declaration\n             BIND_SCOPE_OUTSIDE        = 0b00000_1000_00, // Special case for function names as\n                                                   // bound inside the function\n             // Misc flags\n             BIND_FLAGS_NONE           = 0b00001_0000_00,\n             BIND_FLAGS_CLASS          = 0b00010_0000_00,\n             BIND_FLAGS_TS_ENUM        = 0b00100_0000_00,\n             BIND_FLAGS_TS_CONST_ENUM  = 0b01000_0000_00,\n             BIND_FLAGS_TS_EXPORT_ONLY = 0b10000_0000_00;\n\n// These flags are meant to be _only_ used by Scope consumers\n// prettier-ignore\n/*                              =    is value?    |    is type?    |      scope          |    misc flags    */\nexport const BIND_CLASS         = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_CLASS  ,\n             BIND_LEXICAL       = BIND_KIND_VALUE | 0              | BIND_SCOPE_LEXICAL  | 0                 ,\n             BIND_VAR           = BIND_KIND_VALUE | 0              | BIND_SCOPE_VAR      | 0                 ,\n             BIND_FUNCTION      = BIND_KIND_VALUE | 0              | BIND_SCOPE_FUNCTION | 0                 ,\n             BIND_TS_INTERFACE  = 0               | BIND_KIND_TYPE | 0                   | BIND_FLAGS_CLASS  ,\n             BIND_TS_TYPE       = 0               | BIND_KIND_TYPE | 0                   | 0                 ,\n             BIND_TS_ENUM       = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_TS_ENUM,\n             BIND_TS_AMBIENT    = 0               | 0              | 0            | BIND_FLAGS_TS_EXPORT_ONLY,\n             // These bindings don't introduce anything in the scope. They are used for assignments and\n             // function expressions IDs.\n             BIND_NONE          = 0               | 0              | 0                   | BIND_FLAGS_NONE   ,\n             BIND_OUTSIDE       = BIND_KIND_VALUE | 0              | 0                   | BIND_FLAGS_NONE   ,\n\n             BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n             BIND_TS_NAMESPACE  = 0               | 0              | 0            | BIND_FLAGS_TS_EXPORT_ONLY;\n\nexport type BindingTypes =\n  | typeof BIND_NONE\n  | typeof BIND_OUTSIDE\n  | typeof BIND_VAR\n  | typeof BIND_LEXICAL\n  | typeof BIND_CLASS\n  | typeof BIND_FUNCTION\n  | typeof BIND_TS_INTERFACE\n  | typeof BIND_TS_TYPE\n  | typeof BIND_TS_ENUM\n  | typeof BIND_TS_AMBIENT\n  | typeof BIND_TS_NAMESPACE;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_FLAG_STATIC = 0b1_00,\n             CLASS_ELEMENT_KIND_GETTER = 0b0_10,\n             CLASS_ELEMENT_KIND_SETTER = 0b0_01,\n             CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_STATIC_GETTER   = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n             CLASS_ELEMENT_STATIC_SETTER   = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n             CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n             CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n             CLASS_ELEMENT_OTHER           = 0;\n\nexport type ClassElementTypes =\n  | typeof CLASS_ELEMENT_STATIC_GETTER\n  | typeof CLASS_ELEMENT_STATIC_SETTER\n  | typeof CLASS_ELEMENT_INSTANCE_GETTER\n  | typeof CLASS_ELEMENT_INSTANCE_SETTER\n  | typeof CLASS_ELEMENT_OTHER;\n", "// @flow\n\nimport * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n", "// @flow\n\nimport { lineBreakG } from \"./whitespace\";\n\nexport type Pos = {\n  start: number,\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n\n  constructor(line: number, col: number) {\n    this.line = line;\n    this.column = col;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: ?string;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // $FlowIgnore (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nexport function getLineInfo(input: string, offset: number): Position {\n  let line = 1;\n  let lineStart = 0;\n  let match;\n  lineBreakG.lastIndex = 0;\n  while ((match = lineBreakG.exec(input)) && match.index < offset) {\n    line++;\n    lineStart = lineBreakG.lastIndex;\n  }\n\n  return new Position(line, offset - lineStart);\n}\n", "// @flow\n\nimport type { Options } from \"../options\";\nimport type State from \"../tokenizer/state\";\nimport type { PluginsMap } from \"./index\";\nimport type ScopeHandler from \"../util/scope\";\nimport type ClassScopeHandler from \"../util/class-scope\";\nimport type ProductionParameterHandler from \"../util/production-parameter\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  options: Options;\n  inModule: boolean;\n  scope: ScopeHandler<*>;\n  classScope: ClassScopeHandler;\n  prodParam: ProductionParameterHandler;\n  plugins: PluginsMap;\n  filename: ?string;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  input: string;\n  length: number;\n\n  hasPlugin(name: string): boolean {\n    return this.plugins.has(name);\n  }\n\n  getPluginOption(plugin: string, name: string) {\n    // $FlowIssue\n    if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n  }\n}\n", "// @flow\n\n/**\n * Based on the comment attachment algorithm used in espree and estraverse.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n *   notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n *   notice, this list of conditions and the following disclaimer in the\n *   documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport BaseParser from \"./base\";\nimport type { Comment, Node } from \"../types\";\n\nfunction last<T>(stack: $ReadOnlyArray<T>): T {\n  return stack[stack.length - 1];\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.trailingComments.push(comment);\n    this.state.leadingComments.push(comment);\n  }\n\n  adjustCommentsAfterTrailingComma(\n    node: Node,\n    elements: (Node | null)[],\n    // When the current node is followed by a token which hasn't a respective AST node, we\n    // need to take all the trailing comments to prevent them from being attached to an\n    // unrelated node. e.g. in\n    //     var { x } /* cmt */ = { y }\n    // we don't want /* cmt */ to be attached to { y }.\n    // On the other hand, in\n    //     fn(x) [new line] /* cmt */ [new line] y\n    // /* cmt */ is both a trailing comment of fn(x) and a leading comment of y\n    takeAllComments?: boolean,\n  ) {\n    if (this.state.leadingComments.length === 0) {\n      return;\n    }\n\n    let lastElement = null;\n    let i = elements.length;\n    while (lastElement === null && i > 0) {\n      lastElement = elements[--i];\n    }\n    if (lastElement === null) {\n      return;\n    }\n\n    for (let j = 0; j < this.state.leadingComments.length; j++) {\n      if (\n        this.state.leadingComments[j].end < this.state.commentPreviousNode.end\n      ) {\n        this.state.leadingComments.splice(j, 1);\n        j--;\n      }\n    }\n\n    const newTrailingComments = [];\n    for (let i = 0; i < this.state.leadingComments.length; i++) {\n      const leadingComment = this.state.leadingComments[i];\n      if (leadingComment.end < node.end) {\n        newTrailingComments.push(leadingComment);\n\n        // Perf: we don't need to splice if we are going to reset the array anyway\n        if (!takeAllComments) {\n          this.state.leadingComments.splice(i, 1);\n          i--;\n        }\n      } else {\n        if (node.trailingComments === undefined) {\n          node.trailingComments = [];\n        }\n        node.trailingComments.push(leadingComment);\n      }\n    }\n    if (takeAllComments) this.state.leadingComments = [];\n\n    if (newTrailingComments.length > 0) {\n      lastElement.trailingComments = newTrailingComments;\n    } else if (lastElement.trailingComments !== undefined) {\n      lastElement.trailingComments = [];\n    }\n  }\n\n  processComment(node: Node): void {\n    if (node.type === \"Program\" && node.body.length > 0) return;\n\n    const stack = this.state.commentStack;\n\n    let firstChild, lastChild, trailingComments, i, j;\n\n    if (this.state.trailingComments.length > 0) {\n      // If the first comment in trailingComments comes after the\n      // current node, then we're good - all comments in the array will\n      // come after the node and so it's safe to add them as official\n      // trailingComments.\n      if (this.state.trailingComments[0].start >= node.end) {\n        trailingComments = this.state.trailingComments;\n        this.state.trailingComments = [];\n      } else {\n        // Otherwise, if the first comment doesn't come after the\n        // current node, that means we have a mix of leading and trailing\n        // comments in the array and that leadingComments contains the\n        // same items as trailingComments. Reset trailingComments to\n        // zero items and we'll handle this by evaluating leadingComments\n        // later.\n        this.state.trailingComments.length = 0;\n      }\n    } else if (stack.length > 0) {\n      const lastInStack = last(stack);\n      if (\n        lastInStack.trailingComments &&\n        lastInStack.trailingComments[0].start >= node.end\n      ) {\n        trailingComments = lastInStack.trailingComments;\n        delete lastInStack.trailingComments;\n      }\n    }\n\n    // Eating the stack.\n    if (stack.length > 0 && last(stack).start >= node.start) {\n      firstChild = stack.pop();\n    }\n\n    while (stack.length > 0 && last(stack).start >= node.start) {\n      lastChild = stack.pop();\n    }\n\n    if (!lastChild && firstChild) lastChild = firstChild;\n\n    // Adjust comments that follow a trailing comma on the last element in a\n    // comma separated list of nodes to be the trailing comments on the last\n    // element\n    if (firstChild) {\n      switch (node.type) {\n        case \"ObjectExpression\":\n          this.adjustCommentsAfterTrailingComma(node, node.properties);\n          break;\n        case \"ObjectPattern\":\n          this.adjustCommentsAfterTrailingComma(node, node.properties, true);\n          break;\n        case \"CallExpression\":\n          this.adjustCommentsAfterTrailingComma(node, node.arguments);\n          break;\n        case \"ArrayExpression\":\n          this.adjustCommentsAfterTrailingComma(node, node.elements);\n          break;\n        case \"ArrayPattern\":\n          this.adjustCommentsAfterTrailingComma(node, node.elements, true);\n          break;\n      }\n    } else if (\n      this.state.commentPreviousNode &&\n      ((this.state.commentPreviousNode.type === \"ImportSpecifier\" &&\n        node.type !== \"ImportSpecifier\") ||\n        (this.state.commentPreviousNode.type === \"ExportSpecifier\" &&\n          node.type !== \"ExportSpecifier\"))\n    ) {\n      this.adjustCommentsAfterTrailingComma(node, [\n        this.state.commentPreviousNode,\n      ]);\n    }\n\n    if (lastChild) {\n      if (lastChild.leadingComments) {\n        if (\n          lastChild !== node &&\n          lastChild.leadingComments.length > 0 &&\n          last(lastChild.leadingComments).end <= node.start\n        ) {\n          node.leadingComments = lastChild.leadingComments;\n          delete lastChild.leadingComments;\n        } else {\n          // A leading comment for an anonymous class had been stolen by its first ClassMethod,\n          // so this takes back the leading comment.\n          // See also: https://github.com/eslint/espree/issues/158\n          for (i = lastChild.leadingComments.length - 2; i >= 0; --i) {\n            if (lastChild.leadingComments[i].end <= node.start) {\n              node.leadingComments = lastChild.leadingComments.splice(0, i + 1);\n              break;\n            }\n          }\n        }\n      }\n    } else if (this.state.leadingComments.length > 0) {\n      if (last(this.state.leadingComments).end <= node.start) {\n        if (this.state.commentPreviousNode) {\n          for (j = 0; j < this.state.leadingComments.length; j++) {\n            if (\n              this.state.leadingComments[j].end <\n              this.state.commentPreviousNode.end\n            ) {\n              this.state.leadingComments.splice(j, 1);\n              j--;\n            }\n          }\n        }\n        if (this.state.leadingComments.length > 0) {\n          node.leadingComments = this.state.leadingComments;\n          this.state.leadingComments = [];\n        }\n      } else {\n        // https://github.com/eslint/espree/issues/2\n        //\n        // In special cases, such as return (without a value) and\n        // debugger, all comments will end up as leadingComments and\n        // will otherwise be eliminated. This step runs when the\n        // commentStack is empty and there are comments left\n        // in leadingComments.\n        //\n        // This loop figures out the stopping point between the actual\n        // leading and trailing comments by finding the location of the\n        // first comment that comes after the given node.\n        for (i = 0; i < this.state.leadingComments.length; i++) {\n          if (this.state.leadingComments[i].end > node.start) {\n            break;\n          }\n        }\n\n        // Split the array based on the location of the first comment\n        // that comes after the node. Keep in mind that this could\n        // result in an empty array, and if so, the array must be\n        // deleted.\n        const leadingComments = this.state.leadingComments.slice(0, i);\n\n        if (leadingComments.length) {\n          node.leadingComments = leadingComments;\n        }\n\n        // Similarly, trailing comments are attached later. The variable\n        // must be reset to null if there are no trailing comments.\n        trailingComments = this.state.leadingComments.slice(i);\n        if (trailingComments.length === 0) {\n          trailingComments = null;\n        }\n      }\n    }\n\n    this.state.commentPreviousNode = node;\n\n    if (trailingComments) {\n      if (\n        trailingComments.length &&\n        trailingComments[0].start >= node.start &&\n        last(trailingComments).end <= node.end\n      ) {\n        node.innerComments = trailingComments;\n      } else {\n        // TrailingComments maybe contain innerComments\n        const firstTrailingCommentIndex = trailingComments.findIndex(\n          comment => comment.end >= node.end,\n        );\n\n        if (firstTrailingCommentIndex > 0) {\n          node.innerComments = trailingComments.slice(\n            0,\n            firstTrailingCommentIndex,\n          );\n          node.trailingComments = trailingComments.slice(\n            firstTrailingCommentIndex,\n          );\n        } else {\n          node.trailingComments = trailingComments;\n        }\n      }\n    }\n\n    stack.push(node);\n  }\n}\n", "// @flow\n/* eslint sort-keys: \"error\" */\n\n// The Errors key follows https://cs.chromium.org/chromium/src/v8/src/common/message-template.h unless it does not exist\nexport const ErrorMessages = Object.freeze({\n  AccessorIsGenerator: \"A %0ter cannot be a generator\",\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function\",\n  AwaitExpressionFormalParameter:\n    \"await is not allowed in async function parameters\",\n  AwaitNotInAsyncFunction:\n    \"Can not use keyword 'await' outside an async function\",\n  BadGetterArity: \"getter must not have any formal parameters\",\n  BadSetterArity: \"setter must have exactly one formal parameter\",\n  BadSetterRestParameter:\n    \"setter function argument must not be a rest parameter\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor\",\n  ConstructorIsAsync: \"Constructor can't be an async function\",\n  ConstructorIsGenerator: \"Constructor can't be a generator\",\n  DeclarationMissingInitializer: \"%0 require an initialization value\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block\",\n  DeletePrivateField: \"Deleting a private field is not allowed\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport:\n    \"`%0` has already been exported. Exported identifiers must be unique.\",\n  DuplicateProto: \"Redefinition of __proto__ property\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag\",\n  DuplicateStaticBlock: \"Duplicate static block in the same class\",\n  ElementAfterRest: \"Rest element must be last element\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape\",\n  ExportBindingIsString:\n    \"A string literal cannot be used as an exported binding without `from`.\\n- Did you mean `export { %0 as '%1' } from 'some-module'`?\",\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'\",\n  ForInOfLoopInitializer:\n    \"%0 loop variable declaration may not have an initializer\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block\",\n  IllegalBreakContinue: \"Unsyntactic %0\",\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list\",\n  IllegalReturn: \"'return' outside of function\",\n  ImportBindingIsString:\n    'A string literal cannot be used as an imported binding.\\n- Did you mean `import { \"%0\" as foo }`?',\n  ImportCallArgumentTrailingComma:\n    \"Trailing comma is disallowed inside import(...) arguments\",\n  ImportCallArity: \"import() requires exactly %0\",\n  ImportCallNotNewExpression: \"Cannot use new with import(...)\",\n  ImportCallSpreadArgument: \"... is not allowed in import()\",\n  ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: \"module\"'`,\n  ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral\",\n  InvalidCodePoint: \"Code point out of bounds\",\n  InvalidDecimal: \"Invalid decimal\",\n  InvalidDigit: \"Expected number in radix %0\",\n  InvalidEscapeSequence: \"Bad character escape sequence\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template\",\n  InvalidEscapedReservedWord: \"Escape sequence in keyword %0\",\n  InvalidIdentifier: \"Invalid identifier %0\",\n  InvalidLhs: \"Invalid left-hand side in %0\",\n  InvalidLhsBinding: \"Binding invalid left-hand side in %0\",\n  InvalidNumber: \"Invalid number\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'\",\n  InvalidOrUnexpectedToken: \"Unexpected character '%0'\",\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern\",\n  InvalidPrivateFieldResolution: \"Private name #%0 is not defined\",\n  InvalidPropertyBindingPattern: \"Binding member expression\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument\",\n  LabelRedeclaration: \"Label '%0' is already declared\",\n  LetInLexicalBinding:\n    \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'\",\n  MalformedRegExpFlags: \"Invalid regular expression flag\",\n  MissingClassName: \"A class name is required\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values\",\n  ModuleAttributesWithDuplicateKeys:\n    'Duplicate key \"%0\" is not allowed in module attributes',\n  ModuleExportNameHasLoneSurrogate:\n    \"An export name cannot include a lone surrogate, found '\\\\u%0'\",\n  ModuleExportUndefined: \"Export '%0' is not defined\",\n  MultipleDefaultsInSwitch: \"Multiple default clauses\",\n  NewlineAfterThrow: \"Illegal newline after throw\",\n  NoCatchOrFinally: \"Missing catch or finally clause\",\n  NumberIdentifier: \"Identifier directly after number\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences\",\n  ObsoleteAwaitStar:\n    \"await* has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"constructors in/after an Optional Chain are not allowed\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain\",\n  ParamDupe: \"Argument name clash\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter\",\n  PatternHasMethod: \"Object pattern can't contain methods\",\n  PipelineBodyNoArrow:\n    'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized',\n  PipelineBodySequenceExpression:\n    \"Pipeline body may not be a comma-separated sequence expression\",\n  PipelineHeadSequenceExpression:\n    \"Pipeline head should not be a comma-separated sequence expression\",\n  PipelineTopicUnused:\n    \"Pipeline is in topic style but does not use topic reference\",\n  PrimaryTopicNotAllowed:\n    \"Topic reference was used in a lexical context without topic binding\",\n  PrimaryTopicRequiresSmartPipeline:\n    \"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.\",\n  PrivateInExpectedIn:\n    \"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`)\",\n  PrivateNameRedeclaration: \"Duplicate private name #%0\",\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement\",\n  StaticPrototype: \"Classes may not have static property named prototype\",\n  StrictDelete: \"Deleting local variable in strict mode\",\n  StrictEvalArguments: \"Assigning to '%0' in strict mode\",\n  StrictEvalArgumentsBinding: \"Binding '%0' in strict mode\",\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block\",\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'\",\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode\",\n  StrictWith: \"'with' in strict mode\",\n  SuperNotAllowed:\n    \"super() is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super\",\n  TrailingDecorator: \"Decorators must be attached to a class element\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level\",\n  UnexpectedKeyword: \"Unexpected keyword '%0'\",\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context\",\n  UnexpectedNewTarget: \"new.target can only be used in functions\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits\",\n  UnexpectedPrivateField:\n    \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n  UnexpectedReservedWord: \"Unexpected reserved word '%0'\",\n  UnexpectedSuper: \"super is only allowed in object methods and classes\",\n  UnexpectedToken: \"Unexpected token '%0'\",\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport: \"import can only be used in import() or import.meta\",\n  UnsupportedMetaProperty: \"The only valid meta property for %0 is %0.%1\",\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties\",\n  UnsupportedSuper:\n    \"super can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop])\",\n  UnterminatedComment: \"Unterminated comment\",\n  UnterminatedRegExp: \"Unterminated regular expression\",\n  UnterminatedString: \"Unterminated string constant\",\n  UnterminatedTemplate: \"Unterminated template\",\n  VarRedeclaration: \"Identifier '%0' has already been declared\",\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator\",\n  YieldInParameter: \"yield is not allowed in generator parameters\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0\",\n});\n", "// @flow\n/* eslint sort-keys: \"error\" */\nimport { getLineInfo, type Position } from \"../util/location\";\nimport CommentsParser from \"./comments\";\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\ntype ErrorContext = {\n  pos: number,\n  loc: Position,\n  missingPlugin?: Array<string>,\n  code?: string,\n};\n\nexport { ErrorMessages as Errors } from \"./error-message.js\";\n\nexport default class ParserError extends CommentsParser {\n  // Forward-declaration: defined in tokenizer/index.js\n  /*::\n  +isLookahead: boolean;\n  */\n\n  getLocationForPosition(pos: number): Position {\n    let loc;\n    if (pos === this.state.start) loc = this.state.startLoc;\n    else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;\n    else if (pos === this.state.end) loc = this.state.endLoc;\n    else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;\n    else loc = getLineInfo(this.input, pos);\n\n    return loc;\n  }\n\n  raise(pos: number, errorTemplate: string, ...params: any): Error | empty {\n    return this.raiseWithData(pos, undefined, errorTemplate, ...params);\n  }\n\n  raiseWithData(\n    pos: number,\n    data?: {\n      missingPlugin?: Array<string>,\n      code?: string,\n    },\n    errorTemplate: string,\n    ...params: any\n  ): Error | empty {\n    const loc = this.getLocationForPosition(pos);\n    const message =\n      errorTemplate.replace(/%(\\d+)/g, (_, i: number) => params[i]) +\n      ` (${loc.line}:${loc.column})`;\n    return this._raise(Object.assign(({ loc, pos }: Object), data), message);\n  }\n\n  _raise(errorContext: ErrorContext, message: string): Error | empty {\n    // $FlowIgnore\n    const err: SyntaxError & ErrorContext = new SyntaxError(message);\n    Object.assign(err, errorContext);\n    if (this.options.errorRecovery) {\n      if (!this.isLookahead) this.state.errors.push(err);\n      return err;\n    } else {\n      throw err;\n    }\n  }\n}\n", "// @flow\n\nimport { types as tt, TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport type { ExpressionErrors } from \"../parser/util\";\nimport * as N from \"../types\";\nimport type { Position } from \"../util/location\";\nimport { type BindingTypes, BIND_NONE } from \"../util/scopeflags\";\nimport { Errors } from \"../parser/error\";\n\nfunction isSimpleProperty(node: N.Node): boolean {\n  return (\n    node != null &&\n    node.type === \"Property\" &&\n    node.kind === \"init\" &&\n    node.method === false\n  );\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    estreeParseRegExpLiteral({ pattern, flags }: N.RegExpLiteral): N.Node {\n      let regex = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (e) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    estreeParseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      // $FlowIgnore\n      const bigInt = typeof BigInt !== \"undefined\" ? BigInt(value) : null;\n      const node = this.estreeParseLiteral(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral(value: any): N.Node {\n      return this.parseLiteral(value, \"Literal\");\n    }\n\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const directiveLiteral = directive.value;\n\n      const stmt = this.startNodeAt(directive.start, directive.loc.start);\n      const expression = this.startNodeAt(\n        directiveLiteral.start,\n        directiveLiteral.loc.start,\n      );\n\n      expression.value = directiveLiteral.value;\n      expression.raw = directiveLiteral.extra.raw;\n\n      stmt.expression = this.finishNodeAt(\n        expression,\n        \"Literal\",\n        directiveLiteral.end,\n        directiveLiteral.loc.end,\n      );\n      stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n\n      return this.finishNodeAt(\n        stmt,\n        \"ExpressionStatement\",\n        directive.end,\n        directive.loc.end,\n      );\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(\n      node: N.BodilessFunctionOrMethodBase,\n      isAsync: ?boolean,\n    ): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (isSimpleProperty(node)) {\n        this.checkDeclaration(((node: any): N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return ((method: any): N.EstreeProperty | N.EstreeMethodDefinition).value\n        .params;\n    }\n\n    checkLVal(\n      expr: N.Expression,\n      bindingType: BindingTypes = BIND_NONE,\n      checkClashes: ?{ [key: string]: boolean },\n      contextDescription: string,\n      disallowLetBinding?: boolean,\n    ): void {\n      switch (expr.type) {\n        case \"ObjectPattern\":\n          expr.properties.forEach(prop => {\n            this.checkLVal(\n              prop.type === \"Property\" ? prop.value : prop,\n              bindingType,\n              checkClashes,\n              \"object destructuring pattern\",\n              disallowLetBinding,\n            );\n          });\n          break;\n        default:\n          super.checkLVal(\n            expr,\n            bindingType,\n            checkClashes,\n            contextDescription,\n            disallowLetBinding,\n          );\n      }\n    }\n\n    checkProto(\n      prop: N.ObjectMember | N.SpreadElement,\n      isRecord: boolean,\n      protoRef: { used: boolean },\n      refExpressionErrors: ?ExpressionErrors,\n    ): void {\n      // $FlowIgnore: check prop.method and fallback to super method\n      if (prop.method) {\n        return;\n      }\n      super.checkProto(prop, isRecord, protoRef, refExpressionErrors);\n    }\n\n    isValidDirective(stmt: N.Statement): boolean {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    stmtToDirective(stmt: N.Statement): N.Directive {\n      const directive = super.stmtToDirective(stmt);\n      const value = stmt.expression.value;\n\n      // Reset value to the actual value as in estree mode we want\n      // the stmt to have the real value and not the raw value\n      directive.value.value = value;\n\n      return directive;\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: ?boolean,\n      topLevel: boolean,\n      end: TokenType,\n    ): void {\n      super.parseBlockBody(node, allowDirectives, topLevel, end);\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      node.body = directiveStatements.concat(node.body);\n      // $FlowIgnore - directives isn't optional in the type definition\n      delete node.directives;\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      );\n      if (method.typeParameters) {\n        // $FlowIgnore\n        method.value.typeParameters = method.typeParameters;\n        delete method.typeParameters;\n      }\n      classBody.body.push(method);\n    }\n\n    parseExprAtom(refExpressionErrors?: ?ExpressionErrors): N.Expression {\n      switch (this.state.type) {\n        case tt.num:\n        case tt.string:\n          return this.estreeParseLiteral(this.state.value);\n\n        case tt.regexp:\n          return this.estreeParseRegExpLiteral(this.state.value);\n\n        case tt.bigint:\n          return this.estreeParseBigIntLiteral(this.state.value);\n\n        case tt.decimal:\n          return this.estreeParseDecimalLiteral(this.state.value);\n\n        case tt._null:\n          return this.estreeParseLiteral(null);\n\n        case tt._true:\n          return this.estreeParseLiteral(true);\n\n        case tt._false:\n          return this.estreeParseLiteral(false);\n\n        default:\n          return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    parseLiteral<T: N.Literal>(\n      value: any,\n      type: /*T[\"kind\"]*/ string,\n      startPos?: number,\n      startLoc?: Position,\n    ): T {\n      const node = super.parseLiteral(value, type, startPos, startLoc);\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression: ?boolean,\n      isMethod?: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    parseMethod<T: N.MethodLike>(\n      node: T,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: string,\n      inClassScope: boolean = false,\n    ): T {\n      let funcNode = this.startNode();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      funcNode.type = \"FunctionExpression\";\n      delete funcNode.kind;\n      // $FlowIgnore\n      node.value = funcNode;\n\n      type = type === \"ClassMethod\" ? \"MethodDefinition\" : type;\n      return this.finishNode(node, type);\n    }\n\n    parseObjectMethod(\n      prop: N.ObjectMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n    ): ?N.ObjectMethod {\n      const node: N.EstreeProperty = (super.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ): any);\n\n      if (node) {\n        node.type = \"Property\";\n        if (((node: any): N.ClassMethod).kind === \"method\") node.kind = \"init\";\n        node.shorthand = false;\n      }\n\n      return (node: any);\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startPos: ?number,\n      startLoc: ?Position,\n      isPattern: boolean,\n      refExpressionErrors: ?ExpressionErrors,\n    ): ?N.ObjectProperty {\n      const node: N.EstreeProperty = (super.parseObjectProperty(\n        prop,\n        startPos,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ): any);\n\n      if (node) {\n        node.kind = \"init\";\n        node.type = \"Property\";\n      }\n\n      return (node: any);\n    }\n\n    toAssignable(node: N.Node): N.Node {\n      if (isSimpleProperty(node)) {\n        this.toAssignable(node.value);\n\n        return node;\n      }\n\n      return super.toAssignable(node);\n    }\n\n    toAssignableObjectExpressionProp(prop: N.Node, isLast: boolean) {\n      if (prop.kind === \"get\" || prop.kind === \"set\") {\n        throw this.raise(prop.key.start, Errors.PatternHasAccessor);\n      } else if (prop.method) {\n        throw this.raise(prop.key.start, Errors.PatternHasMethod);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast);\n      }\n    }\n\n    finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(\n      node: T,\n      optional: boolean,\n    ): N.Expression {\n      super.finishCallExpression(node, optional);\n\n      if (node.callee.type === \"Import\") {\n        ((node: N.Node): N.EstreeImportExpression).type = \"ImportExpression\";\n        ((node: N.Node): N.EstreeImportExpression).source = node.arguments[0];\n        // $FlowIgnore - arguments isn't optional in the type definition\n        delete node.arguments;\n        // $FlowIgnore - callee isn't optional in the type definition\n        delete node.callee;\n      }\n\n      return node;\n    }\n\n    toReferencedListDeep(\n      exprList: $ReadOnlyArray<?N.Expression>,\n      isParenthesizedExpr?: boolean,\n    ): void {\n      // ImportExpressions do not have an arguments array.\n      if (!exprList) {\n        return;\n      }\n\n      super.toReferencedListDeep(exprList, isParenthesizedExpr);\n    }\n\n    parseExport(node: N.Node) {\n      super.parseExport(node);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            node.type = \"ExportAllDeclaration\";\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls: ?boolean,\n      state: N.ParseSubscriptState,\n    ) {\n      const node = super.parseSubscript(\n        base,\n        startPos,\n        startLoc,\n        noCalls,\n        state,\n      );\n\n      if (state.optionalChainMember) {\n        // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n        if (\n          node.type === \"OptionalMemberExpression\" ||\n          node.type === \"OptionalCallExpression\"\n        ) {\n          node.type = node.type.substring(8); // strip Optional prefix\n        }\n        if (state.stop) {\n          const chain = this.startNodeAtNode(node);\n          chain.expression = node;\n          return this.finishNode(chain, \"ChainExpression\");\n        }\n      } else if (\n        node.type === \"MemberExpression\" ||\n        node.type === \"CallExpression\"\n      ) {\n        node.optional = false;\n      }\n\n      return node;\n    }\n  };\n", "// @flow\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\nimport { types as tt } from \"./types\";\n\nexport class TokContext {\n  constructor(\n    token: string,\n    isExpr?: boolean,\n    preserveSpace?: boolean,\n    override?: ?Function, // Takes a Tokenizer as a this-parameter, and returns void.\n  ) {\n    this.token = token;\n    this.isExpr = !!isExpr;\n    this.preserveSpace = !!preserveSpace;\n    this.override = override;\n  }\n\n  token: string;\n  isExpr: boolean;\n  preserveSpace: boolean;\n  override: ?Function;\n}\n\nexport const types: {\n  [key: string]: TokContext,\n} = {\n  braceStatement: new TokContext(\"{\", false),\n  braceExpression: new TokContext(\"{\", true),\n  recordExpression: new TokContext(\"#{\", true),\n  templateQuasi: new TokContext(\"${\", false),\n  parenStatement: new TokContext(\"(\", false),\n  parenExpression: new TokContext(\"(\", true),\n  template: new TokContext(\"`\", true, true, p => p.readTmplToken()),\n  functionExpression: new TokContext(\"function\", true),\n  functionStatement: new TokContext(\"function\", false),\n};\n\n// Token-specific context update code\n\ntt.parenR.updateContext = tt.braceR.updateContext = function () {\n  if (this.state.context.length === 1) {\n    this.state.exprAllowed = true;\n    return;\n  }\n\n  let out = this.state.context.pop();\n  if (out === types.braceStatement && this.curContext().token === \"function\") {\n    out = this.state.context.pop();\n  }\n\n  this.state.exprAllowed = !out.isExpr;\n};\n\ntt.name.updateContext = function (prevType) {\n  let allowed = false;\n  if (prevType !== tt.dot) {\n    if (\n      (this.state.value === \"of\" &&\n        !this.state.exprAllowed &&\n        prevType !== tt._function &&\n        prevType !== tt._class) ||\n      (this.state.value === \"yield\" && this.prodParam.hasYield)\n    ) {\n      allowed = true;\n    }\n  }\n  this.state.exprAllowed = allowed;\n\n  if (this.state.isIterator) {\n    this.state.isIterator = false;\n  }\n};\n\ntt.braceL.updateContext = function (prevType) {\n  this.state.context.push(\n    this.braceIsBlock(prevType) ? types.braceStatement : types.braceExpression,\n  );\n  this.state.exprAllowed = true;\n};\n\ntt.dollarBraceL.updateContext = function () {\n  this.state.context.push(types.templateQuasi);\n  this.state.exprAllowed = true;\n};\n\ntt.parenL.updateContext = function (prevType) {\n  const statementParens =\n    prevType === tt._if ||\n    prevType === tt._for ||\n    prevType === tt._with ||\n    prevType === tt._while;\n  this.state.context.push(\n    statementParens ? types.parenStatement : types.parenExpression,\n  );\n  this.state.exprAllowed = true;\n};\n\ntt.incDec.updateContext = function () {\n  // tokExprAllowed stays unchanged\n};\n\ntt._function.updateContext = tt._class.updateContext = function (prevType) {\n  if (\n    prevType.beforeExpr &&\n    prevType !== tt.semi &&\n    prevType !== tt._else &&\n    !(prevType === tt._return && this.hasPrecedingLineBreak()) &&\n    !(\n      (prevType === tt.colon || prevType === tt.braceL) &&\n      this.curContext() === types.b_stat\n    )\n  ) {\n    this.state.context.push(types.functionExpression);\n  } else {\n    this.state.context.push(types.functionStatement);\n  }\n\n  this.state.exprAllowed = false;\n};\n\ntt.backQuote.updateContext = function () {\n  if (this.curContext() === types.template) {\n    this.state.context.pop();\n  } else {\n    this.state.context.push(types.template);\n  }\n  this.state.exprAllowed = false;\n};\n\n// we don't need to update context for tt.braceBarL because we do not pop context for tt.braceBarR\ntt.braceHashL.updateContext = function () {\n  this.state.context.push(types.recordExpression);\n  this.state.exprAllowed = true; /* tt.braceHashL.beforeExpr */\n};\n", "// @flow\n\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet 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\\u08a0-\\u08b4\\u08b6-\\u08c7\\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\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\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-\\u170c\\u170e-\\u1711\\u1720-\\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-\\u1b4b\\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-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\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-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\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\";\n/* prettier-ignore */\nlet 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\\u08d3-\\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\\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\\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-\\u0ecd\\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-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\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-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\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\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\n/* prettier-ignore */\nconst 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,157,310,10,21,11,7,153,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,107,20,28,22,13,52,76,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,85,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,230,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,35,56,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,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,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,8952,286,50,2,18,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,2357,44,11,6,17,0,370,43,1301,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,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];\n/* prettier-ignore */\nconst 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,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,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,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,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,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: $ReadOnlyArray<number>): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (const char of Array.from(name)) {\n    const cp = char.codePointAt(0);\n    if (isFirst) {\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n      isFirst = false;\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n", "// @flow\n\nconst reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n", "/* eslint max-len: 0 */\n\n// @flow\n\nimport * as charCodes from \"charcodes\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(current: number, next: number): boolean {\n  return current === charCodes.atSign && next === charCodes.atSign;\n}\n", "// @flow\n\n/*:: declare var invariant; */\n\n// Error messages are colocated with the plugin.\n/* eslint-disable @babel/development-internal/dry-error-messages */\n\nimport type Parser from \"../parser\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport * as N from \"../types\";\nimport type { Options } from \"../options\";\nimport type { Pos, Position } from \"../util/location\";\nimport type State from \"../tokenizer/state\";\nimport { types as tc } from \"../tokenizer/context\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../util/identifier\";\nimport {\n  type BindingTypes,\n  BIND_NONE,\n  BIND_LEXICAL,\n  BIND_VAR,\n  BIND_FUNCTION,\n  SCOPE_ARROW,\n  SCOPE_FUNCTION,\n  SCOPE_OTHER,\n} from \"../util/scopeflags\";\nimport type { ExpressionErrors } from \"../parser/util\";\nimport { Errors } from \"../parser/error\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = Object.freeze({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module\",\n  AssignReservedType: \"Cannot overwrite reserved type %0\",\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports: \"Duplicate `declare module.exports` statement\",\n  EnumBooleanMemberNotInitialized:\n    \"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.\",\n  EnumDuplicateMemberName:\n    \"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.\",\n  EnumInconsistentMemberValues:\n    \"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.\",\n  EnumInvalidExplicitType:\n    \"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidExplicitTypeUnknownSupplied:\n    \"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidMemberInitializerPrimaryType:\n    \"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.\",\n  EnumInvalidMemberInitializerSymbolType:\n    \"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.\",\n  EnumInvalidMemberInitializerUnknownType:\n    \"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.\",\n  EnumInvalidMemberName:\n    \"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.\",\n  EnumNumberMemberNotInitialized:\n    \"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.\",\n  EnumStringMemberInconsistentlyInitailized:\n    \"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment\",\n  OptionalBindingPattern:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  SpreadVariance: \"Spread properties cannot have variance\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object\",\n  UnexpectedReservedType: \"Unexpected reserved type %0\",\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\"',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`\",\n  UnsupportedDeclareExportKind:\n    \"`declare export %0` is not supported. Use `%1` instead\",\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module\",\n  UnterminatedFlowComment: \"Unterminated flow-comment\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(node: N.Node): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(state: State): boolean {\n  return (\n    (state.type === tt.name || !!state.type.keyword) && state.value !== \"from\"\n  );\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (T, number, T[]) => ?boolean,\n): [T[], T[]] {\n  const list1 = [];\n  const list2 = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\ntype EnumContext = {|\n  enumName: string,\n  explicitType: EnumExplicitType,\n  memberName: string,\n|};\ntype EnumMemberInit =\n  | {| type: \"number\", pos: number, value: N.Node |}\n  | {| type: \"string\", pos: number, value: N.Node |}\n  | {| type: \"boolean\", pos: number, value: N.Node |}\n  | {| type: \"invalid\", pos: number |}\n  | {| type: \"none\", pos: number |};\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\";\n\n    constructor(options: ?Options, input: string) {\n      super(options, input);\n      this.flowPragma = undefined;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    shouldParseEnums(): boolean {\n      return !!this.getPluginOption(\"flow\", \"enums\");\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      return super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      return super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowType {\n      const node = this.startNode();\n      const moduloLoc = this.state.startLoc;\n      const moduloPos = this.state.start;\n      this.expect(tt.modulo);\n      const checksLoc = this.state.startLoc;\n      this.expectContextual(\"checks\");\n      // Force '%' and 'checks' to be adjacent\n      if (\n        moduloLoc.line !== checksLoc.line ||\n        moduloLoc.column !== checksLoc.column - 1\n      ) {\n        this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = this.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [?N.FlowType, ?N.FlowPredicate] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(node: N.FlowDeclareClass): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: N.FlowDeclareFunction,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode();\n      const typeContainer = this.startNode();\n\n      if (this.isRelational(\"<\")) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      this.expect(tt.parenR);\n\n      [\n        // $FlowFixMe (destructuring not supported yet)\n        typeNode.returnType,\n        // $FlowFixMe (destructuring not supported yet)\n        node.predicate,\n      ] = this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: N.FlowDeclare,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(\"module\")) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(\"type\")) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(\"opaque\")) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(\"interface\")) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        throw this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: N.FlowDeclareVariable,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(node: N.FlowDeclareModule): N.FlowDeclareModule {\n      this.scope.enter(SCOPE_OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = this.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode());\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(\"type\") && !this.match(tt._typeof)) {\n            this.raise(\n              this.state.lastTokStart,\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n            );\n          }\n          this.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            \"declare\",\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(\n              bodyElement.start,\n              FlowErrors.AmbiguousDeclareModuleKind,\n            );\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(\n              bodyElement.start,\n              FlowErrors.DuplicateDeclareModuleExports,\n            );\n          }\n          if (kind === \"ES\") {\n            this.raise(\n              bodyElement.start,\n              FlowErrors.AmbiguousDeclareModuleKind,\n            );\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: N.FlowDeclareExportDeclaration,\n      insideModule: ?boolean,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(\"type\") || this.isContextual(\"interface\")) &&\n            !insideModule)\n        ) {\n          const label = this.state.value;\n          const suggestion = exportSuggestions[label];\n\n          throw this.raise(\n            this.state.start,\n            FlowErrors.UnsupportedDeclareExportKind,\n            label,\n            suggestion,\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(\"opaque\") // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(\"interface\") || // declare export interface ...\n          this.isContextual(\"type\") || // declare export type ...\n          this.isContextual(\"opaque\") // declare export opaque type ...\n        ) {\n          node = this.parseExport(node);\n          if (node.type === \"ExportNamedDeclaration\") {\n            // flow does not support the ExportNamedDeclaration\n            // $FlowIgnore\n            node.type = \"ExportDeclaration\";\n            // $FlowFixMe\n            node.default = false;\n            delete node.exportKind;\n          }\n\n          // $FlowIgnore\n          node.type = \"Declare\" + node.type;\n\n          return node;\n        }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: N.FlowDeclareModuleExports,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(\"exports\");\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: N.FlowDeclareTypeAlias,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      this.flowParseTypeAlias(node);\n      // Don't do finishNode as we don't want to process comments twice\n      node.type = \"DeclareTypeAlias\";\n      return node;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: N.FlowDeclareOpaqueType,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      this.flowParseOpaqueType(node, true);\n      // Don't do finishNode as we don't want to process comments twice\n      node.type = \"DeclareOpaqueType\";\n      return node;\n    }\n\n    flowParseDeclareInterface(\n      node: N.FlowDeclareInterface,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(\n      node: N.FlowDeclare,\n      isClass?: boolean = false,\n    ): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BIND_FUNCTION : BIND_LEXICAL,\n        node.id.start,\n      );\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n      node.implements = [];\n      node.mixins = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (this.isContextual(\"mixins\")) {\n        this.next();\n        do {\n          node.mixins.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      if (this.isContextual(\"implements\")) {\n        this.next();\n        do {\n          node.implements.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: N.FlowInterface): N.FlowInterface {\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);\n      }\n    }\n\n    checkReservedType(word: string, startLoc: number, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        startLoc,\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        word,\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(this.state.value, this.state.start, declaration);\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: N.FlowTypeAlias): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: N.FlowOpaqueType,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(\"type\");\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault?: boolean = false): N.TypeParameter {\n      const nodeStart = this.state.start;\n\n      const node = this.startNode();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      node.variance = variance;\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.isRelational(\"<\") || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.isRelational(\">\")) {\n          this.expect(tt.comma);\n        }\n      } while (!this.isRelational(\">\"));\n      this.expectRelational(\">\");\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expectRelational(\"<\");\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n      while (!this.isRelational(\">\")) {\n        node.params.push(this.flowParseType());\n        if (!this.isRelational(\">\")) {\n          this.expect(tt.comma);\n        }\n      }\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expectRelational(\">\");\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      const node = this.startNode();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expectRelational(\"<\");\n      while (!this.isRelational(\">\")) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.isRelational(\">\")) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expectRelational(\">\");\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode();\n      this.expectContextual(\"interface\");\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? this.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: N.FlowObjectTypeIndexer,\n      isStatic: boolean,\n      variance: ?N.FlowVariance,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: N.FlowObjectTypeInternalSlot,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.isRelational(\"<\") || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.start, node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: N.FlowFunctionTypeAnnotation,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam());\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam();\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: N.FlowObjectTypeCallProperty,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean,\n      allowExact: boolean,\n      allowSpread: boolean,\n      allowProto: boolean,\n      allowInexact: boolean,\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStart: ?number = null;\n        let inexactStart: ?number = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(\"proto\")) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStart = this.state.start;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(\"static\")) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n            const lookahead = this.lookahead();\n            if (\n              lookahead.type === tt.name ||\n              lookahead.type === tt.string ||\n              lookahead.type === tt.num\n            ) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStart,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStart = this.state.lastTokStart;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStart &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            inexactStart,\n            FlowErrors.UnexpectedExplicitInexactInObject,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty,\n      isStatic: boolean,\n      protoStart: ?number,\n      variance: ?N.FlowVariance,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): (N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty) | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              this.state.lastTokStart,\n              FlowErrors.InexactInsideNonObject,\n            );\n          } else if (!allowInexact) {\n            this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);\n          }\n          if (variance) {\n            this.raise(variance.start, FlowErrors.InexactVariance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);\n        }\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n        if (variance) {\n          this.raise(variance.start, FlowErrors.SpreadVariance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStart != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.isRelational(\"<\") || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.start, node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const start = property.start;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n      if (length !== paramCount) {\n        if (property.kind === \"get\") {\n          this.raise(start, Errors.BadGetterArity);\n        } else {\n          this.raise(start, Errors.BadSetterArity);\n        }\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(start, Errors.BadSetterRestParameter);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startPos?: number,\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier {\n      startPos = startPos || this.state.start;\n      startLoc = startLoc || this.state.startLoc;\n      let node = id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt(startPos, startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startPos: number,\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt(startPos, startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode();\n      const lh = this.lookahead();\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        name = this.parseIdentifier();\n        if (this.eat(tt.question)) {\n          optional = true;\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt(type.start, type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(\n      params: N.FlowFunctionTypeParam[] = [],\n    ): { params: N.FlowFunctionTypeParam[], rest: ?N.FlowFunctionTypeParam } {\n      let rest: ?N.FlowFunctionTypeParam = null;\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam());\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam();\n      }\n      return { params, rest };\n    }\n\n    flowIdentToTypeAnnotation(\n      startPos: number,\n      startLoc: Position,\n      node: N.FlowTypeAnnotation,\n      id: N.Identifier,\n    ): N.FlowTypeAnnotation {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startPos, startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowTypeAnnotation {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const node = this.startNode();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.name:\n          if (this.isContextual(\"interface\")) {\n            return this.flowParseInterfaceType();\n          }\n\n          return this.flowIdentToTypeAnnotation(\n            startPos,\n            startLoc,\n            node,\n            this.parseIdentifier(),\n          );\n\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.relational:\n          if (this.state.value === \"<\") {\n            node.typeParameters = this.flowParseTypeParameterDeclaration();\n            this.expect(tt.parenL);\n            tmp = this.flowParseFunctionTypeParams();\n            node.params = tmp.params;\n            node.rest = tmp.rest;\n            this.expect(tt.parenR);\n\n            this.expect(tt.arrow);\n\n            node.returnType = this.flowParseType();\n\n            return this.finishNode(node, \"FunctionTypeAnnotation\");\n          }\n          break;\n\n        case tt.parenL:\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (this.match(tt.name)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n        case tt.string:\n          return this.parseLiteral(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteral(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node.start,\n                node.loc.start,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteral(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node.start,\n                node.loc.start,\n              );\n            }\n\n            throw this.raise(\n              this.state.start,\n              FlowErrors.UnexpectedSubtractionOperand,\n            );\n          }\n\n          throw this.unexpected();\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        default:\n          if (this.state.type.keyword === \"typeof\") {\n            return this.flowParseTypeofType();\n          } else if (this.state.type.keyword) {\n            const label = this.state.type.label;\n            this.next();\n            return super.createIdentifier(node, label);\n          }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowTypeAnnotation {\n      const startPos = this.state.start,\n        startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      while (this.match(tt.bracketL) && !this.canInsertSemicolon()) {\n        const node = this.startNodeAt(startPos, startLoc);\n        node.elementType = type;\n        this.expect(tt.bracketL);\n        this.expect(tt.bracketR);\n        type = this.finishNode(node, \"ArrayTypeAnnotation\");\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowTypeAnnotation {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt(param.start, param.loc.start);\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      // Ensure that a brace after a function generic type annotation is a\n      // statement, except in arrow functions (noAnonFunctionType)\n      this.state.exprAllowed =\n        this.state.exprAllowed || this.state.noAnonFunctionType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowTypeAnnotation {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startPos = this.state.start;\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startPos, startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.Node): N.Node {\n      node.expression.typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(\n        node.expression,\n        node.typeAnnotation.end,\n        node.typeAnnotation.loc.end,\n      );\n\n      return node.expression;\n    }\n\n    flowParseVariance(): ?N.FlowVariance {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody: ?boolean,\n      isMethod?: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        return this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n      }\n\n      return super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish(\n      node: N.BodilessFunctionOrMethodBase,\n      type: string,\n      isMethod?: boolean = false,\n    ): void {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode();\n\n        [\n          // $FlowFixMe (destructuring not supported yet)\n          typeNode.typeAnnotation,\n          // $FlowFixMe (destructuring not supported yet)\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatement(context: ?string, topLevel?: boolean): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (\n        this.state.strict &&\n        this.match(tt.name) &&\n        this.state.value === \"interface\"\n      ) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseInterface(node);\n      } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      } else {\n        const stmt = super.parseStatement(context, topLevel);\n        // We will parse a flow pragma in any comment before the first statement.\n        if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n          this.flowPragma = null;\n        }\n        return stmt;\n      }\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            this.match(tt.name) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            return this.flowParseDeclare(node);\n          }\n        } else if (this.match(tt.name)) {\n          if (expr.name === \"interface\") {\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      return (\n        this.isContextual(\"type\") ||\n        this.isContextual(\"interface\") ||\n        this.isContextual(\"opaque\") ||\n        (this.shouldParseEnums() && this.isContextual(\"enum\")) ||\n        super.shouldParseExportDeclaration()\n      );\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (\n        this.match(tt.name) &&\n        (this.state.value === \"type\" ||\n          this.state.value === \"interface\" ||\n          this.state.value === \"opaque\" ||\n          (this.shouldParseEnums() && this.state.value === \"enum\"))\n      ) {\n        return false;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\n      if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      refNeedsArrowPos?: ?Pos,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      // only use the expensive \"tryParse\" method if there is a question mark\n      // and if we come from inside parens\n      if (refNeedsArrowPos) {\n        const result = this.tryParse(() =>\n          super.parseConditional(expr, startPos, startLoc),\n        );\n\n        if (!result.node) {\n          // $FlowIgnore\n          refNeedsArrowPos.start = result.error.pos || this.state.start;\n          return expr;\n        }\n\n        if (result.error) this.state = result.failState;\n        return result.node;\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt(startPos, startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt.concat(valid[0].start);\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression,\n      failed: boolean,\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (node.type === \"ArrowFunctionExpression\") {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        ((node.params: any): N.Expression[]),\n        node.extra?.trailingComma,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(node: N.Node, parse: () => T): T {\n      let result: T;\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem(\n      node: N.Expression,\n      startPos: number,\n      startLoc: Position,\n    ): N.Expression {\n      node = super.parseParenItem(node, startPos, startLoc);\n      if (this.eat(tt.question)) {\n        node.optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt(startPos, startLoc);\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExport(node: N.Node): N.AnyExport {\n      const decl = super.parseExport(node);\n      if (\n        decl.type === \"ExportNamedDeclaration\" ||\n        decl.type === \"ExportAllDeclaration\"\n      ) {\n        decl.exportKind = decl.exportKind || \"value\";\n      }\n      return decl;\n    }\n\n    parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n      if (this.isContextual(\"type\")) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers();\n          this.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(\"opaque\")) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(\"interface\")) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseInterface(declarationNode);\n      } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(node: N.Node): boolean {\n      if (super.eatExportStar(...arguments)) return true;\n\n      if (this.isContextual(\"type\") && this.lookahead().type === tt.star) {\n        node.exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n      const pos = this.state.start;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(pos);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(node: N.Class, isStatement: boolean, optionalId: ?boolean) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const pos = this.state.start;\n      if (this.isContextual(\"declare\")) {\n        if (this.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\"\n        ) {\n          this.raise(pos, FlowErrors.DeclareClassElement);\n        } else if (member.value) {\n          this.raise(\n            member.value.start,\n            FlowErrors.DeclareClassFieldInitializer,\n          );\n        }\n      }\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        return this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        return this.finishOp(tt.relational, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        // allow double nullable types in Flow: ??string\n        return this.finishOp(tt.question, 1);\n      } else if (isIteratorStart(code, next)) {\n        this.state.isIterator = true;\n        return super.readWord();\n      } else {\n        return super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"Identifier\":\n        case \"ObjectPattern\":\n        case \"ArrayPattern\":\n        case \"AssignmentPattern\":\n          return true;\n\n        case \"ObjectExpression\": {\n          const last = node.properties.length - 1;\n          return node.properties.every((prop, i) => {\n            return (\n              prop.type !== \"ObjectMethod\" &&\n              (i === last || prop.type === \"SpreadElement\") &&\n              this.isAssignable(prop)\n            );\n          });\n        }\n\n        case \"ObjectProperty\":\n          return this.isAssignable(node.value);\n\n        case \"SpreadElement\":\n          return this.isAssignable(node.argument);\n\n        case \"ArrayExpression\":\n          return node.elements.every(element => this.isAssignable(element));\n\n        case \"AssignmentExpression\":\n          return node.operator === \"=\";\n\n        case \"ParenthesizedExpression\":\n        case \"TypeCastExpression\":\n          return this.isAssignable(node.expression);\n\n        case \"MemberExpression\":\n        case \"OptionalMemberExpression\":\n          return !isBinding;\n\n        default:\n          return false;\n      }\n    }\n\n    toAssignable(node: N.Node): N.Node {\n      if (node.type === \"TypeCastExpression\") {\n        return super.toAssignable(this.typeCastToParameter(node));\n      } else {\n        return super.toAssignable(node);\n      }\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaPos?: ?number,\n    ): $ReadOnlyArray<N.Pattern> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      return super.toAssignableList(exprList, trailingCommaPos);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList: $ReadOnlyArray<?N.Expression>,\n      isParenthesizedExpr?: boolean,\n    ): $ReadOnlyArray<?N.Expression> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);\n        }\n      }\n\n      return exprList;\n    }\n\n    checkLVal(\n      expr: N.Expression,\n      bindingType: BindingTypes = BIND_NONE,\n      checkClashes: ?{ [key: string]: boolean },\n      contextDescription: string,\n    ): void {\n      if (expr.type !== \"TypeCastExpression\") {\n        return super.checkLVal(\n          expr,\n          bindingType,\n          checkClashes,\n          contextDescription,\n        );\n      }\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.isRelational(\"<\") || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method: $FlowFixMe).variance) {\n        this.unexpected((method: $FlowFixMe).variance.start);\n      }\n      delete (method: $FlowFixMe).variance;\n      if (this.isRelational(\"<\")) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method: $FlowFixMe).variance) {\n        this.unexpected((method: $FlowFixMe).variance.start);\n      }\n      delete (method: $FlowFixMe).variance;\n      if (this.isRelational(\"<\")) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.isRelational(\"<\")) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n      if (this.isContextual(\"implements\")) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.isRelational(\"<\")) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    parsePropertyName(\n      node: N.ObjectOrClassMember | N.ClassMember | N.TsNamedTypeElementBase,\n      isPrivateNameAllowed: boolean,\n    ): N.Identifier {\n      const variance = this.flowParseVariance();\n      const key = super.parsePropertyName(node, isPrivateNameAllowed);\n      // $FlowIgnore (\"variance\" not defined on TsNamedTypeElementBase)\n      node.variance = variance;\n      return key;\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue(\n      prop: N.ObjectMember,\n      startPos: ?number,\n      startLoc: ?Position,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors: ?ExpressionErrors,\n    ): void {\n      if ((prop: $FlowFixMe).variance) {\n        this.unexpected((prop: $FlowFixMe).variance.start);\n      }\n      delete (prop: $FlowFixMe).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.isRelational(\"<\") && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      super.parseObjPropValue(\n        prop,\n        startPos,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        (prop.value || prop).typeParameters = typeParameters;\n      }\n    }\n\n    parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(param.start, FlowErrors.OptionalBindingPattern);\n        }\n\n        ((param: any): N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(\n      startPos?: ?number,\n      startLoc?: ?Position,\n      left?: ?N.Pattern,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);\n      }\n\n      return node;\n    }\n\n    shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n      if (!hasTypeImportKind(node)) {\n        return super.shouldParseDefaultImport(node);\n      }\n\n      return isMaybeDefaultImport(this.state);\n    }\n\n    parseImportSpecifierLocal(\n      node: N.ImportDeclaration,\n      specifier: N.Node,\n      type: string,\n      contextDescription: string,\n    ): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      this.checkLVal(\n        specifier.local,\n        BIND_LEXICAL,\n        undefined,\n        contextDescription,\n      );\n      node.specifiers.push(this.finishNode(specifier, type));\n    }\n\n    // parse typeof and type imports\n    maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n      node.importKind = \"value\";\n\n      let kind = null;\n      if (this.match(tt._typeof)) {\n        kind = \"typeof\";\n      } else if (this.isContextual(\"type\")) {\n        kind = \"type\";\n      }\n      if (kind) {\n        const lh = this.lookahead();\n\n        // import type * is not allowed\n        if (kind === \"type\" && lh.type === tt.star) {\n          this.unexpected(lh.start);\n        }\n\n        if (\n          isMaybeDefaultImport(lh) ||\n          lh.type === tt.braceL ||\n          lh.type === tt.star\n        ) {\n          this.next();\n          node.importKind = kind;\n        }\n      }\n\n      return super.maybeParseDefaultImportSpecifier(node);\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(node: N.ImportDeclaration): void {\n      const specifier = this.startNode();\n      const firstIdentLoc = this.state.start;\n      const firstIdent = this.parseIdentifier(true);\n\n      let specifierTypeKind = null;\n      if (firstIdent.name === \"type\") {\n        specifierTypeKind = \"type\";\n      } else if (firstIdent.name === \"typeof\") {\n        specifierTypeKind = \"typeof\";\n      }\n\n      let isBinding = false;\n      if (this.isContextual(\"as\") && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !this.match(tt.name) &&\n          !this.state.type.keyword\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = as_ident.__clone();\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else if (\n        specifierTypeKind !== null &&\n        (this.match(tt.name) || this.state.type.keyword)\n      ) {\n        // `import {type foo`\n        specifier.imported = this.parseIdentifier(true);\n        specifier.importKind = specifierTypeKind;\n        if (this.eatContextual(\"as\")) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = specifier.imported.__clone();\n        }\n      } else {\n        isBinding = true;\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n        specifier.local = specifier.imported.__clone();\n      }\n\n      const nodeIsTypeImport = hasTypeImportKind(node);\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (nodeIsTypeImport && specifierIsTypeImport) {\n        this.raise(\n          firstIdentLoc,\n          FlowErrors.ImportTypeShorthandOnlyInPureImport,\n        );\n      }\n\n      if (nodeIsTypeImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.start,\n          true,\n          true,\n        );\n      }\n\n      this.checkLVal(\n        specifier.local,\n        BIND_LEXICAL,\n        undefined,\n        \"import specifier\",\n      );\n      node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n      // $FlowFixMe\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ?ExpressionErrors,\n      afterLeftParse?: Function,\n      refNeedsArrowPos?: ?Pos,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.isRelational(\"<\"))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () =>\n            super.parseMaybeAssign(\n              refExpressionErrors,\n              afterLeftParse,\n              refNeedsArrowPos,\n            ),\n          state,\n        );\n        /*:: invariant(!jsx.aborted) */\n\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        if (context[context.length - 1] === tc.j_oTag) {\n          context.length -= 2;\n        } else if (context[context.length - 1] === tc.j_expr) {\n          context.length -= 1;\n        }\n      }\n\n      if (jsx?.error || this.isRelational(\"<\")) {\n        state = state || this.state.clone();\n\n        let typeParameters;\n\n        const arrow = this.tryParse(abort => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n                refNeedsArrowPos,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {}: any);\n          if (\n            arrowExpression.type !== \"ArrowFunctionExpression\" &&\n            arrowExpression.extra?.parenthesized\n          ) {\n            abort();\n          }\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression: ?(\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n        ) = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                typeParameters.start,\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n              );\n            }\n\n            return arrow.node;\n          }\n\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          typeParameters.start,\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n        );\n      }\n\n      return super.parseMaybeAssign(\n        refExpressionErrors,\n        afterLeftParse,\n        refNeedsArrowPos,\n      );\n    }\n\n    // handle return types for arrow functions\n    parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const result = this.tryParse(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode();\n\n          [\n            // $FlowFixMe (destructuring not supported yet)\n            typeNode.typeAnnotation,\n            // $FlowFixMe (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow();\n    }\n\n    setArrowFunctionParameters(\n      node: N.ArrowFunctionExpression,\n      params: N.Expression[],\n    ): void {\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        node.params = params;\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction: ?boolean,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1\n      ) {\n        return;\n      }\n\n      return super.checkParams(...arguments);\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1,\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls?: ?boolean,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.indexOf(startPos) !== -1\n      ) {\n        this.next();\n\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.isRelational(\"<\")\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort =>\n            this.parseAsyncArrowWithTypeParameters(startPos, startLoc) ||\n            abort(),\n          state,\n        );\n\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startPos, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startPos, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls: ?boolean,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node: N.OptionalCallExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(tt.parenL);\n        // $FlowFixMe\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (\n        !noCalls &&\n        this.shouldParseTypes() &&\n        this.isRelational(\"<\")\n      ) {\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n          if (subscriptState.optionalChainMember) node.optional = false;\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n        startPos,\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewArguments(node: N.NewExpression): void {\n      let targs = null;\n      if (this.shouldParseTypes() && this.isRelational(\"<\")) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n\n      super.parseNewArguments(node);\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startPos: number,\n      startLoc: Position,\n    ): ?N.ArrowFunctionExpression {\n      const node = this.startNodeAt(startPos, startLoc);\n      this.parseFunctionParams(node);\n      if (!this.parseArrow(node)) return;\n      return this.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): void {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          this.unexpected(null, FlowErrors.NestedFlowComment);\n        }\n        this.hasFlowCommentCompletion();\n        this.state.pos += this.skipFlowComment();\n        this.state.hasFlowComment = true;\n        return;\n      }\n\n      if (this.state.hasFlowComment) {\n        const end = this.input.indexOf(\"*-/\", (this.state.pos += 2));\n        if (end === -1) {\n          throw this.raise(this.state.pos - 2, Errors.UnterminatedComment);\n        }\n        this.state.pos = end + 3;\n        return;\n      }\n\n      super.skipBlockComment();\n    }\n\n    skipFlowComment(): number | boolean {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(this.state.pos, Errors.UnterminatedComment);\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      this.raise(\n        pos,\n        FlowErrors.EnumBooleanMemberNotInitialized,\n        memberName,\n        enumName,\n      );\n    }\n\n    flowEnumErrorInvalidMemberName(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n      this.raise(\n        pos,\n        FlowErrors.EnumInvalidMemberName,\n        memberName,\n        suggestion,\n        enumName,\n      );\n    }\n\n    flowEnumErrorDuplicateMemberName(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);\n    }\n\n    flowEnumErrorInconsistentMemberValues(\n      pos: number,\n      { enumName }: { enumName: string },\n    ): void {\n      this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);\n    }\n\n    flowEnumErrorInvalidExplicitType(\n      pos: number,\n      {\n        enumName,\n        suppliedType,\n      }: { enumName: string, suppliedType: null | string },\n    ) {\n      return this.raise(\n        pos,\n        suppliedType === null\n          ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied\n          : FlowErrors.EnumInvalidExplicitType,\n        enumName,\n        suppliedType,\n      );\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      pos: number,\n      { enumName, explicitType, memberName }: EnumContext,\n    ) {\n      let message = null;\n      switch (explicitType) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;\n          break;\n        case \"symbol\":\n          message = FlowErrors.EnumInvalidMemberInitializerSymbolType;\n          break;\n        default:\n          // null\n          message = FlowErrors.EnumInvalidMemberInitializerUnknownType;\n      }\n      return this.raise(pos, message, enumName, memberName, explicitType);\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      pos: number,\n      { enumName, memberName }: { enumName: string, memberName: string },\n    ): void {\n      this.raise(\n        pos,\n        FlowErrors.EnumNumberMemberNotInitialized,\n        enumName,\n        memberName,\n      );\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitailized(\n      pos: number,\n      { enumName }: { enumName: string },\n    ): void {\n      this.raise(\n        pos,\n        FlowErrors.EnumStringMemberInconsistentlyInitailized,\n        enumName,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startPos = this.state.start;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseLiteral(this.state.value, \"NumericLiteral\");\n          if (endOfInit()) {\n            return { type: \"number\", pos: literal.start, value: literal };\n          }\n          return { type: \"invalid\", pos: startPos };\n        }\n        case tt.string: {\n          const literal = this.parseLiteral(this.state.value, \"StringLiteral\");\n          if (endOfInit()) {\n            return { type: \"string\", pos: literal.start, value: literal };\n          }\n          return { type: \"invalid\", pos: startPos };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral();\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              pos: literal.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", pos: startPos };\n        }\n        default:\n          return { type: \"invalid\", pos: startPos };\n      }\n    }\n\n    flowEnumMemberRaw(): { id: N.Node, init: EnumMemberInit } {\n      const pos = this.state.start;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\", pos };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      pos: number,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(pos, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string,\n      explicitType: EnumExplicitType,\n    }): {|\n      booleanMembers: Array<N.Node>,\n      numberMembers: Array<N.Node>,\n      stringMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n    |} {\n      const seenNames = new Set();\n      const members = {\n        booleanMembers: [],\n        numberMembers: [],\n        stringMembers: [],\n        defaultedMembers: [],\n      };\n      while (!this.match(tt.braceR)) {\n        const memberNode = this.startNode();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.flowEnumErrorInvalidMemberName(id.start, {\n            enumName,\n            memberName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.flowEnumErrorDuplicateMemberName(id.start, {\n            enumName,\n            memberName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.pos,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.pos,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return members;\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      { enumName }: { enumName: string },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(\n            member.start,\n            { enumName },\n          );\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(\n            member.start,\n            { enumName },\n          );\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string,\n    }): EnumExplicitType {\n      if (this.eatContextual(\"of\")) {\n        if (!this.match(tt.name)) {\n          throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n            enumName,\n            suppliedType: null,\n          });\n        }\n\n        const { value } = this.state;\n        this.next();\n\n        if (\n          value !== \"boolean\" &&\n          value !== \"number\" &&\n          value !== \"string\" &&\n          value !== \"symbol\"\n        ) {\n          this.flowEnumErrorInvalidExplicitType(this.state.start, {\n            enumName,\n            suppliedType: value,\n          });\n        }\n\n        return value;\n      }\n      return null;\n    }\n\n    flowEnumBody(node: N.Node, { enumName, nameLoc }): N.Node {\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const members = this.flowEnumMembers({ enumName, explicitType });\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.flowEnumErrorInconsistentMemberValues(nameLoc, { enumName });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(node: N.Node): N.Node {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), {\n        enumName: id.name,\n        nameLoc: id.start,\n      });\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    updateContext(prevType: TokenType): void {\n      if (\n        this.match(tt.name) &&\n        this.state.value === \"of\" &&\n        prevType === tt.name &&\n        this.input.slice(this.state.lastTokStart, this.state.lastTokEnd) ===\n          \"interface\"\n      ) {\n        this.state.exprAllowed = false;\n      } else {\n        super.updateContext(prevType);\n      }\n    }\n\n    // check if the next token is a tt.relation(\"<\")\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n", "// @flow\n\nconst entities: { [name: string]: string } = {\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n};\nexport default entities;\n", "// @flow\n\n// Error messages are colocated with the plugin.\n/* eslint-disable @babel/development-internal/dry-error-messages */\n\nimport * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml\";\nimport type Parser from \"../../parser\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport { TokenType, types as tt } from \"../../tokenizer/types\";\nimport { TokContext, types as tc } from \"../../tokenizer/context\";\nimport * as N from \"../../types\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier\";\nimport type { Position } from \"../../util/location\";\nimport { isNewLine } from \"../../util/whitespace\";\nimport { Errors } from \"../../parser/error\";\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\n\nconst JsxErrors = Object.freeze({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression\",\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>\",\n  MissingClosingTagElement: \"Expected corresponding JSX closing tag for <%0>\",\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text\",\n  UnterminatedJsxContent: \"Unterminated JSX contents\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n// Be aware that this file is always executed and not only when the plugin is enabled.\n// Therefore this contexts and tokens do always exist.\ntc.j_oTag = new TokContext(\"<tag\", false);\ntc.j_cTag = new TokContext(\"</tag\", false);\ntc.j_expr = new TokContext(\"<tag>...</tag>\", true, true);\n\ntt.jsxName = new TokenType(\"jsxName\");\ntt.jsxText = new TokenType(\"jsxText\", { beforeExpr: true });\ntt.jsxTagStart = new TokenType(\"jsxTagStart\", { startsExpr: true });\ntt.jsxTagEnd = new TokenType(\"jsxTagEnd\");\n\ntt.jsxTagStart.updateContext = function () {\n  this.state.context.push(tc.j_expr); // treat as beginning of JSX expression\n  this.state.context.push(tc.j_oTag); // start opening tag context\n  this.state.exprAllowed = false;\n};\n\ntt.jsxTagEnd.updateContext = function (prevType) {\n  const out = this.state.context.pop();\n  if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n    this.state.context.pop();\n    this.state.exprAllowed = this.curContext() === tc.j_expr;\n  } else {\n    this.state.exprAllowed = true;\n  }\n};\n\nfunction isFragment(object: ?N.JSXElement): boolean {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.exprAllowed) {\n                ++this.state.pos;\n                return this.finishToken(tt.jsxTagStart);\n              }\n              return super.getTokenFromCode(ch);\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            return this.finishToken(tt.jsxText, out);\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(this.state.start, Errors.UnterminatedString);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      return this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      let str = \"\";\n      let count = 0;\n      let entity;\n      let ch = this.input[this.state.pos];\n\n      const startPos = ++this.state.pos;\n      while (this.state.pos < this.length && count++ < 10) {\n        ch = this.input[this.state.pos++];\n        if (ch === \";\") {\n          if (str[0] === \"#\") {\n            if (str[1] === \"x\") {\n              str = str.substr(2);\n              if (HEX_NUMBER.test(str)) {\n                entity = String.fromCodePoint(parseInt(str, 16));\n              }\n            } else {\n              str = str.substr(1);\n              if (DECIMAL_NUMBER.test(str)) {\n                entity = String.fromCodePoint(parseInt(str, 10));\n              }\n            }\n          } else {\n            entity = XHTMLEntities[str];\n          }\n          break;\n        }\n        str += ch;\n      }\n      if (!entity) {\n        this.state.pos = startPos;\n        return \"&\";\n      }\n      return entity;\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      return this.finishToken(\n        tt.jsxName,\n        this.input.slice(start, this.state.pos),\n      );\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (this.state.type.keyword) {\n        node.name = this.state.type.keyword;\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt(startPos, startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let node = this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt(startPos, startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue(): N.Expression {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.next();\n          node = this.jsxParseExpressionContainer(node);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(node.start, JsxErrors.AttributeIsEmpty);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom();\n\n        default:\n          throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(\n        this.state.lastTokEnd,\n        this.state.lastTokEndLoc,\n      );\n      return this.finishNodeAt(\n        node,\n        \"JSXEmptyExpression\",\n        this.state.start,\n        this.state.startLoc,\n      );\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: N.JSXSpreadChild): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: N.JSXExpressionContainer,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        node.expression = this.parseExpression();\n      }\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute {\n      const node = this.startNode();\n      if (this.eat(tt.braceL)) {\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startPos: number,\n      startLoc: Position,\n    ): N.JSXOpeningElement {\n      const node = this.startNodeAt(startPos, startLoc);\n      if (this.match(tt.jsxTagEnd)) {\n        this.expect(tt.jsxTagEnd);\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(node);\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      const attributes: N.JSXAttribute[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startPos: number,\n      startLoc: Position,\n    ): N.JSXClosingElement {\n      const node = this.startNodeAt(startPos, startLoc);\n      if (this.match(tt.jsxTagEnd)) {\n        this.expect(tt.jsxTagEnd);\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startPos: number, startLoc: Position): N.JSXElement {\n      const node = this.startNodeAt(startPos, startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startPos = this.state.start;\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(\n                  startPos,\n                  startLoc,\n                );\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startPos, startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseExprAtom());\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode();\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(this.jsxParseExpressionContainer(node));\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              throw this.unexpected();\n          }\n        }\n\n        if (isFragment(openingElement) && !isFragment(closingElement)) {\n          this.raise(\n            // $FlowIgnore\n            closingElement.start,\n            JsxErrors.MissingClosingTagFragment,\n          );\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(\n            // $FlowIgnore\n            closingElement.start,\n            JsxErrors.MissingClosingTagElement,\n            getQualifiedJSXName(openingElement.name),\n          );\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            // $FlowIgnore\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(\n              // $FlowIgnore\n              closingElement.start,\n              JsxErrors.MissingClosingTagElement,\n              getQualifiedJSXName(openingElement.name),\n            );\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.isRelational(\"<\")) {\n        throw this.raise(\n          this.state.start,\n          JsxErrors.UnwrappedAdjacentJSXElements,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startPos, startLoc);\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors: ?ExpressionErrors): N.Expression {\n      if (this.match(tt.jsxText)) {\n        return this.parseLiteral(this.state.value, \"JSXText\");\n      } else if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.isRelational(\"<\") &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.finishToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    getTokenFromCode(code: number): void {\n      if (this.state.inPropertyName) return super.getTokenFromCode(code);\n\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        return this.jsxReadToken();\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          return this.jsxReadWord();\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          return this.finishToken(tt.jsxTagEnd);\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          return this.jsxReadString(code);\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.exprAllowed &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        return this.finishToken(tt.jsxTagStart);\n      }\n\n      return super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      if (this.match(tt.braceL)) {\n        const curContext = this.curContext();\n        if (curContext === tc.j_oTag) {\n          this.state.context.push(tc.braceExpression);\n        } else if (curContext === tc.j_expr) {\n          this.state.context.push(tc.templateQuasi);\n        } else {\n          super.updateContext(prevType);\n        }\n        this.state.exprAllowed = true;\n      } else if (this.match(tt.slash) && prevType === tt.jsxTagStart) {\n        this.state.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n        this.state.context.push(tc.j_cTag); // reconsider as closing tag context\n        this.state.exprAllowed = false;\n      } else {\n        return super.updateContext(prevType);\n      }\n    }\n  };\n", "// @flow\nimport {\n  SCOPE_ARROW,\n  SCOPE_DIRECT_SUPER,\n  SCOPE_FUNCTION,\n  SCOPE_SIMPLE_CATCH,\n  SCOPE_SUPER,\n  SCOPE_PROGRAM,\n  SCOPE_VAR,\n  SCOPE_CLASS,\n  BIND_SCOPE_FUNCTION,\n  BIND_SCOPE_VAR,\n  BIND_SCOPE_LEXICAL,\n  BIND_KIND_VALUE,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"./scopeflags\";\nimport * as N from \"../types\";\nimport { Errors } from \"../parser/error\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlags;\n  // A list of var-declared names in the current lexical scope\n  var: string[] = [];\n  // A list of lexically-declared names in the current lexical scope\n  lexical: string[] = [];\n  // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n  functions: string[] = [];\n\n  constructor(flags: ScopeFlags) {\n    this.flags = flags;\n  }\n}\n\ntype raiseFunction = (number, string, ...any) => void;\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope: Scope = Scope> {\n  scopeStack: Array<IScope> = [];\n  raise: raiseFunction;\n  inModule: boolean;\n  undefinedExports: Map<string, number> = new Map();\n  undefinedPrivateNames: Map<string, number> = new Map();\n\n  constructor(raise: raiseFunction, inModule: boolean) {\n    this.raise = raise;\n    this.inModule = inModule;\n  }\n\n  get inFunction() {\n    return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScope().flags & SCOPE_SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScope().flags & SCOPE_CLASS) > 0;\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlags): Scope {\n    return new Scope(flags);\n  }\n  // This method will be overwritten by subclasses\n  /*:: +createScope: (flags: ScopeFlags) => IScope; */\n\n  enter(flags: ScopeFlags) {\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit() {\n    this.scopeStack.pop();\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & SCOPE_FUNCTION ||\n      (!this.inModule && scope.flags & SCOPE_PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingTypes, pos: number) {\n    let scope = this.currentScope();\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.push(name);\n      } else {\n        scope.lexical.push(name);\n      }\n\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        scope.var.push(name);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingTypes,\n    pos: number,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.raise(pos, Errors.VarRedeclaration, name);\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return (\n        scope.lexical.indexOf(name) > -1 ||\n        scope.functions.indexOf(name) > -1 ||\n        scope.var.indexOf(name) > -1\n      );\n    }\n\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return (\n        scope.lexical.indexOf(name) > -1 ||\n        (!this.treatFunctionsAsVarInScope(scope) &&\n          scope.var.indexOf(name) > -1)\n      );\n    }\n\n    return (\n      (scope.lexical.indexOf(name) > -1 &&\n        !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical[0] === name)) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        scope.functions.indexOf(name) > -1)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (\n      this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1 &&\n      // In strict mode, scope.functions will always be empty.\n      // Modules are strict by default, but the `scriptMode` option\n      // can overwrite this behavior.\n      this.scopeStack[0].functions.indexOf(id.name) === -1\n    ) {\n      this.undefinedExports.set(id.name, id.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  // $FlowIgnore\n  currentVarScope(): IScope {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const scope = this.scopeStack[i];\n      if (scope.flags & SCOPE_VAR) {\n        return scope;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  // $FlowIgnore\n  currentThisScope(): IScope {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const scope = this.scopeStack[i];\n      if (\n        (scope.flags & SCOPE_VAR || scope.flags & SCOPE_CLASS) &&\n        !(scope.flags & SCOPE_ARROW)\n      ) {\n        return scope;\n      }\n    }\n  }\n}\n", "// @flow\n\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n  BIND_KIND_TYPE,\n  BIND_FLAGS_TS_ENUM,\n  BIND_FLAGS_TS_CONST_ENUM,\n  BIND_FLAGS_TS_EXPORT_ONLY,\n  BIND_KIND_VALUE,\n  BIND_FLAGS_CLASS,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"../../util/scopeflags\";\nimport * as N from \"../../types\";\n\nclass TypeScriptScope extends Scope {\n  types: string[] = [];\n\n  // enums (which are also in .types)\n  enums: string[] = [];\n\n  // const enums (which are also in .enums and .types)\n  constEnums: string[] = [];\n\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  classes: string[] = [];\n\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  exportOnlyBindings: string[] = [];\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  createScope(flags: ScopeFlags): TypeScriptScope {\n    return new TypeScriptScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingTypes, pos: number) {\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.push(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        this.maybeExportDefined(scope, name);\n      }\n      scope.types.push(name);\n    }\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.push(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.push(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.push(name);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (scope.enums.indexOf(name) > -1) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.indexOf(name) > -1;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.indexOf(name) > -1) {\n      if (scope.lexical.indexOf(name) > -1) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BIND_KIND_TYPE && scope.types.indexOf(name) > -1) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(...arguments);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (\n      this.scopeStack[0].types.indexOf(id.name) === -1 &&\n      this.scopeStack[0].exportOnlyBindings.indexOf(id.name) === -1\n    ) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n", "// @flow\nexport const PARAM = 0b0000, // Initial Parameter flags\n  PARAM_YIELD = 0b0001, // track [Yield] production parameter\n  PARAM_AWAIT = 0b0010, // track [Await] production parameter\n  PARAM_RETURN = 0b0100, // track [Return] production parameter\n  PARAM_IN = 0b1000; // track [In] production parameter\n\n// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport type ParamKind = typeof PARAM | typeof PARAM_AWAIT | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n", "// @flow\n\n/*:: declare var invariant; */\n\n// Error messages are colocated with the plugin.\n/* eslint-disable @babel/development-internal/dry-error-messages */\n\nimport type { TokenType } from \"../../tokenizer/types\";\nimport type State from \"../../tokenizer/state\";\nimport { types as tt } from \"../../tokenizer/types\";\nimport { types as ct } from \"../../tokenizer/context\";\nimport * as N from \"../../types\";\nimport type { Pos, Position } from \"../../util/location\";\nimport type Parser from \"../../parser\";\nimport {\n  type BindingTypes,\n  BIND_NONE,\n  SCOPE_TS_MODULE,\n  SCOPE_OTHER,\n  BIND_TS_ENUM,\n  BIND_TS_CONST_ENUM,\n  BIND_TS_TYPE,\n  BIND_TS_INTERFACE,\n  BIND_TS_AMBIENT,\n  BIND_TS_NAMESPACE,\n  BIND_CLASS,\n  BIND_LEXICAL,\n} from \"../../util/scopeflags\";\nimport TypeScriptScopeHandler from \"./scope\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport { PARAM } from \"../../util/production-parameter\";\nimport { Errors } from \"../../parser/error\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"public\"\n  | \"private\"\n  | \"protected\";\n\nfunction nonNull<T>(x: ?T): T {\n  if (x == null) {\n    // $FlowIgnore\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\nconst TSErrors = Object.freeze({\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateModifier: \"Duplicate modifier: '%0'\",\n  EmptyHeritageClauseType: \"'%0' list cannot be empty.\",\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier\",\n  IndexSignatureHasAccessibility:\n    \"Index signatures cannot have an accessibility modifier ('%0')\",\n  IndexSignatureHasStatic: \"Index signatures cannot have the 'static' modifier\",\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MixedLabeledAndUnlabeledElements:\n    \"Tuple members must all have names or all not have names.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility:\n    \"Private elements cannot have an accessibility modifier ('%0')\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind:\n    \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0\",\n});\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(\n  value: string,\n): N.TsKeywordTypeType | typeof undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    getScopeHandler(): Class<TypeScriptScopeHandler> {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return this.match(tt.name);\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\n      this.next();\n      return (\n        !this.hasPrecedingLineBreak() &&\n        !this.match(tt.parenL) &&\n        !this.match(tt.parenR) &&\n        !this.match(tt.colon) &&\n        !this.match(tt.eq) &&\n        !this.match(tt.question) &&\n        !this.match(tt.bang)\n      );\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T: TsModifier>(allowedModifiers: T[]): ?T {\n      if (!this.match(tt.name)) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (\n        allowedModifiers.indexOf(modifier) !== -1 &&\n        this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))\n      ) {\n        return modifier;\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers(node, [\"public\"]);\n     *    this.tsParseModifiers(node, [\"abstract\", \"readonly\"]);\n     */\n    tsParseModifiers<T: TsModifier>(\n      modified: { [key: TsModifier]: ?true },\n      allowedModifiers: T[],\n    ): void {\n      for (;;) {\n        const startPos = this.state.start;\n        const modifier: ?T = this.tsParseModifier(allowedModifiers);\n\n        if (!modifier) break;\n\n        if (Object.hasOwnProperty.call(modified, modifier)) {\n          this.raise(startPos, TSErrors.DuplicateModifier, modifier);\n        }\n        modified[modifier] = true;\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.isRelational(\">\");\n      }\n\n      throw new Error(\"Unreachable\");\n    }\n\n    tsParseList<T: N.Node>(kind: ParsingContext, parseElement: () => T): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T: N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T: N.Node>(\n      kind: ParsingContext,\n      parseElement: () => ?T,\n      expectSuccess: boolean,\n    ): ?(T[]) {\n      const result = [];\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T: N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expectRelational(\"<\");\n        }\n      }\n\n      const result = this.tsParseDelimitedList(kind, parseElement);\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expectRelational(\">\");\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node: N.TsImportType = this.startNode();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);\n      }\n\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.argument = this.parseExprAtom();\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        node.qualifier = this.tsParseEntityName(/* allowReservedWords */ true);\n      }\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseEntityName(allowReservedWords: boolean): N.TsEntityName {\n      let entity: N.TsEntityName = this.parseIdentifier();\n      while (this.eat(tt.dot)) {\n        const node: N.TsQualifiedName = this.startNodeAtNode(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(allowReservedWords);\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node: N.TsTypeReference = this.startNode();\n      node.typeName = this.tsParseEntityName(/* allowReservedWords */ false);\n      if (!this.hasPrecedingLineBreak() && this.isRelational(\"<\")) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node: N.TsTypePredicate = this.startNodeAtNode(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node: N.TsThisType = this.startNode();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node: N.TsTypeQuery = this.startNode();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        node.exprName = this.tsParseEntityName(/* allowReservedWords */ true);\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseTypeParameter(): N.TsTypeParameter {\n      const node: N.TsTypeParameter = this.startNode();\n      node.name = this.parseIdentifierName(node.start);\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(): ?N.TsTypeParameterDeclaration {\n      if (this.isRelational(\"<\")) {\n        return this.tsParseTypeParameters();\n      }\n    }\n\n    tsParseTypeParameters() {\n      const node: N.TsTypeParameterDeclaration = this.startNode();\n\n      if (this.isRelational(\"<\") || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n      );\n      if (node.params.length === 0) {\n        this.raise(node.start, TSErrors.EmptyTypeParameters);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    tsTryNextParseConstantContext(): ?N.TsTypeReference {\n      if (this.lookahead().type === tt._const) {\n        this.next();\n        return this.tsParseTypeReference();\n      }\n      return null;\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: N.TsSignatureDeclaration,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n      signature.typeParameters = this.tsTryParseTypeParameters();\n      this.expect(tt.parenL);\n      signature.parameters = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(\n          returnToken,\n        );\n      } else if (this.match(returnToken)) {\n        signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(\n          returnToken,\n        );\n      }\n    }\n\n    tsParseBindingListForSignature(): $ReadOnlyArray<\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern,\n    > {\n      return this.parseBindingList(tt.parenR, charCodes.rightParenthesis).map(\n        pattern => {\n          if (\n            pattern.type !== \"Identifier\" &&\n            pattern.type !== \"RestElement\" &&\n            pattern.type !== \"ObjectPattern\" &&\n            pattern.type !== \"ArrayPattern\"\n          ) {\n            this.raise(\n              pattern.start,\n              TSErrors.UnsupportedSignatureParameterKind,\n              pattern.type,\n            );\n          }\n          return (pattern: any);\n        },\n      );\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma)) {\n        this.semicolon();\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      return this.eat(tt.name) && this.match(tt.colon);\n    }\n\n    tsTryParseIndexSignature(node: N.Node): ?N.TsIndexSignature {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return undefined;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: N.TsPropertySignature | N.TsMethodSignature,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n      const nodeAny: any = node;\n\n      if (!readonly && (this.match(tt.parenL) || this.isRelational(\"<\"))) {\n        const method: N.TsMethodSignature = nodeAny;\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property: N.TsPropertySignature = nodeAny;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id: N.Identifier = this.startNode();\n        this.next();\n        if (this.match(tt.parenL) || this.isRelational(\"<\")) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      const readonly = !!this.tsParseModifier([\"readonly\"]);\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        if (readonly) node.readonly = true;\n        return idx;\n      }\n\n      this.parsePropertyName(node, /* isPrivateNameAllowed */ false);\n      return this.tsParsePropertyOrMethodSignature(node, readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node: N.TsTypeLiteral = this.startNode();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): $ReadOnlyArray<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(\"readonly\");\n      }\n      if (this.isContextual(\"readonly\")) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedTypeParameter(): N.TsTypeParameter {\n      const node: N.TsTypeParameter = this.startNode();\n      node.name = this.parseIdentifierName(node.start);\n      node.constraint = this.tsExpectThenParseType(tt._in);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node: N.TsMappedType = this.startNode();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(\"readonly\");\n      } else if (this.eatContextual(\"readonly\")) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      node.typeParameter = this.tsParseMappedTypeParameter();\n      node.nameType = this.eatContextual(\"as\") ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node: N.TsTupleType = this.startNode();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      let labeledElements = null;\n      node.elementTypes.forEach(elementNode => {\n        let { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);\n        }\n\n        // Flow doesn't support ||=\n        seenOptionalElement =\n          seenOptionalElement ||\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n\n        // When checking labels, check the argument of the spread operator\n        if (type === \"TSRestType\") {\n          elementNode = elementNode.typeAnnotation;\n          type = elementNode.type;\n        }\n\n        const isLabeled = type === \"TSNamedTupleMember\";\n        // Flow doesn't support ??=\n        labeledElements = labeledElements ?? isLabeled;\n        if (labeledElements !== isLabeled) {\n          this.raise(\n            elementNode.start,\n            TSErrors.MixedLabeledAndUnlabeledElements,\n          );\n        }\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsType | N.TsNamedTupleMember {\n      // parses `...TsType[]`\n\n      const { start: startPos, startLoc } = this.state;\n\n      const rest = this.eat(tt.ellipsis);\n      let type = this.tsParseType();\n      const optional = this.eat(tt.question);\n      const labeled = this.eat(tt.colon);\n\n      if (labeled) {\n        const labeledNode: N.TsNamedTupleMember = this.startNodeAtNode(type);\n        labeledNode.optional = optional;\n\n        if (\n          type.type === \"TSTypeReference\" &&\n          !type.typeParameters &&\n          type.typeName.type === \"Identifier\"\n        ) {\n          labeledNode.label = (type.typeName: N.Identifier);\n        } else {\n          this.raise(type.start, TSErrors.InvalidTupleMemberLabel);\n          // This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          // $FlowIgnore\n          labeledNode.label = type;\n        }\n\n        labeledNode.elementType = this.tsParseType();\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode: N.TsOptionalType = this.startNodeAtNode(type);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode: N.TsRestType = this.startNodeAt(startPos, startLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n    ): N.TsFunctionOrConstructorType {\n      const node: N.TsFunctionOrConstructorType = this.startNode();\n      if (type === \"TSConstructorType\") {\n        this.expect(tt._new);\n      }\n      this.tsFillSignature(tt.arrow, node);\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node: N.TsLiteralType = this.startNode();\n      node.literal = (() => {\n        switch (this.state.type) {\n          case tt.num:\n          case tt.bigint:\n          case tt.string:\n          case tt._true:\n          case tt._false:\n            // For compatibility to estree we cannot call parseLiteral directly here\n            return this.parseExprAtom();\n          default:\n            throw this.unexpected();\n        }\n      })();\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsType {\n      const node: N.TsLiteralType = this.startNode();\n      node.literal = this.parseTemplate(false);\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    parseTemplateSubstitution(): N.TsType {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.name:\n        case tt._void:\n        case tt._null: {\n          const type = this.match(tt._void)\n            ? \"TSVoidKeyword\"\n            : this.match(tt._null)\n            ? \"TSNullKeyword\"\n            : keywordTypeFromName(this.state.value);\n          if (\n            type !== undefined &&\n            this.lookaheadCharCode() !== charCodes.dot\n          ) {\n            const node: N.TsKeywordType = this.startNode();\n            this.next();\n            return this.finishNode(node, type);\n          }\n          return this.tsParseTypeReference();\n        }\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node: N.TsLiteralType = this.startNode();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              throw this.unexpected();\n            }\n            node.literal = this.parseMaybeUnary();\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          return this.tsParseParenthesizedType();\n        case tt.backQuote:\n          return this.tsParseTemplateLiteralType();\n      }\n\n      throw this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node: N.TsArrayType = this.startNodeAtNode(type);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node: N.TsIndexedAccessType = this.startNodeAtNode(type);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(\n      operator: \"keyof\" | \"unique\" | \"readonly\",\n    ): N.TsTypeOperator {\n      const node: N.TsTypeOperator = this.startNode();\n      this.expectContextual(operator);\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: N.Node) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(node.start, TSErrors.UnexpectedReadonly);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode();\n      this.expectContextual(\"infer\");\n      const typeParameter = this.startNode();\n      typeParameter.name = this.parseIdentifierName(typeParameter.start);\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const operator = [\"keyof\", \"unique\", \"readonly\"].find(kw =>\n        this.isContextual(kw),\n      );\n      return operator\n        ? this.tsParseTypeOperator(operator)\n        : this.isContextual(\"infer\")\n        ? this.tsParseInferType()\n        : this.tsParseArrayTypeOrHigher();\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      this.eat(operator);\n      let type = parseConstituentType();\n      if (this.match(operator)) {\n        const types = [type];\n        while (this.eat(operator)) {\n          types.push(parseConstituentType());\n        }\n        const node: N.TsUnionType | N.TsIntersectionType = this.startNodeAtNode(\n          type,\n        );\n        node.types = types;\n        type = this.finishNode(node, kind);\n      }\n      return type;\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.isRelational(\"<\")) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (this.match(tt.name) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        let braceStackCounter = 1;\n        this.next();\n\n        while (braceStackCounter > 0) {\n          if (this.match(tt.braceL)) {\n            ++braceStackCounter;\n          } else if (this.match(tt.braceR)) {\n            --braceStackCounter;\n          }\n          this.next();\n        }\n        return true;\n      }\n\n      if (this.match(tt.bracketL)) {\n        let braceStackCounter = 1;\n        this.next();\n\n        while (braceStackCounter > 0) {\n          if (this.match(tt.bracketL)) {\n            ++braceStackCounter;\n          } else if (this.match(tt.bracketR)) {\n            --braceStackCounter;\n          }\n          this.next();\n        }\n        return true;\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t: N.TsTypeAnnotation = this.startNode();\n        this.expect(returnToken);\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            const node: N.TsTypePredicate = this.startNodeAtNode(t);\n            node.parameterName = (thisTypePredicate: N.TsThisType);\n            node.asserts = true;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            (thisTypePredicate: N.TsTypePredicate).asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          const node: N.TsTypePredicate = this.startNodeAtNode(t);\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        const node = this.startNodeAtNode(t);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): ?N.TsTypeAnnotation {\n      return this.match(tt.colon)\n        ? this.tsParseTypeOrTypePredicateAnnotation(tt.colon)\n        : undefined;\n    }\n\n    tsTryParseTypeAnnotation(): ?N.TsTypeAnnotation {\n      return this.match(tt.colon) ? this.tsParseTypeAnnotation() : undefined;\n    }\n\n    tsTryParseType(): ?N.TsType {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): ?N.Identifier {\n      const id = this.parseIdentifier();\n      if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (\n        !this.match(tt.name) ||\n        this.state.value !== \"asserts\" ||\n        this.hasPrecedingLineBreak()\n      ) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!this.match(tt.name) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          this.state.lastTokStart,\n          Errors.InvalidEscapedReservedWord,\n          \"asserts\",\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: N.TsTypeAnnotation = this.startNode(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n      if (this.hasPrecedingLineBreak() || !this.eat(tt._extends)) {\n        return type;\n      }\n      const node: N.TsConditionalType = this.startNodeAtNode(type);\n      node.checkType = type;\n      node.extendsType = this.tsParseNonConditionalType();\n      this.expect(tt.question);\n      node.trueType = this.tsParseType();\n      this.expect(tt.colon);\n      node.falseType = this.tsParseType();\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      const node: N.TsTypeAssertion = this.startNode();\n      const _const = this.tsTryNextParseConstantContext();\n      node.typeAnnotation = _const || this.tsNextThenParseType();\n      this.expectRelational(\">\");\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(\n      descriptor: string,\n    ): $ReadOnlyArray<N.TsExpressionWithTypeArguments> {\n      const originalStart = this.state.start;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        this.tsParseExpressionWithTypeArguments.bind(this),\n      );\n\n      if (!delimitedList.length) {\n        this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);\n      }\n\n      return delimitedList;\n    }\n\n    tsParseExpressionWithTypeArguments(): N.TsExpressionWithTypeArguments {\n      const node: N.TsExpressionWithTypeArguments = this.startNode();\n      // Note: TS uses parseLeftHandSideExpressionOrHigher,\n      // then has grammar errors later if it's not an EntityName.\n      node.expression = this.tsParseEntityName(/* allowReservedWords */ false);\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n\n      return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n    }\n\n    tsParseInterfaceDeclaration(\n      node: N.TsInterfaceDeclaration,\n    ): N.TsInterfaceDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkLVal(\n        node.id,\n        BIND_TS_INTERFACE,\n        undefined,\n        \"typescript interface declaration\",\n      );\n      node.typeParameters = this.tsTryParseTypeParameters();\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body: N.TSInterfaceBody = this.startNode();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkLVal(node.id, BIND_TS_TYPE, undefined, \"typescript type alias\");\n\n      node.typeParameters = this.tsTryParseTypeParameters();\n      node.typeAnnotation = this.tsInType(() => {\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(\"intrinsic\") &&\n          this.lookahead().type !== tt.dot\n        ) {\n          const node: N.TsKeywordType = this.startNode();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    tsInNoContext<T>(cb: () => T): T {\n      const oldContext = this.state.context;\n      this.state.context = [oldContext[0]];\n      try {\n        return cb();\n      } finally {\n        this.state.context = oldContext;\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | typeof undefined {\n      return !this.match(token) ? undefined : this.tsNextThenParseType();\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsDoThenParseType(() => this.expect(token));\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsDoThenParseType(() => this.next());\n    }\n\n    tsDoThenParseType(cb: () => void): N.TsType {\n      return this.tsInType(() => {\n        cb();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node: N.TsEnumMember = this.startNode();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? this.parseExprAtom()\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = this.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: N.TsEnumDeclaration,\n      isConst: boolean,\n    ): N.TsEnumDeclaration {\n      if (isConst) node.const = true;\n      node.id = this.parseIdentifier();\n      this.checkLVal(\n        node.id,\n        isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM,\n        undefined,\n        \"typescript enum declaration\",\n      );\n\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node: N.TsModuleBlock = this.startNode();\n      this.scope.enter(SCOPE_OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      this.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: N.TsModuleDeclaration,\n      nested?: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = this.parseIdentifier();\n\n      if (!nested) {\n        this.checkLVal(\n          node.id,\n          BIND_TS_NAMESPACE,\n          null,\n          \"module or namespace declaration\",\n        );\n      }\n\n      if (this.eat(tt.dot)) {\n        const inner = this.startNode();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        node.body = inner;\n      } else {\n        this.scope.enter(SCOPE_TS_MODULE);\n        this.prodParam.enter(PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(\"global\")) {\n        node.global = true;\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.id = this.parseExprAtom();\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(SCOPE_TS_MODULE);\n        this.prodParam.enter(PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: N.TsImportEqualsDeclaration,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      node.isExport = isExport || false;\n      node.id = this.parseIdentifier();\n      this.checkLVal(\n        node.id,\n        BIND_LEXICAL,\n        undefined,\n        \"import equals declaration\",\n      );\n      this.expect(tt.eq);\n      node.moduleReference = this.tsParseModuleReference();\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(\"require\") &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(/* allowReservedWords */ false);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node: N.TsExternalModuleReference = this.startNode();\n      this.expectContextual(\"require\");\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        throw this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = this.parseExprAtom();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T: ?N.NodeBase>(f: () => T): ?T {\n      const result = this.tryParse(abort => f() || abort());\n\n      if (result.aborted || !result.node) return undefined;\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => ?T): ?T {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      } else {\n        this.state = state;\n        return undefined;\n      }\n    }\n\n    tsTryParseDeclare(nany: any): ?N.Declaration {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      let starttype = this.state.type;\n      let kind;\n\n      if (this.isContextual(\"let\")) {\n        starttype = tt._var;\n        kind = \"let\";\n      }\n\n      return this.tsInDeclareContext(() => {\n        switch (starttype) {\n          case tt._function:\n            nany.declare = true;\n            return this.parseFunctionStatement(\n              nany,\n              /* async */ false,\n              /* declarationPosition */ true,\n            );\n          case tt._class:\n            // While this is also set by tsParseExpressionStatement, we need to set it\n            // before parsing the class declaration to now how to register it in the scope.\n            nany.declare = true;\n            return this.parseClass(\n              nany,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._const:\n            if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n              // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n              this.expect(tt._const);\n              this.expectContextual(\"enum\");\n              return this.tsParseEnumDeclaration(nany, /* isConst */ true);\n            }\n          // falls through\n          case tt._var:\n            kind = kind || this.state.value;\n            return this.parseVarStatement(nany, kind);\n          case tt.name: {\n            const value = this.state.value;\n            if (value === \"global\") {\n              return this.tsParseAmbientExternalModuleDeclaration(nany);\n            } else {\n              return this.tsParseDeclaration(nany, value, /* next */ true);\n            }\n          }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): ?N.Declaration {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n      );\n    }\n\n    tsParseExpressionStatement(node: any, expr: N.Identifier): ?N.Declaration {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n          break;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(SCOPE_TS_MODULE);\n            this.prodParam.enter(PARAM);\n            const mod: N.TsModuleDeclaration = node;\n            mod.global = true;\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(node, expr.name, /* next */ false);\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n    ): ?N.Declaration {\n      switch (value) {\n        case \"abstract\":\n          if (this.tsCheckLineTerminatorAndMatch(tt._class, next)) {\n            const cls: N.ClassDeclaration = node;\n            cls.abstract = true;\n            if (next) {\n              this.next();\n              if (!this.match(tt._class)) {\n                this.unexpected(null, tt._class);\n              }\n            }\n            return this.parseClass(\n              cls,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          }\n          break;\n\n        case \"enum\":\n          if (next || this.match(tt.name)) {\n            if (next) this.next();\n            return this.tsParseEnumDeclaration(node, /* isConst */ false);\n          }\n          break;\n\n        case \"interface\":\n          if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n            if (next) this.next();\n            return this.tsParseInterfaceDeclaration(node);\n          }\n          break;\n\n        case \"module\":\n          if (next) this.next();\n          if (this.match(tt.string)) {\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          } else if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"namespace\":\n          if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n            if (next) this.next();\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (this.tsCheckLineTerminatorAndMatch(tt.name, next)) {\n            if (next) this.next();\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminatorAndMatch(tokenType: TokenType, next: boolean) {\n      return (next || this.match(tokenType)) && !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startPos: number,\n      startLoc: Position,\n    ): ?N.ArrowFunctionExpression {\n      if (!this.isRelational(\"<\")) {\n        return undefined;\n      }\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      const oldYieldPos = this.state.yieldPos;\n      const oldAwaitPos = this.state.awaitPos;\n      this.state.maybeInArrowParameters = true;\n      this.state.yieldPos = -1;\n      this.state.awaitPos = -1;\n\n      const res: ?N.ArrowFunctionExpression = this.tsTryParseAndCatch(() => {\n        const node: N.ArrowFunctionExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        node.typeParameters = this.tsParseTypeParameters();\n        // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n        super.parseFunctionParams(node);\n        node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n        this.expect(tt.arrow);\n        return node;\n      });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n      this.state.yieldPos = oldYieldPos;\n      this.state.awaitPos = oldAwaitPos;\n\n      if (!res) {\n        return undefined;\n      }\n\n      return this.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode();\n      node.params = this.tsInType(() =>\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n        this.tsInNoContext(() => {\n          this.expectRelational(\"<\");\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(node.start, TSErrors.EmptyTypeArguments);\n      }\n      // This reads the next token after the `>` too, so do this in the enclosing context.\n      // But be sure not to parse a regex in the jsx expression `<C<number> />`, so set exprAllowed = false\n      this.state.exprAllowed = false;\n      this.expectRelational(\">\");\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      if (this.match(tt.name)) {\n        switch (this.state.value) {\n          case \"abstract\":\n          case \"declare\":\n          case \"enum\":\n          case \"interface\":\n          case \"module\":\n          case \"namespace\":\n          case \"type\":\n            return true;\n        }\n      }\n\n      return false;\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseAssignableListItem(\n      allowModifiers: ?boolean,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location/position to include modifiers in range\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n\n      let accessibility: ?N.Accessibility;\n      let readonly = false;\n      if (allowModifiers !== undefined) {\n        accessibility = this.parseAccessModifier();\n        readonly = !!this.tsParseModifier([\"readonly\"]);\n        if (allowModifiers === false && (accessibility || readonly)) {\n          this.raise(startPos, TSErrors.UnexpectedParameterModifier);\n        }\n      }\n\n      const left = this.parseMaybeDefault();\n      this.parseAssignableListItemTypes(left);\n      const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n      if (accessibility || readonly) {\n        const pp: N.TSParameterProperty = this.startNodeAt(startPos, startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);\n        }\n        pp.parameter = ((elt: any): N.Identifier | N.AssignmentPattern);\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    parseFunctionBodyAndFinish(\n      node: N.BodilessFunctionOrMethodBase,\n      type: string,\n      isMethod?: boolean = false,\n    ): void {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\"\n          ? \"TSDeclareMethod\"\n          : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        this.finishNode(node, bodilessType);\n        return;\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isDeclareContext) {\n        this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);\n        if (\n          // $FlowIgnore\n          node.declare\n        ) {\n          super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n          return;\n        }\n      }\n\n      super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodyless function, we need to do it here.\n        this.checkLVal(node.id, BIND_TS_AMBIENT, null, \"function name\");\n      } else {\n        super.registerFunctionStatementId(...arguments);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: $ReadOnlyArray<?N.Expression>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(\n            node.typeAnnotation.start,\n            TSErrors.UnexpectedTypeAnnotation,\n          );\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: $ReadOnlyArray<?N.Expression>,\n      isInParens?: boolean, // eslint-disable-line no-unused-vars\n    ): $ReadOnlyArray<?N.Expression> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      noCalls: ?boolean,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        this.state.exprAllowed = false;\n        this.next();\n\n        const nonNullExpression: N.TsNonNullExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      if (this.isRelational(\"<\")) {\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(\n              startPos,\n              startLoc,\n            );\n            if (asyncArrowFn) {\n              return asyncArrowFn;\n            }\n          }\n\n          const node: N.CallExpression = this.startNodeAt(startPos, startLoc);\n          node.callee = base;\n\n          const typeArguments = this.tsParseTypeArguments();\n\n          if (typeArguments) {\n            if (!noCalls && this.eat(tt.parenL)) {\n              // possibleAsync always false here, because we would have handled it above.\n              // $FlowIgnore (won't be any undefined arguments)\n              node.arguments = this.parseCallExpressionArguments(\n                tt.parenR,\n                /* possibleAsync */ false,\n              );\n\n              // Handles invalid case: `f<T>(a:b)`\n              this.tsCheckForInvalidTypeCasts(node.arguments);\n\n              node.typeParameters = typeArguments;\n              return this.finishCallExpression(node, state.optionalChainMember);\n            } else if (this.match(tt.backQuote)) {\n              const result = this.parseTaggedTemplateExpression(\n                base,\n                startPos,\n                startLoc,\n                state,\n              );\n              result.typeParameters = typeArguments;\n              return result;\n            }\n          }\n\n          this.unexpected();\n        });\n\n        if (result) return result;\n      }\n\n      return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n    }\n\n    parseNewArguments(node: N.NewExpression): void {\n      if (this.isRelational(\"<\")) {\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // 99% certain this is `new C<T>();`. But may be `new C < T;`, which is also legal.\n        const typeParameters = this.tsTryParseAndCatch(() => {\n          const args = this.tsParseTypeArguments();\n          if (!this.match(tt.parenL)) this.unexpected();\n          return args;\n        });\n        if (typeParameters) {\n          node.typeParameters = typeParameters;\n        }\n      }\n\n      super.parseNewArguments(node);\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartPos: number,\n      leftStartLoc: Position,\n      minPrec: number,\n    ) {\n      if (\n        nonNull(tt._in.binop) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        this.isContextual(\"as\")\n      ) {\n        const node: N.TsAsExpression = this.startNodeAt(\n          leftStartPos,\n          leftStartLoc,\n        );\n        node.expression = left;\n        const _const = this.tsTryNextParseConstantContext();\n        if (_const) {\n          node.typeAnnotation = _const;\n        } else {\n          node.typeAnnotation = this.tsNextThenParseType();\n        }\n        this.finishNode(node, \"TSAsExpression\");\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n\n      return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string, // eslint-disable-line no-unused-vars\n      startLoc: number, // eslint-disable-line no-unused-vars\n      checkKeywords: boolean, // eslint-disable-line no-unused-vars\n      // eslint-disable-next-line no-unused-vars\n      isBinding: boolean,\n    ): void {\n      // Don't bother checking for TypeScript code.\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    parseImport(node: N.Node): N.AnyImport {\n      if (this.match(tt.name) || this.match(tt.star) || this.match(tt.braceL)) {\n        const ahead = this.lookahead();\n\n        if (this.match(tt.name) && ahead.type === tt.eq) {\n          return this.tsParseImportEqualsDeclaration(node);\n        }\n\n        if (\n          this.isContextual(\"type\") &&\n          // import type, { a } from \"b\";\n          ahead.type !== tt.comma &&\n          // import type from \"a\";\n          !(ahead.type === tt.name && ahead.value === \"from\")\n        ) {\n          node.importKind = \"type\";\n          this.next();\n        } else {\n          node.importKind = \"value\";\n        }\n      }\n\n      const importNode = super.parseImport(node);\n      /*:: invariant(importNode.type !== \"TSImportEqualsDeclaration\") */\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        importNode.specifiers.length > 1 &&\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(\n          importNode.start,\n          \"A type-only import can specify a default import or named bindings, but not both.\",\n        );\n      }\n\n      return importNode;\n    }\n\n    parseExport(node: N.Node): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        this.expect(tt._import);\n        return this.tsParseImportEqualsDeclaration(node, /* isExport */ true);\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign: N.TsExportAssignment = node;\n        assign.expression = this.parseExpression();\n        this.semicolon();\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(\"as\")) {\n        // `export as namespace A;`\n        const decl: N.TsNamespaceExportDeclaration = node;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(\"namespace\");\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        if (this.isContextual(\"type\") && this.lookahead().type === tt.braceL) {\n          this.next();\n          node.exportKind = \"type\";\n        } else {\n          node.exportKind = \"value\";\n        }\n\n        return super.parseExport(node);\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(\"abstract\") && this.lookahead().type === tt._class\n      );\n    }\n\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode();\n        this.next(); // Skip \"abstract\"\n        this.parseClass(cls, true, true);\n        cls.abstract = true;\n        return cls;\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.state.value === \"interface\") {\n        const result = this.tsParseDeclaration(\n          this.startNode(),\n          this.state.value,\n          true,\n        );\n\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseStatementContent(context: ?string, topLevel: ?boolean): N.Statement {\n      if (this.state.type === tt._const) {\n        const ahead = this.lookahead();\n        if (ahead.type === tt.name && ahead.value === \"enum\") {\n          const node: N.TsEnumDeclaration = this.startNode();\n          this.expect(tt._const);\n          this.expectContextual(\"enum\");\n          return this.tsParseEnumDeclaration(node, /* isConst */ true);\n        }\n      }\n      return super.parseStatementContent(context, topLevel);\n    }\n\n    parseAccessModifier(): ?N.Accessibility {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      this.tsParseModifiers(member, [\"declare\"]);\n      const accessibility = this.parseAccessModifier();\n      if (accessibility) member.accessibility = accessibility;\n      this.tsParseModifiers(member, [\"declare\"]);\n\n      const callParseClassMember = () => {\n        super.parseClassMember(classBody, member, state);\n      };\n      if (member.declare) {\n        this.tsInDeclareContext(callParseClassMember);\n      } else {\n        callParseClassMember();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: N.ClassMember | N.TsIndexSignature,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      this.tsParseModifiers(member, [\"abstract\", \"readonly\", \"declare\"]);\n\n      const idx = this.tsTryParseIndexSignature(member);\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member: any).abstract) {\n          this.raise(member.start, TSErrors.IndexSignatureHasAbstract);\n        }\n        if (isStatic) {\n          this.raise(member.start, TSErrors.IndexSignatureHasStatic);\n        }\n        if ((member: any).accessibility) {\n          this.raise(\n            member.start,\n            TSErrors.IndexSignatureHasAccessibility,\n            (member: any).accessibility,\n          );\n        }\n        if ((member: any).declare) {\n          this.raise(member.start, TSErrors.IndexSignatureHasDeclare);\n        }\n\n        return;\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp: any).readonly && this.match(tt.parenL)) {\n        this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);\n      }\n\n      if ((methodOrProp: any).declare && this.match(tt.parenL)) {\n        this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? this.tsParseExpressionStatement(node, expr)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n      startPos: number,\n      startLoc: Position,\n      refNeedsArrowPos?: ?Pos,\n    ): N.Expression {\n      // only do the expensive clone if there is a question mark\n      // and if we come from inside parens\n      if (!refNeedsArrowPos || !this.match(tt.question)) {\n        return super.parseConditional(\n          expr,\n          startPos,\n          startLoc,\n          refNeedsArrowPos,\n        );\n      }\n\n      const result = this.tryParse(() =>\n        super.parseConditional(expr, startPos, startLoc),\n      );\n\n      if (!result.node) {\n        // $FlowIgnore\n        refNeedsArrowPos.start = result.error.pos || this.state.start;\n        return expr;\n      }\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem(\n      node: N.Expression,\n      startPos: number,\n      startLoc: Position,\n    ): N.Expression {\n      node = super.parseParenItem(node, startPos, startLoc);\n      if (this.eat(tt.question)) {\n        node.optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode: N.TsTypeCastExpression = this.startNodeAt(\n          startPos,\n          startLoc,\n        );\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n      // Store original location/position\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n\n      // \"export declare\" is equivalent to just \"export\".\n      const isDeclare = this.eatContextual(\"declare\");\n\n      let declaration: ?N.Declaration;\n\n      if (this.match(tt.name)) {\n        declaration = this.tsTryParseExportDeclaration();\n      }\n      if (!declaration) {\n        declaration = super.parseExportDeclaration(node);\n      }\n      if (\n        declaration &&\n        (declaration.type === \"TSInterfaceDeclaration\" ||\n          declaration.type === \"TSTypeAliasDeclaration\" ||\n          isDeclare)\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (declaration && isDeclare) {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startPos, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId: ?boolean,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(\"implements\")) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node: any).declare ? BIND_TS_AMBIENT : BIND_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      if (!node.optional && this.eat(tt.bang)) {\n        node.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (this.state.isDeclareContext && this.match(tt.eq)) {\n        this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      // $FlowIgnore\n      if (node.abstract) {\n        this.raise(node.start, TSErrors.PrivateElementHasAbstract);\n      }\n\n      // $FlowIgnore\n      if (node.accessibility) {\n        this.raise(\n          node.start,\n          TSErrors.PrivateElementHasAccessibility,\n          node.accessibility,\n        );\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters && isConstructor) {\n        this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.isRelational(\"<\")) {\n        node.superTypeParameters = this.tsParseTypeArguments();\n      }\n      if (this.eatContextual(\"implements\")) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue(prop: N.ObjectMember, ...args): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      super.parseObjPropValue(prop, ...args);\n    }\n\n    parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (decl.id.type === \"Identifier\" && this.eat(tt.bang)) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(...args): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: ?State;\n      let jsx;\n      let typeCast;\n\n      if (this.match(tt.jsxTagStart)) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n        /*:: invariant(!jsx.aborted) */\n\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        if (context[context.length - 1] === ct.j_oTag) {\n          context.length -= 2;\n        } else if (context[context.length - 1] === ct.j_expr) {\n          context.length -= 1;\n        }\n      }\n\n      if (!jsx?.error && !this.isRelational(\"<\")) {\n        return super.parseMaybeAssign(...args);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      let typeParameters: N.TsTypeParameterDeclaration;\n      state = state || this.state.clone();\n\n      const arrow = this.tryParse(abort => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters();\n        const expr = super.parseMaybeAssign(...args);\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          (expr.extra && expr.extra.parenthesized)\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n        return expr;\n      }, state);\n\n      if (!arrow.error && !arrow.aborted) return arrow.node;\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n        /*:: invariant(!typeCast.aborted) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      if (jsx?.thrown) throw jsx.error;\n      if (arrow.thrown) throw arrow.error;\n      if (typeCast?.thrown) throw typeCast.error;\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(refExpressionErrors?: ?ExpressionErrors): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.isRelational(\"<\")) {\n        return this.tsParseTypeAssertion();\n      } else {\n        return super.parseMaybeUnary(refExpressionErrors);\n      }\n    }\n\n    parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseAssignableListItemTypes(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\" && !this.state.isDeclareContext) {\n          this.raise(param.start, TSErrors.PatternIsOptional);\n        }\n\n        ((param: any): N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    toAssignable(node: N.Node): N.Node {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return super.toAssignable(this.typeCastToParameter(node));\n        case \"TSParameterProperty\":\n          return super.toAssignable(node);\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          node.expression = this.toAssignable(node.expression);\n          return node;\n        default:\n          return super.toAssignable(node);\n      }\n    }\n\n    checkLVal(\n      expr: N.Expression,\n      bindingType: BindingTypes = BIND_NONE,\n      checkClashes: ?{ [key: string]: boolean },\n      contextDescription: string,\n    ): void {\n      switch (expr.type) {\n        case \"TSTypeCastExpression\":\n          // Allow \"typecasts\" to appear on the left of assignment expressions,\n          // because it may be in an arrow function.\n          // e.g. `const f = (foo: number = 0) => foo;`\n          return;\n        case \"TSParameterProperty\":\n          this.checkLVal(\n            expr.parameter,\n            bindingType,\n            checkClashes,\n            \"parameter property\",\n          );\n          return;\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          this.checkLVal(\n            expr.expression,\n            bindingType,\n            checkClashes,\n            contextDescription,\n          );\n          return;\n        default:\n          super.checkLVal(expr, bindingType, checkClashes, contextDescription);\n          return;\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n      if (this.isRelational(\"<\")) {\n        const typeArguments = this.tsParseTypeArguments();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(expr);\n          call.typeParameters = typeArguments;\n          return call;\n        }\n\n        this.unexpected(this.state.start, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr);\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.isRelational(\"<\") || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault(...args): N.Pattern {\n      const node = super.parseMaybeDefault(...args);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(\n          node.typeAnnotation.start,\n          TSErrors.TypeAnnotationAfterAssign,\n        );\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        return this.finishOp(tt.relational, 1);\n      } else {\n        return super.getTokenFromCode(code);\n      }\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      if (this.match(tt.relational)) {\n        const code = this.input.charCodeAt(this.state.start);\n        if (code === charCodes.lessThan || code === charCodes.greaterThan) {\n          this.state.pos -= 1;\n          this.readToken_lt_gt(code);\n        }\n      }\n    }\n\n    toAssignableList(exprList: N.Expression[]): $ReadOnlyArray<N.Pattern> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (!expr) continue;\n        switch (expr.type) {\n          case \"TSTypeCastExpression\":\n            exprList[i] = this.typeCastToParameter(expr);\n            break;\n          case \"TSAsExpression\":\n          case \"TSTypeAssertion\":\n            if (!this.state.maybeInArrowParameters) {\n              exprList[i] = this.typeCastToParameter(expr);\n            } else {\n              this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);\n            }\n            break;\n        }\n      }\n      return super.toAssignableList(...arguments);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Node {\n      node.expression.typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(\n        node.expression,\n        node.typeAnnotation.end,\n        node.typeAnnotation.loc.end,\n      );\n\n      return node.expression;\n    }\n\n    shouldParseArrow() {\n      return this.match(tt.colon) || super.shouldParseArrow();\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      if (this.isRelational(\"<\")) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArguments(),\n        );\n        if (typeArguments) node.typeParameters = typeArguments;\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const firstParam = method.params[0];\n      const hasContextParam =\n        firstParam &&\n        firstParam.type === \"Identifier\" &&\n        firstParam.name === \"this\";\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInDeclareContext<T>(cb: () => T): T {\n      const oldIsDeclareContext = this.state.isDeclareContext;\n      this.state.isDeclareContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.isDeclareContext = oldIsDeclareContext;\n      }\n    }\n  };\n", "// @flow\n\nimport * as charCodes from \"charcodes\";\n\nimport { types as tt, TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport * as N from \"../types\";\n\ntt.placeholder = new TokenType(\"%%\", { startsExpr: true });\n\nexport type PlaceholderTypes =\n  | \"Identifier\"\n  | \"StringLiteral\"\n  | \"Expression\"\n  | \"Statement\"\n  | \"Declaration\"\n  | \"BlockStatement\"\n  | \"ClassBody\"\n  | \"Pattern\";\n\n// $PropertyType doesn't support enums. Use a fake \"switch\" (GetPlaceholderNode)\n//type MaybePlaceholder<T: PlaceholderTypes> = $PropertyType<N, T> | N.Placeholder<T>;\n\ntype _Switch<Value, Cases, Index> = $Call<\n  (\n    $ElementType<$ElementType<Cases, Index>, 0>,\n  ) => $ElementType<$ElementType<Cases, Index>, 1>,\n  Value,\n>;\ntype $Switch<Value, Cases> = _Switch<Value, Cases, *>;\n\ntype NodeOf<T: PlaceholderTypes> = $Switch<\n  T,\n  [\n    [\"Identifier\", N.Identifier],\n    [\"StringLiteral\", N.StringLiteral],\n    [\"Expression\", N.Expression],\n    [\"Statement\", N.Statement],\n    [\"Declaration\", N.Declaration],\n    [\"BlockStatement\", N.BlockStatement],\n    [\"ClassBody\", N.ClassBody],\n    [\"Pattern\", N.Pattern],\n  ],\n>;\n\n// Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T: PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    parsePlaceholder<T: PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ ?MaybePlaceholder<T> {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode();\n        this.next();\n        this.assertNoSpace(\"Unexpected space in placeholder.\");\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace(\"Unexpected space in placeholder.\");\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T: PlaceholderTypes>(\n      node: N.Node,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n      node.expectedNode = expectedNode;\n\n      return isFinished ? node : this.finishNode(node, \"Placeholder\");\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.js                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        return this.finishOp(tt.placeholder, 2);\n      }\n\n      return super.getTokenFromCode(...arguments);\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments)\n      );\n    }\n\n    parseIdentifier(): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") ||\n        super.parseIdentifier(...arguments)\n      );\n    }\n\n    checkReservedWord(word: string): void {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) super.checkReservedWord(...arguments);\n    }\n\n    /* ============================================================ *\n     * parser/lval.js                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return (\n        this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments)\n      );\n    }\n\n    checkLVal(expr: N.Expression): void {\n      if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n    }\n\n    toAssignable(node: N.Node): N.Node {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n        return node;\n      }\n      return super.toAssignable(...arguments);\n    }\n\n    /* ============================================================ *\n     * parser/statement.js                                          *\n     * ============================================================ */\n\n    verifyBreakContinue(node: N.BreakStatement | N.ContinueStatement) {\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(...arguments);\n    }\n\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: N.Expression,\n    ): MaybePlaceholder<\"Statement\"> {\n      if (\n        expr.type !== \"Placeholder\" ||\n        (expr.extra && expr.extra.parenthesized)\n      ) {\n        return super.parseExpressionStatement(...arguments);\n      }\n\n      if (this.match(tt.colon)) {\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = this.parseStatement(\"label\");\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n\n      node.name = expr.name;\n      return this.finishPlaceholder(node, \"Statement\");\n    }\n\n    parseBlock(): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(...arguments)\n      );\n    }\n\n    parseFunctionId(): ?MaybePlaceholder<\"Identifier\"> {\n      return (\n        this.parsePlaceholder(\"Identifier\") ||\n        super.parseFunctionId(...arguments)\n      );\n    }\n\n    parseClass<T: N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      this.takeDecorators(node);\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          this.unexpected(null, \"A class name is required\");\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      this.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        this.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(node: N.Node): N.Node {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(...arguments);\n\n      if (!this.isContextual(\"from\") && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node.specifiers = [];\n        node.source = null;\n        node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = placeholder;\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tt.placeholder.label,\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n      if (node.specifiers && node.specifiers.length > 0) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(...arguments);\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: N.Node,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(...arguments);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(\"from\") && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier = this.startNodeAtNode(placeholder);\n      specifier.local = placeholder;\n      this.finishNode(specifier, \"ImportDefaultSpecifier\");\n      node.specifiers.push(specifier);\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(\"from\");\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") ||\n        super.parseImportSource(...arguments)\n      );\n    }\n  };\n", "import type Parser from \"../parser\";\nimport { types as tt } from \"../tokenizer/types\";\nimport * as N from \"../types\";\n\nexport default (superClass: Class<Parser>): Class<Parser> =>\n  class extends superClass {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStart = this.state.start;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode();\n        this.eat(tt.modulo);\n        if (this.match(tt.name)) {\n          const name = this.parseIdentifierName(this.state.start);\n          const identifier = this.createIdentifier(node, name);\n          identifier.type = \"V8IntrinsicIdentifier\";\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStart);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(): N.Expression {\n      return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n    }\n  };\n", "// @flow\n\nimport type Parser from \"./parser\";\n\nexport type Plugin = string | [string, Object];\n\nexport type PluginList = $ReadOnlyArray<Plugin>;\n\nexport type MixinPlugin = (superClass: Class<Parser>) => Class<Parser>;\n\nexport function hasPlugin(plugins: PluginList, name: string): boolean {\n  return plugins.some(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n}\n\nexport function getPluginOption(\n  plugins: PluginList,\n  name: string,\n  option: string,\n) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n\n  if (plugin && Array.isArray(plugin)) {\n    return plugin[1][option];\n  }\n\n  return null;\n}\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"smart\", \"fsharp\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n\nexport function validatePlugins(plugins: PluginList) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport = getPluginOption(\n      plugins,\n      \"decorators\",\n      \"decoratorsBeforeExport\",\n    );\n    if (decoratorsBeforeExport == null) {\n      throw new Error(\n        \"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" +\n          \" whose value must be a boolean. If you are migrating from\" +\n          \" Babylon/Babel 6 or want to use the old decorators proposal, you\" +\n          \" should use the 'decorators-legacy' plugin instead of 'decorators'.\",\n      );\n    } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (\n    hasPlugin(plugins, \"pipelineOperator\") &&\n    !PIPELINE_PROPOSALS.includes(\n      getPluginOption(plugins, \"pipelineOperator\", \"proposal\"),\n    )\n  ) {\n    throw new Error(\n      \"'pipelineOperator' requires 'proposal' option whose value should be one of: \" +\n        PIPELINE_PROPOSALS.map(p => `'${p}'`).join(\", \"),\n    );\n  }\n\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    if (hasPlugin(plugins, \"importAssertions\")) {\n      throw new Error(\n        \"Cannot combine importAssertions and moduleAttributes plugins.\",\n      );\n    }\n    const moduleAttributesVerionPluginOption = getPluginOption(\n      plugins,\n      \"moduleAttributes\",\n      \"version\",\n    );\n    if (moduleAttributesVerionPluginOption !== \"may-2020\") {\n      throw new Error(\n        \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n          \" representing the last proposal update. Currently, the\" +\n          \" only supported value is 'may-2020'.\",\n      );\n    }\n  }\n\n  if (\n    hasPlugin(plugins, \"recordAndTuple\") &&\n    !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(\n      getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"),\n    )\n  ) {\n    throw new Error(\n      \"'recordAndTuple' requires 'syntaxType' option whose value should be one of: \" +\n        RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n    );\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree\";\nimport flow from \"./plugins/flow\";\nimport jsx from \"./plugins/jsx\";\nimport typescript from \"./plugins/typescript\";\nimport placeholders from \"./plugins/placeholders\";\nimport v8intrinsic from \"./plugins/v8intrinsic\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins: { [name: string]: MixinPlugin } = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames: $ReadOnlyArray<string> = Object.keys(\n  mixinPlugins,\n);\n", "// @flow\n\nimport type { PluginList } from \"./plugin-utils\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport type Options = {\n  sourceType: SourceType,\n  sourceFilename?: string,\n  startLine: number,\n  allowAwaitOutsideFunction: boolean,\n  allowReturnOutsideFunction: boolean,\n  allowImportExportEverywhere: boolean,\n  allowSuperOutsideMethod: boolean,\n  allowUndeclaredExports: boolean,\n  plugins: PluginList,\n  strictMode: ?boolean,\n  ranges: boolean,\n  tokens: boolean,\n  createParenthesizedExpressions: boolean,\n  errorRecovery: boolean,\n};\n\nexport const defaultOptions: Options = {\n  // Source type (\"script\" or \"module\") for different semantics\n  sourceType: \"script\",\n  // Source filename.\n  sourceFilename: undefined,\n  // Line from which to start counting source. Useful for\n  // integration with other tools.\n  startLine: 1,\n  // When enabled, await at the top level is not considered an\n  // error.\n  allowAwaitOutsideFunction: false,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // TODO\n  allowSuperOutsideMethod: false,\n  // When enabled, export statements can reference undeclared variables.\n  allowUndeclaredExports: false,\n  // An array of plugins to enable\n  plugins: [],\n  // TODO\n  strictMode: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // Adds all parsed tokens to a `tokens` property on the `File` node\n  tokens: false,\n  // Whether to create ParenthesizedExpression AST nodes (if false\n  // the parser sets extra.parenthesized on the expression nodes instead).\n  createParenthesizedExpressions: false,\n  // When enabled, errors are attached to the AST instead of being directly thrown.\n  // Some errors will still throw, because @babel/parser can't always recover.\n  errorRecovery: false,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts: ?Options): Options {\n  const options: any = {};\n  for (const key of Object.keys(defaultOptions)) {\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n  return options;\n}\n", "// @flow\n\nimport type { Options } from \"../options\";\nimport * as N from \"../types\";\nimport { Position } from \"../util/location\";\n\nimport { types as ct, type TokContext } from \"./context\";\nimport { types as tt, type TokenType } from \"./types\";\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number,\n\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0,\n};\n\nexport default class State {\n  strict: boolean;\n  curLine: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init(options: Options): void {\n    this.strict =\n      options.strictMode === false ? false : options.sourceType === \"module\";\n\n    this.curLine = options.startLine;\n    this.startLoc = this.endLoc = this.curPosition();\n  }\n\n  errors: SyntaxError[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  inParameters: boolean = false;\n  maybeInArrowParameters: boolean = false;\n  // This flag is used to track async arrow head across function declarations.\n  // e.g. async (foo = function (await) {}) => {}\n  // When parsing `await` in this expression, `maybeInAsyncArrowHead` is true\n  // but `maybeInArrowParameters` is false\n  maybeInAsyncArrowHead: boolean = false;\n  inPipeline: boolean = false;\n  inType: boolean = false;\n  noAnonFunctionType: boolean = false;\n  inPropertyName: boolean = false;\n  hasFlowComment: boolean = false;\n  isIterator: boolean = false;\n  isDeclareContext: boolean = false;\n\n  // For the smartPipelines plugin:\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F# plugin\n  soloAwait: boolean = false;\n  inFSharpPipelineDirectBody: boolean = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: ?(\"loop\" | \"switch\"),\n    name?: ?string,\n    statementStart?: number,\n  }> = [];\n\n  // Leading decorators. Last element of the stack represents the decorators in current context.\n  // Supports nesting of decorators, e.g. @foo(@bar class inner {}) class outer {}\n  // where @foo belongs to the outer class and @bar to the inner\n  decoratorStack: Array<Array<N.Decorator>> = [[]];\n\n  // Positions to delayed-check that yield/await does not exist in default parameters.\n  yieldPos: number = -1;\n  awaitPos: number = -1;\n\n  // Comment store.\n  comments: Array<N.Comment> = [];\n\n  // Comment attachment store\n  trailingComments: Array<N.Comment> = [];\n  leadingComments: Array<N.Comment> = [];\n  commentStack: Array<{\n    start: number,\n    leadingComments: ?Array<N.Comment>,\n    trailingComments: ?Array<N.Comment>,\n    type: string,\n  }> = [];\n  // $FlowIgnore this is initialized when the parser starts.\n  commentPreviousNode: N.Node = null;\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n  lineStart: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // $FlowIgnore this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // $FlowIgnore this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n  lastTokStart: number = 0;\n  lastTokEnd: number = 0;\n\n  // The context stack is used to superficially track syntactic\n  // context to predict whether a regular expression is allowed in a\n  // given position.\n  context: Array<TokContext> = [ct.braceStatement];\n  exprAllowed: boolean = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  containsEsc: boolean = false;\n\n  // This property is used to throw an error for\n  // an octal literal in a directive that occurs prior\n  // to a \"use strict\" directive.\n  octalPositions: number[] = [];\n\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  exportedIdentifiers: Array<string> = [];\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  curPosition(): Position {\n    return new Position(this.curLine, this.pos - this.lineStart);\n  }\n\n  clone(skipArrays?: boolean): State {\n    const state = new State();\n    const keys = Object.keys(this);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // $FlowIgnore\n      let val = this[key];\n\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n\n      // $FlowIgnore\n      state[key] = val;\n    }\n\n    return state;\n  }\n}\n", "// @flow\n\n/*:: declare var invariant; */\n\nimport type { Options } from \"../options\";\nimport * as N from \"../types\";\nimport type { Position } from \"../util/location\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier\";\nimport { types as tt, keywords as keywordTypes, type TokenType } from \"./types\";\nimport { type TokContext, types as ct } from \"./context\";\nimport ParserErrors, { Errors } from \"../parser/error\";\nimport { SourceLocation } from \"../util/location\";\nimport {\n  lineBreak,\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n} from \"../util/whitespace\";\nimport State from \"./state\";\n\nconst VALID_REGEX_FLAGS = new Set([\"g\", \"m\", \"s\", \"i\", \"y\", \"u\"]);\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\n\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: [\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ],\n  hex: [\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ],\n};\n\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [\n  // 0 - 1\n  charCodes.digit0,\n  charCodes.digit1,\n];\nallowedNumericSeparatorSiblings.oct = [\n  // 0 - 7\n  ...allowedNumericSeparatorSiblings.bin,\n\n  charCodes.digit2,\n  charCodes.digit3,\n  charCodes.digit4,\n  charCodes.digit5,\n  charCodes.digit6,\n  charCodes.digit7,\n];\nallowedNumericSeparatorSiblings.dec = [\n  // 0 - 9\n  ...allowedNumericSeparatorSiblings.oct,\n\n  charCodes.digit8,\n  charCodes.digit9,\n];\n\nallowedNumericSeparatorSiblings.hex = [\n  // 0 - 9, A - F, a - f,\n  ...allowedNumericSeparatorSiblings.dec,\n\n  charCodes.uppercaseA,\n  charCodes.uppercaseB,\n  charCodes.uppercaseC,\n  charCodes.uppercaseD,\n  charCodes.uppercaseE,\n  charCodes.uppercaseF,\n\n  charCodes.lowercaseA,\n  charCodes.lowercaseB,\n  charCodes.lowercaseC,\n  charCodes.lowercaseD,\n  charCodes.lowercaseE,\n  charCodes.lowercaseF,\n];\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  type: TokenType;\n  value: any;\n  start: number;\n  end: number;\n  loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default class Tokenizer extends ParserErrors {\n  // Forward-declarations\n  // parser/util.js\n  /*::\n  +hasPrecedingLineBreak: () => boolean;\n  +unexpected: (pos?: ?number, messageOrType?: string | TokenType) => empty;\n  +expectPlugin: (name: string, pos?: ?number) => true;\n  */\n\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    if (!this.isLookahead) {\n      this.checkKeywordEscapes();\n      if (this.options.tokens) {\n        this.pushToken(new Token(this.state));\n      }\n    }\n\n    this.state.lastTokEnd = this.state.end;\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  // TODO\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  // TODO\n\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  // TODO\n\n  lookahead(): State {\n    const old = this.state;\n    this.state = old.clone(true);\n\n    this.isLookahead = true;\n    this.next();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    const skip = skipWhiteSpace.exec(this.input);\n    // $FlowIgnore: The skipWhiteSpace ensures to match any string\n    return pos + skip[0].length;\n  }\n\n  lookaheadCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (!this.match(tt.num) && !this.match(tt.string)) return;\n    this.state.pos = this.state.start;\n    while (this.state.pos < this.state.lineStart) {\n      this.state.lineStart =\n        this.input.lastIndexOf(\"\\n\", this.state.lineStart - 2) + 1;\n      --this.state.curLine;\n    }\n    this.nextToken();\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related\n  // properties.\n\n  nextToken(): void {\n    const curContext = this.curContext();\n    if (!curContext?.preserveSpace) this.skipSpace();\n\n    this.state.octalPositions = [];\n    this.state.start = this.state.pos;\n    this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    const override = curContext?.override;\n    if (override) {\n      override(this);\n    } else {\n      this.getTokenFromCode(this.input.codePointAt(this.state.pos));\n    }\n  }\n\n  pushComment(\n    block: boolean,\n    text: string,\n    start: number,\n    end: number,\n    startLoc: Position,\n    endLoc: Position,\n  ): void {\n    const comment = {\n      type: block ? \"CommentBlock\" : \"CommentLine\",\n      value: text,\n      start: start,\n      end: end,\n      loc: new SourceLocation(startLoc, endLoc),\n    };\n\n    if (this.options.tokens) this.pushToken(comment);\n    this.state.comments.push(comment);\n    this.addComment(comment);\n  }\n\n  skipBlockComment(): void {\n    const startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(\"*/\", this.state.pos + 2);\n    if (end === -1) throw this.raise(start, Errors.UnterminatedComment);\n\n    this.state.pos = end + 2;\n    lineBreakG.lastIndex = start;\n    let match;\n    while (\n      (match = lineBreakG.exec(this.input)) &&\n      match.index < this.state.pos\n    ) {\n      ++this.state.curLine;\n      this.state.lineStart = match.index + match[0].length;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    this.pushComment(\n      true,\n      this.input.slice(start + 2, end),\n      start,\n      this.state.pos,\n      startLoc,\n      this.state.curPosition(),\n    );\n  }\n\n  skipLineComment(startSkip: number): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    this.pushComment(\n      false,\n      this.input.slice(start + startSkip, this.state.pos),\n      start,\n      this.state.pos,\n      startLoc,\n      this.state.curPosition(),\n    );\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk:\n              this.skipBlockComment();\n              break;\n\n            case charCodes.slash:\n              this.skipLineComment(2);\n              break;\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else {\n            break loop;\n          }\n      }\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `exprAllowed`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) this.updateContext(prevType);\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.input.charCodeAt(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(this.state.pos, Errors.UnexpectedDigitAfterHash);\n    }\n\n    if (\n      next === charCodes.leftCurlyBrace ||\n      (next === charCodes.leftSquareBracket && this.hasPlugin(\"recordAndTuple\"))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"hash\") {\n        throw this.raise(\n          this.state.pos,\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n        );\n      }\n\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n      this.state.pos += 2;\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    // '/'\n    if (this.state.exprAllowed && !this.state.inType) {\n      ++this.state.pos;\n      this.readRegexp();\n      return;\n    }\n\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n    const exprAllowed = this.state.exprAllowed;\n\n    // Exponentiation operator **\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    if (next === charCodes.equalsTo && !exprAllowed) {\n      width++;\n      type = tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            this.state.pos,\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n          );\n        }\n\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      // '|]'\n      if (\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            this.state.pos,\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n          );\n        }\n\n        this.finishOp(tt.bracketBarR, 2);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    // '^'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (\n        next === charCodes.dash &&\n        !this.inModule &&\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.greaterThan &&\n        (this.state.lastTokEnd === 0 || this.hasPrecedingLineBreak())\n      ) {\n        // A `-->` line comment\n        this.skipLineComment(3);\n        this.skipSpace();\n        this.nextToken();\n        return;\n      }\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt_gt(code: number): void {\n    // '<>'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    let size = 1;\n\n    if (next === code) {\n      size =\n        code === charCodes.greaterThan &&\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.greaterThan\n          ? 3\n          : 2;\n      if (this.input.charCodeAt(this.state.pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShift, size);\n      return;\n    }\n\n    if (\n      next === charCodes.exclamationMark &&\n      code === charCodes.lessThan &&\n      !this.inModule &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dash &&\n      this.input.charCodeAt(this.state.pos + 3) === charCodes.dash\n    ) {\n      // `<!--`, an XML-style comment that should be interpreted as a line comment\n      this.skipLineComment(4);\n      this.skipSpace();\n      this.nextToken();\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      size = 2;\n    }\n\n    this.finishOp(tt.relational, size);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              this.state.pos,\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n            );\n          }\n\n          // [|\n          this.finishToken(tt.bracketBarL);\n          this.state.pos += 2;\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              this.state.pos,\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n            );\n          }\n\n          // {|\n          this.finishToken(tt.braceBarL);\n          this.state.pos += 2;\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        ++this.state.pos;\n        this.finishToken(tt.backQuote);\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n      case charCodes.greaterThan:\n        this.readToken_lt_gt(code);\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        ++this.state.pos;\n        this.finishToken(tt.at);\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord();\n          return;\n        }\n    }\n\n    throw this.raise(\n      this.state.pos,\n      Errors.InvalidOrUnexpectedToken,\n      String.fromCodePoint(code),\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const start = this.state.pos;\n    let escaped, inClass;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(start, Errors.UnterminatedRegExp);\n      }\n      const ch = this.input.charAt(this.state.pos);\n      if (lineBreak.test(ch)) {\n        throw this.raise(start, Errors.UnterminatedRegExp);\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === \"[\") {\n          inClass = true;\n        } else if (ch === \"]\" && inClass) {\n          inClass = false;\n        } else if (ch === \"/\" && !inClass) {\n          break;\n        }\n        escaped = ch === \"\\\\\";\n      }\n      ++this.state.pos;\n    }\n    const content = this.input.slice(start, this.state.pos);\n    ++this.state.pos;\n\n    let mods = \"\";\n\n    while (this.state.pos < this.length) {\n      const char = this.input[this.state.pos];\n      const charCode = this.input.codePointAt(this.state.pos);\n\n      if (VALID_REGEX_FLAGS.has(char)) {\n        if (mods.indexOf(char) > -1) {\n          this.raise(this.state.pos + 1, Errors.DuplicateRegExpFlags);\n        }\n      } else if (\n        isIdentifierChar(charCode) ||\n        charCode === charCodes.backslash\n      ) {\n        this.raise(this.state.pos + 1, Errors.MalformedRegExpFlags);\n      } else {\n        break;\n      }\n\n      ++this.state.pos;\n      mods += char;\n    }\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen?: boolean,\n    allowNumSeparator: boolean = true,\n  ): number | null {\n    const start = this.state.pos;\n    const forbiddenSiblings =\n      radix === 16\n        ? forbiddenNumericSeparatorSiblings.hex\n        : forbiddenNumericSeparatorSiblings.decBinOct;\n    const allowedSiblings =\n      radix === 16\n        ? allowedNumericSeparatorSiblings.hex\n        : radix === 10\n        ? allowedNumericSeparatorSiblings.dec\n        : radix === 8\n        ? allowedNumericSeparatorSiblings.oct\n        : allowedNumericSeparatorSiblings.bin;\n\n    let invalid = false;\n    let total = 0;\n\n    for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n      const code = this.input.charCodeAt(this.state.pos);\n      let val;\n\n      if (code === charCodes.underscore) {\n        const prev = this.input.charCodeAt(this.state.pos - 1);\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        if (allowedSiblings.indexOf(next) === -1) {\n          this.raise(this.state.pos, Errors.UnexpectedNumericSeparator);\n        } else if (\n          forbiddenSiblings.indexOf(prev) > -1 ||\n          forbiddenSiblings.indexOf(next) > -1 ||\n          Number.isNaN(next)\n        ) {\n          this.raise(this.state.pos, Errors.UnexpectedNumericSeparator);\n        }\n\n        if (!allowNumSeparator) {\n          this.raise(this.state.pos, Errors.NumericSeparatorInEscapeSequence);\n        }\n\n        // Ignore this _ character\n        ++this.state.pos;\n        continue;\n      }\n\n      if (code >= charCodes.lowercaseA) {\n        val = code - charCodes.lowercaseA + charCodes.lineFeed;\n      } else if (code >= charCodes.uppercaseA) {\n        val = code - charCodes.uppercaseA + charCodes.lineFeed;\n      } else if (charCodes.isDigit(code)) {\n        val = code - charCodes.digit0; // 0-9\n      } else {\n        val = Infinity;\n      }\n      if (val >= radix) {\n        // If we are in \"errorRecovery\" mode and we found a digit which is too big,\n        // don't break the loop.\n\n        if (this.options.errorRecovery && val <= 9) {\n          val = 0;\n          this.raise(this.state.start + i + 2, Errors.InvalidDigit, radix);\n        } else if (forceLen) {\n          val = 0;\n          invalid = true;\n        } else {\n          break;\n        }\n      }\n      ++this.state.pos;\n      total = total * radix + val;\n    }\n    if (\n      this.state.pos === start ||\n      (len != null && this.state.pos - start !== len) ||\n      invalid\n    ) {\n      return null;\n    }\n\n    return total;\n  }\n\n  readRadixNumber(radix: number): void {\n    const start = this.state.pos;\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(this.state.start + 2, Errors.InvalidDigit, radix);\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(start, Errors.InvalidDecimal);\n    }\n\n    if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {\n      throw this.raise(this.state.pos, Errors.NumberIdentifier);\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(start, Errors.InvalidNumber);\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      if (this.state.strict) {\n        this.raise(start, Errors.StrictOctalLiteral);\n      } else {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          this.raise(underscorePos + start, Errors.ZeroDigitNumericSeparator);\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(start, Errors.InvalidOrMissingExponent);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(start, Errors.InvalidBigIntLiteral);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.pos);\n      if (hasExponent || hasLeadingZero) {\n        this.raise(start, Errors.InvalidDecimal);\n      }\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {\n      throw this.raise(this.state.pos, Errors.NumberIdentifier);\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let code;\n\n    if (ch === charCodes.leftCurlyBrace) {\n      const codePos = ++this.state.pos;\n      code = this.readHexChar(\n        this.input.indexOf(\"}\", this.state.pos) - this.state.pos,\n        true,\n        throwOnInvalid,\n      );\n      ++this.state.pos;\n      if (code !== null && code > 0x10ffff) {\n        if (throwOnInvalid) {\n          this.raise(codePos, Errors.InvalidCodePoint);\n        } else {\n          return null;\n        }\n      }\n    } else {\n      code = this.readHexChar(4, false, throwOnInvalid);\n    }\n    return code;\n  }\n\n  readString(quote: number): void {\n    let out = \"\",\n      chunkStart = ++this.state.pos;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, Errors.UnterminatedString);\n      }\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n      if (ch === charCodes.backslash) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        // $FlowFixMe\n        out += this.readEscapedChar(false);\n        chunkStart = this.state.pos;\n      } else if (\n        ch === charCodes.lineSeparator ||\n        ch === charCodes.paragraphSeparator\n      ) {\n        ++this.state.pos;\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        throw this.raise(this.state.start, Errors.UnterminatedString);\n      } else {\n        ++this.state.pos;\n      }\n    }\n    out += this.input.slice(chunkStart, this.state.pos++);\n    this.finishToken(tt.string, out);\n  }\n\n  // Reads template string tokens.\n\n  readTmplToken(): void {\n    let out = \"\",\n      chunkStart = this.state.pos,\n      containsInvalid = false;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, Errors.UnterminatedTemplate);\n      }\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (\n        ch === charCodes.graveAccent ||\n        (ch === charCodes.dollarSign &&\n          this.input.charCodeAt(this.state.pos + 1) ===\n            charCodes.leftCurlyBrace)\n      ) {\n        if (this.state.pos === this.state.start && this.match(tt.template)) {\n          if (ch === charCodes.dollarSign) {\n            this.state.pos += 2;\n            this.finishToken(tt.dollarBraceL);\n            return;\n          } else {\n            ++this.state.pos;\n            this.finishToken(tt.backQuote);\n            return;\n          }\n        }\n        out += this.input.slice(chunkStart, this.state.pos);\n        this.finishToken(tt.template, containsInvalid ? null : out);\n        return;\n      }\n      if (ch === charCodes.backslash) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        const escaped = this.readEscapedChar(true);\n        if (escaped === null) {\n          containsInvalid = true;\n        } else {\n          out += escaped;\n        }\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        ++this.state.pos;\n        switch (ch) {\n          case charCodes.carriageReturn:\n            if (this.input.charCodeAt(this.state.pos) === charCodes.lineFeed) {\n              ++this.state.pos;\n            }\n          // fall through\n          case charCodes.lineFeed:\n            out += \"\\n\";\n            break;\n          default:\n            out += String.fromCharCode(ch);\n            break;\n        }\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n  }\n\n  // Used to read escaped characters\n\n  readEscapedChar(inTemplate: boolean): string | null {\n    const throwOnInvalid = !inTemplate;\n    const ch = this.input.charCodeAt(++this.state.pos);\n    ++this.state.pos;\n    switch (ch) {\n      case charCodes.lowercaseN:\n        return \"\\n\";\n      case charCodes.lowercaseR:\n        return \"\\r\";\n      case charCodes.lowercaseX: {\n        const code = this.readHexChar(2, false, throwOnInvalid);\n        return code === null ? null : String.fromCharCode(code);\n      }\n      case charCodes.lowercaseU: {\n        const code = this.readCodePoint(throwOnInvalid);\n        return code === null ? null : String.fromCodePoint(code);\n      }\n      case charCodes.lowercaseT:\n        return \"\\t\";\n      case charCodes.lowercaseB:\n        return \"\\b\";\n      case charCodes.lowercaseV:\n        return \"\\u000b\";\n      case charCodes.lowercaseF:\n        return \"\\f\";\n      case charCodes.carriageReturn:\n        if (this.input.charCodeAt(this.state.pos) === charCodes.lineFeed) {\n          ++this.state.pos;\n        }\n      // fall through\n      case charCodes.lineFeed:\n        this.state.lineStart = this.state.pos;\n        ++this.state.curLine;\n      // fall through\n      case charCodes.lineSeparator:\n      case charCodes.paragraphSeparator:\n        return \"\";\n      case charCodes.digit8:\n      case charCodes.digit9:\n        if (inTemplate) {\n          return null;\n        } else if (this.state.strict) {\n          this.raise(this.state.pos - 1, Errors.StrictNumericEscape);\n        }\n      // fall through\n      default:\n        if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n          const codePos = this.state.pos - 1;\n          const match = this.input\n            .substr(this.state.pos - 1, 3)\n            .match(/^[0-7]+/);\n\n          // This is never null, because of the if condition above.\n          /*:: invariant(match !== null) */\n          let octalStr = match[0];\n\n          let octal = parseInt(octalStr, 8);\n          if (octal > 255) {\n            octalStr = octalStr.slice(0, -1);\n            octal = parseInt(octalStr, 8);\n          }\n          this.state.pos += octalStr.length - 1;\n          const next = this.input.charCodeAt(this.state.pos);\n          if (\n            octalStr !== \"0\" ||\n            next === charCodes.digit8 ||\n            next === charCodes.digit9\n          ) {\n            if (inTemplate) {\n              return null;\n            } else if (this.state.strict) {\n              this.raise(codePos, Errors.StrictNumericEscape);\n            } else {\n              // This property is used to throw an error for\n              // an octal literal in a directive that occurs prior\n              // to a \"use strict\" directive.\n              this.state.octalPositions.push(codePos);\n            }\n          }\n\n          return String.fromCharCode(octal);\n        }\n\n        return String.fromCharCode(ch);\n    }\n  }\n\n  // Used to read character escape sequences ('\\x', '\\u').\n\n  readHexChar(\n    len: number,\n    forceLen: boolean,\n    throwOnInvalid: boolean,\n  ): number | null {\n    const codePos = this.state.pos;\n    const n = this.readInt(16, len, forceLen, false);\n    if (n === null) {\n      if (throwOnInvalid) {\n        this.raise(codePos, Errors.InvalidEscapeSequence);\n      } else {\n        this.state.pos = codePos - 1;\n      }\n    }\n    return n;\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n\n  readWord1(): string {\n    let word = \"\";\n    this.state.containsEsc = false;\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n\n    while (this.state.pos < this.length) {\n      const ch = this.input.codePointAt(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (this.state.isIterator && ch === charCodes.atSign) {\n        ++this.state.pos;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.pos;\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(this.state.pos, Errors.MissingUnicodeEscape);\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(escStart, Errors.EscapedCharNotAnIdentifier);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  isIterator(word: string): boolean {\n    return word === \"@@iterator\" || word === \"@@asyncIterator\";\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(): void {\n    const word = this.readWord1();\n    const type = keywordTypes.get(word) || tt.name;\n\n    // Allow @@iterator and @@asyncIterator as a identifier only inside type\n    if (\n      this.state.isIterator &&\n      (!this.isIterator(word) || !this.state.inType)\n    ) {\n      this.raise(this.state.pos, Errors.InvalidIdentifier, word);\n    }\n\n    this.finishToken(type, word);\n  }\n\n  checkKeywordEscapes(): void {\n    const kw = this.state.type.keyword;\n    if (kw && this.state.containsEsc) {\n      this.raise(this.state.start, Errors.InvalidEscapedReservedWord, kw);\n    }\n  }\n\n  braceIsBlock(prevType: TokenType): boolean {\n    const parent = this.curContext();\n    if (parent === ct.functionExpression || parent === ct.functionStatement) {\n      return true;\n    }\n    if (\n      prevType === tt.colon &&\n      (parent === ct.braceStatement || parent === ct.braceExpression)\n    ) {\n      return !parent.isExpr;\n    }\n\n    // The check for `tt.name && exprAllowed` detects whether we are\n    // after a `yield` or `of` construct. See the `updateContext` for\n    // `tt.name`.\n    if (\n      prevType === tt._return ||\n      (prevType === tt.name && this.state.exprAllowed)\n    ) {\n      return this.hasPrecedingLineBreak();\n    }\n\n    if (\n      prevType === tt._else ||\n      prevType === tt.semi ||\n      prevType === tt.eof ||\n      prevType === tt.parenR ||\n      prevType === tt.arrow\n    ) {\n      return true;\n    }\n\n    if (prevType === tt.braceL) {\n      return parent === ct.braceStatement;\n    }\n\n    if (\n      prevType === tt._var ||\n      prevType === tt._const ||\n      prevType === tt.name\n    ) {\n      return false;\n    }\n\n    if (prevType === tt.relational) {\n      // `class C<T> { ... }`\n      return true;\n    }\n\n    return !this.state.exprAllowed;\n  }\n\n  updateContext(prevType: TokenType): void {\n    const type = this.state.type;\n    let update;\n\n    if (type.keyword && (prevType === tt.dot || prevType === tt.questionDot)) {\n      this.state.exprAllowed = false;\n    } else if ((update = type.updateContext)) {\n      update.call(this, prevType);\n    } else {\n      this.state.exprAllowed = type.beforeExpr;\n    }\n  }\n}\n", "// @flow\n\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport Tokenizer from \"../tokenizer\";\nimport State from \"../tokenizer/state\";\nimport type { Node } from \"../types\";\nimport { lineBreak } from \"../util/whitespace\";\nimport { isIdentifierChar } from \"../util/identifier\";\nimport { Errors } from \"./error\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node,\n  error: Error,\n  thrown: Thrown,\n  aborted: Aborted,\n  failState: FailState,\n};\n\n// ## Parser utilities\n\nexport default class UtilParser extends Tokenizer {\n  // TODO\n\n  addExtra(node: Node, key: string, val: any): void {\n    if (!node) return;\n\n    const extra = (node.extra = node.extra || {});\n    extra[key] = val;\n  }\n\n  // TODO\n\n  isRelational(op: \"<\" | \">\"): boolean {\n    return this.match(tt.relational) && this.state.value === op;\n  }\n\n  // TODO\n\n  expectRelational(op: \"<\" | \">\"): void {\n    if (this.isRelational(op)) {\n      this.next();\n    } else {\n      this.unexpected(null, tt.relational);\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(name: string): boolean {\n    return (\n      this.match(tt.name) &&\n      this.state.value === name &&\n      !this.state.containsEsc\n    );\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    const nameEnd = nameStart + name.length;\n    return (\n      this.input.slice(nameStart, nameEnd) === name &&\n      (nameEnd === this.input.length ||\n        !isIdentifierChar(this.input.charCodeAt(nameEnd)))\n    );\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(name: string): boolean {\n    return this.isContextual(name) && this.eat(tt.name);\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(name: string, message?: string): void {\n    if (!this.eatContextual(name)) this.unexpected(null, message);\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return lineBreak.test(\n      this.input.slice(this.state.lastTokEnd, this.state.start),\n    );\n  }\n\n  // TODO\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(): void {\n    if (!this.isLineTerminator()) this.unexpected(null, tt.semi);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, pos?: ?number): void {\n    this.eat(type) || this.unexpected(pos, type);\n  }\n\n  // Throws if the current token and the prev one are separated by a space.\n  assertNoSpace(message: string = \"Unexpected space.\"): void {\n    if (this.state.start > this.state.lastTokEnd) {\n      /* eslint-disable @babel/development-internal/dry-error-messages */\n      this.raise(this.state.lastTokEnd, message);\n      /* eslint-enable @babel/development-internal/dry-error-messages */\n    }\n  }\n\n  // Raise an unexpected token error. Can take the expected token type\n  // instead of a message string.\n\n  unexpected(\n    pos: ?number,\n    messageOrType: string | TokenType = \"Unexpected token\",\n  ): empty {\n    if (typeof messageOrType !== \"string\") {\n      messageOrType = `Unexpected token, expected \"${messageOrType.label}\"`;\n    }\n    /* eslint-disable @babel/development-internal/dry-error-messages */\n    throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n    /* eslint-enable @babel/development-internal/dry-error-messages */\n  }\n\n  expectPlugin(name: string, pos?: ?number): true {\n    if (!this.hasPlugin(name)) {\n      throw this.raiseWithData(\n        pos != null ? pos : this.state.start,\n        { missingPlugin: [name] },\n        `This experimental syntax requires enabling the parser plugin: '${name}'`,\n      );\n    }\n\n    return true;\n  }\n\n  expectOnePlugin(names: Array<string>, pos?: ?number): void {\n    if (!names.some(n => this.hasPlugin(n))) {\n      throw this.raiseWithData(\n        pos != null ? pos : this.state.start,\n        { missingPlugin: names },\n        `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\n          \", \",\n        )}'`,\n      );\n    }\n  }\n\n  checkYieldAwaitInDefaultParams() {\n    if (\n      this.state.yieldPos !== -1 &&\n      (this.state.awaitPos === -1 || this.state.yieldPos < this.state.awaitPos)\n    ) {\n      this.raise(this.state.yieldPos, Errors.YieldBindingIdentifier);\n    }\n    if (this.state.awaitPos !== -1) {\n      this.raise(this.state.awaitPos, Errors.AwaitBindingIdentifier);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T: Node | $ReadOnlyArray<Node>>(\n    fn: (abort: (node?: T) => empty) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, SyntaxError, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: { node: T | null } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        return {\n          node,\n          error: (failState.errors[oldState.errors.length]: SyntaxError),\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ?ExpressionErrors,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const { shorthandAssign, doubleProto } = refExpressionErrors;\n    if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0;\n    if (shorthandAssign >= 0) {\n      this.unexpected(shorthandAssign);\n    }\n    if (doubleProto >= 0) {\n      this.raise(doubleProto, Errors.DuplicateProto);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return (\n      this.match(tt.name) ||\n      !!this.state.type.keyword ||\n      this.match(tt.string) ||\n      this.match(tt.num) ||\n      this.match(tt.bigint) ||\n      this.match(tt.decimal)\n    );\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track\n * - **shorthandAssign**: track initializer `=` position when parsing ambiguous\n *   patterns. When we are sure the parsed pattern is a RHS, which means it is\n *   not a pattern, we will throw on this position on invalid assign syntax,\n *   otherwise it will be reset to -1\n * - **doubleProto**: track the duplicate `__proto__` key position when parsing\n *   ambiguous object patterns. When we are sure the parsed pattern is a RHS,\n *   which means it is an object literal, we will throw on this position for\n *   __proto__ redefinition, otherwise it will be reset to -1\n */\nexport class ExpressionErrors {\n  shorthandAssign = -1;\n  doubleProto = -1;\n}\n", "// @flow\n\nimport type Parser from \"./index\";\nimport UtilParser from \"./util\";\nimport { SourceLocation, type Position } from \"../util/location\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: Parser, pos: number, loc: Position) {\n    this.type = \"\";\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.options.ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string;\n  start: number;\n  end: number;\n  loc: SourceLocation;\n  range: [number, number];\n  leadingComments: Array<Comment>;\n  trailingComments: Array<Comment>;\n  innerComments: Array<Comment>;\n  extra: { [key: string]: any };\n\n  __clone(): this {\n    // $FlowIgnore\n    const newNode: any = new Node();\n    const keys = Object.keys(this);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // $FlowIgnore\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  }\n}\n\nexport class NodeUtils extends UtilParser {\n  startNode<T: NodeType>(): T {\n    // $FlowIgnore\n    return new Node(this, this.state.start, this.state.startLoc);\n  }\n\n  startNodeAt<T: NodeType>(pos: number, loc: Position): T {\n    // $FlowIgnore\n    return new Node(this, pos, loc);\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T: NodeType>(type: NodeType): T {\n    return this.startNodeAt(type.start, type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T: NodeType>(node: T, type: string): T {\n    return this.finishNodeAt(\n      node,\n      type,\n      this.state.lastTokEnd,\n      this.state.lastTokEndLoc,\n    );\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T: NodeType>(\n    node: T,\n    type: string,\n    pos: number,\n    loc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    node.type = type;\n    node.end = pos;\n    node.loc.end = loc;\n    if (this.options.ranges) node.range[1] = pos;\n    this.processComment(node);\n    return node;\n  }\n\n  resetStartLocation(node: NodeBase, start: number, startLoc: Position): void {\n    node.start = start;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = start;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    end?: number = this.state.lastTokEnd,\n    endLoc?: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = end;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = end;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n  }\n}\n", "// @flow\n\nimport * as charCodes from \"charcodes\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport type {\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  /*:: Identifier, */\n  /*:: ObjectExpression, */\n  /*:: ObjectPattern, */\n} from \"../types\";\nimport type { Pos, Position } from \"../util/location\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier\";\nimport { NodeUtils } from \"./node\";\nimport { type BindingTypes, BIND_NONE } from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport { Errors } from \"./error\";\n\nconst unwrapParenthesizedExpression = (node: Node) => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport default class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  /*::\n  +parseIdentifier: (liberal?: boolean) => Identifier;\n  +parseMaybeAssignAllowIn: (\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: ?Pos,\n  ) => Expression;\n  +parseObjectLike: <T: ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: ?boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ) => T;\n  */\n  // Forward-declaration: defined in statement.js\n  /*::\n  +parseDecorator: () => Decorator;\n  */\n\n  // Convert existing expression atom to assignable pattern\n  // if possible.\n  // NOTE: There is a corresponding \"isAssignable\" method in flow.js.\n  // When this one is updated, please check if also that one needs to be updated.\n\n  toAssignable(node: Node): Node {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (\n        parenthesized.type !== \"Identifier\" &&\n        parenthesized.type !== \"MemberExpression\"\n      ) {\n        this.raise(node.start, Errors.InvalidParenthesizedAssignment);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast);\n\n          if (\n            isLast &&\n            prop.type === \"RestElement\" &&\n            node.extra?.trailingComma\n          ) {\n            this.raiseRestNotLast(node.extra.trailingComma);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\":\n        this.toAssignable(node.value);\n        break;\n\n      case \"SpreadElement\": {\n        this.checkToRestConversion(node);\n\n        node.type = \"RestElement\";\n        const arg = node.argument;\n        this.toAssignable(arg);\n        break;\n      }\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(node.elements, node.extra?.trailingComma);\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(node.left.end, Errors.MissingEqInAssignment);\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left);\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.toAssignable(((parenthesized: any): Expression));\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n    return node;\n  }\n\n  toAssignableObjectExpressionProp(prop: Node, isLast: boolean) {\n    if (prop.type === \"ObjectMethod\") {\n      const error =\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod;\n\n      /* eslint-disable @babel/development-internal/dry-error-messages */\n      this.raise(prop.key.start, error);\n      /* eslint-enable @babel/development-internal/dry-error-messages */\n    } else if (prop.type === \"SpreadElement\" && !isLast) {\n      this.raiseRestNotLast(prop.start);\n    } else {\n      this.toAssignable(prop);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: Expression[],\n    trailingCommaPos?: ?number,\n  ): $ReadOnlyArray<Pattern> {\n    let end = exprList.length;\n    if (end) {\n      const last = exprList[end - 1];\n      if (last?.type === \"RestElement\") {\n        --end;\n      } else if (last?.type === \"SpreadElement\") {\n        last.type = \"RestElement\";\n        const arg = last.argument;\n        this.toAssignable(arg);\n        if (\n          arg.type !== \"Identifier\" &&\n          arg.type !== \"MemberExpression\" &&\n          arg.type !== \"ArrayPattern\" &&\n          arg.type !== \"ObjectPattern\"\n        ) {\n          this.unexpected(arg.start);\n        }\n\n        if (trailingCommaPos) {\n          this.raiseTrailingCommaAfterRest(trailingCommaPos);\n        }\n\n        --end;\n      }\n    }\n    for (let i = 0; i < end; i++) {\n      const elt = exprList[i];\n      if (elt) {\n        this.toAssignable(elt);\n        if (elt.type === \"RestElement\") {\n          this.raiseRestNotLast(elt.start);\n        }\n      }\n    }\n    return exprList;\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList: $ReadOnlyArray<?Expression>,\n    isParenthesizedExpr?: boolean, // eslint-disable-line no-unused-vars\n  ): $ReadOnlyArray<?Expression> {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList: $ReadOnlyArray<?Expression>,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    refExpressionErrors: ?ExpressionErrors,\n    refNeedsArrowPos?: ?Pos,\n  ): SpreadElement {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n      refNeedsArrowPos,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(): RestElement {\n    const node = this.startNode();\n    this.next(); // eat `...`\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode();\n        this.next();\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          true,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    close: TokenType,\n    closeCharCode: $Values<typeof charCodes>,\n    allowEmpty?: boolean,\n    allowModifiers?: boolean,\n  ): $ReadOnlyArray<Pattern | TSParameterProperty> {\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        // $FlowFixMe This method returns `$ReadOnlyArray<?Pattern>` if `allowEmpty` is set.\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n        this.checkCommaAfterRest(closeCharCode);\n        this.expect(close);\n        break;\n      } else {\n        const decorators = [];\n        if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(this.state.start, Errors.UnsupportedParameterDecorator);\n        }\n        // invariant: hasPlugin(\"decorators-legacy\")\n        while (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n      }\n    }\n    return elts;\n  }\n\n  parseAssignableListItem(\n    allowModifiers: ?boolean,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseAssignableListItemTypes(param: Pattern): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault(\n    startPos?: ?number,\n    startLoc?: ?Position,\n    left?: ?Pattern,\n  ): Pattern {\n    startLoc = startLoc ?? this.state.startLoc;\n    startPos = startPos ?? this.state.start;\n    // $FlowIgnore\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n\n  // Verify that a node is an lval \u2014 something that can be assigned\n  // to.\n\n  checkLVal(\n    expr: Expression,\n    bindingType: BindingTypes = BIND_NONE,\n    checkClashes: ?{ [key: string]: boolean },\n    contextDescription: string,\n    disallowLetBinding?: boolean,\n    strictModeChanged?: boolean = false,\n  ): void {\n    switch (expr.type) {\n      case \"Identifier\":\n        if (\n          this.state.strict &&\n          // \"Global\" reserved words have already been checked by parseIdentifier,\n          // unless they have been found in the id or parameters of a strict-mode\n          // function in a sloppy context.\n          (strictModeChanged\n            ? isStrictBindReservedWord(expr.name, this.inModule)\n            : isStrictBindOnlyReservedWord(expr.name))\n        ) {\n          this.raise(\n            expr.start,\n            bindingType === BIND_NONE\n              ? Errors.StrictEvalArguments\n              : Errors.StrictEvalArgumentsBinding,\n            expr.name,\n          );\n        }\n\n        if (checkClashes) {\n          // we need to prefix this with an underscore for the cases where we have a key of\n          // `__proto__`. there's a bug in old V8 where the following wouldn't work:\n          //\n          //   > var obj = Object.create(null);\n          //   undefined\n          //   > obj.__proto__\n          //   null\n          //   > obj.__proto__ = true;\n          //   true\n          //   > obj.__proto__\n          //   null\n          const key = `_${expr.name}`;\n\n          if (checkClashes[key]) {\n            this.raise(expr.start, Errors.ParamDupe);\n          } else {\n            checkClashes[key] = true;\n          }\n        }\n        if (disallowLetBinding && expr.name === \"let\") {\n          this.raise(expr.start, Errors.LetInLexicalBinding);\n        }\n        if (!(bindingType & BIND_NONE)) {\n          this.scope.declareName(expr.name, bindingType, expr.start);\n        }\n        break;\n\n      case \"MemberExpression\":\n        if (bindingType !== BIND_NONE) {\n          this.raise(expr.start, Errors.InvalidPropertyBindingPattern);\n        }\n        break;\n\n      case \"ObjectPattern\":\n        for (let prop of expr.properties) {\n          if (prop.type === \"ObjectProperty\") prop = prop.value;\n          // If we find here an ObjectMethod, it's because this was originally\n          // an ObjectExpression which has then been converted.\n          // toAssignable already reported this error with a nicer message.\n          else if (prop.type === \"ObjectMethod\") continue;\n\n          this.checkLVal(\n            prop,\n            bindingType,\n            checkClashes,\n            \"object destructuring pattern\",\n            disallowLetBinding,\n          );\n        }\n        break;\n\n      case \"ArrayPattern\":\n        for (const elem of expr.elements) {\n          if (elem) {\n            this.checkLVal(\n              elem,\n              bindingType,\n              checkClashes,\n              \"array destructuring pattern\",\n              disallowLetBinding,\n            );\n          }\n        }\n        break;\n\n      case \"AssignmentPattern\":\n        this.checkLVal(\n          expr.left,\n          bindingType,\n          checkClashes,\n          \"assignment pattern\",\n        );\n        break;\n\n      case \"RestElement\":\n        this.checkLVal(\n          expr.argument,\n          bindingType,\n          checkClashes,\n          \"rest element\",\n        );\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.checkLVal(\n          expr.expression,\n          bindingType,\n          checkClashes,\n          \"parenthesized expression\",\n        );\n        break;\n\n      default: {\n        this.raise(\n          expr.start,\n          bindingType === BIND_NONE\n            ? Errors.InvalidLhs\n            : Errors.InvalidLhsBinding,\n          contextDescription,\n        );\n      }\n    }\n  }\n\n  checkToRestConversion(node: SpreadElement): void {\n    if (\n      node.argument.type !== \"Identifier\" &&\n      node.argument.type !== \"MemberExpression\"\n    ) {\n      this.raise(node.argument.start, Errors.InvalidRestAssignmentPattern);\n    }\n  }\n\n  checkCommaAfterRest(close: $Values<typeof charCodes>): void {\n    if (this.match(tt.comma)) {\n      if (this.lookaheadCharCode() === close) {\n        this.raiseTrailingCommaAfterRest(this.state.start);\n      } else {\n        this.raiseRestNotLast(this.state.start);\n      }\n    }\n  }\n\n  raiseRestNotLast(pos: number) {\n    throw this.raise(pos, Errors.ElementAfterRest);\n  }\n\n  raiseTrailingCommaAfterRest(pos: number) {\n    this.raise(pos, Errors.RestTrailingComma);\n  }\n}\n", "// @flow\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts \u2014 that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport { types as ct } from \"../tokenizer/context\";\nimport * as N from \"../types\";\nimport LValParser from \"./lval\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n} from \"../util/identifier\";\nimport type { Pos, Position } from \"../util/location\";\nimport * as charCodes from \"charcodes\";\nimport {\n  BIND_OUTSIDE,\n  BIND_VAR,\n  SCOPE_ARROW,\n  SCOPE_CLASS,\n  SCOPE_DIRECT_SUPER,\n  SCOPE_FUNCTION,\n  SCOPE_SUPER,\n  SCOPE_PROGRAM,\n} from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport {\n  PARAM_AWAIT,\n  PARAM_IN,\n  PARAM_RETURN,\n  PARAM,\n  functionFlags,\n} from \"../util/production-parameter\";\nimport { Errors } from \"./error\";\n\nexport default class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  /*::\n  +parseBlock: (\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ) => N.BlockStatement;\n  +parseClass: (\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ) => N.Class;\n  +parseDecorators: (allowExport?: boolean) => void;\n  +parseFunction: <T: N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ) => T;\n  +parseFunctionParams: (node: N.Function, allowModifiers?: boolean) => void;\n  +takeDecorators: (node: N.HasDecorators) => void;\n  */\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean,\n    protoRef: { used: boolean },\n    refExpressionErrors: ?ExpressionErrors,\n  ): void {\n    if (\n      prop.type === \"SpreadElement\" ||\n      prop.type === \"ObjectMethod\" ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return;\n    }\n\n    const key = prop.key;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(key.start, Errors.RecordNoProto);\n        return;\n      }\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProto === -1) {\n            refExpressionErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raise(key.start, Errors.DuplicateProto);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(expr: N.Expression, potentialArrowAt: number): boolean {\n    return (\n      expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(): N.Expression {\n    let paramFlags = PARAM;\n    if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n    this.nextToken();\n    const expr = this.parseExpression();\n    if (!this.match(tt.eof)) {\n      this.unexpected();\n    }\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(refExpressionErrors?: ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: ?Pos,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(\n        refExpressionErrors,\n        afterLeftParse,\n        refNeedsArrowPos,\n      ),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: ?Pos,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(\n        refExpressionErrors,\n        afterLeftParse,\n        refNeedsArrowPos,\n      ),\n    );\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    refExpressionErrors?: ?ExpressionErrors,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: ?Pos,\n  ): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(\"yield\")) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startPos, startLoc);\n        }\n        return left;\n      } else {\n        // The tokenizer will assume an expression is allowed after\n        // `yield`, but this isn't that kind of yield\n        this.state.exprAllowed = false;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n\n    if (this.match(tt.parenL) || this.match(tt.name)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(\n      refExpressionErrors,\n      refNeedsArrowPos,\n    );\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startPos, startLoc);\n    }\n    if (this.state.type.isAssign) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        node.left = this.toAssignable(left);\n        refExpressionErrors.doubleProto = -1; // reset because double __proto__ is valid in assignment expression\n      } else {\n        node.left = left;\n      }\n\n      if (refExpressionErrors.shorthandAssign >= node.left.start) {\n        refExpressionErrors.shorthandAssign = -1; // reset because shorthand default was used correctly\n      }\n\n      this.checkLVal(left, undefined, undefined, \"assignment expression\");\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      return this.finishNode(node, \"AssignmentExpression\");\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    refExpressionErrors: ExpressionErrors,\n    refNeedsArrowPos?: ?Pos,\n  ): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startPos, startLoc, refNeedsArrowPos);\n  }\n\n  parseConditional(\n    expr: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    // FIXME: Disabling this for now since can't seem to get it to play nicely\n    // eslint-disable-next-line no-unused-vars\n    refNeedsArrowPos?: ?Pos,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(refExpressionErrors: ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnary(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startPos, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    left: N.Expression,\n    leftStartPos: number,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    let prec = this.state.type.binop;\n    if (prec != null && (this.prodParam.hasIn || !this.match(tt._in))) {\n      if (prec > minPrec) {\n        const op = this.state.type;\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n          this.state.inPipeline = true;\n          this.checkPipelineAtInfixOperator(left, leftStartPos);\n        }\n        const node = this.startNodeAt(leftStartPos, leftStartLoc);\n        node.left = left;\n        node.operator = this.state.value;\n        if (\n          op === tt.exponent &&\n          left.type === \"UnaryExpression\" &&\n          (this.options.createParenthesizedExpressions ||\n            !(left.extra && left.extra.parenthesized))\n        ) {\n          this.raise(\n            left.argument.start,\n            Errors.UnexpectedTokenUnaryExponentiation,\n          );\n        }\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = ((tt.logicalAND: any): { binop: number }).binop;\n        }\n\n        this.next();\n\n        if (\n          op === tt.pipeline &&\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\"\n        ) {\n          if (\n            this.match(tt.name) &&\n            this.state.value === \"await\" &&\n            this.prodParam.hasAwait\n          ) {\n            throw this.raise(\n              this.state.start,\n              Errors.UnexpectedAwaitAfterPipelineBody,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(this.state.start, Errors.MixingCoalesceWithLogical);\n        }\n\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n    }\n    return left;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(op: TokenType, prec: number): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"smart\":\n            return this.withTopicPermittingContext(() => {\n              return this.parseSmartPipelineBody(\n                this.parseExprOpBaseRightExpr(op, prec),\n                startPos,\n                startLoc,\n              );\n            });\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n      // falls through\n\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(op: TokenType, prec: number): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnary(),\n      startPos,\n      startLoc,\n      op.rightAssociative ? prec - 1 : prec,\n    );\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(refExpressionErrors: ?ExpressionErrors): N.Expression {\n    if (this.isContextual(\"await\") && this.isAwaitAllowed()) {\n      return this.parseAwait();\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode();\n    if (this.state.type.prefix) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary();\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(node.start, Errors.StrictDelete);\n        } else if (\n          (arg.type === \"MemberExpression\" ||\n            arg.type === \"OptionalMemberExpression\") &&\n          arg.property.type === \"PrivateName\"\n        ) {\n          this.raise(node.start, Errors.DeletePrivateField);\n        }\n      }\n\n      if (!update) {\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    return this.parseUpdate(node, update, refExpressionErrors);\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors: ?ExpressionErrors,\n  ): N.Expression {\n    if (update) {\n      this.checkLVal(node.argument, undefined, undefined, \"prefix operation\");\n      return this.finishNode(node, \"UpdateExpression\");\n    }\n\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (this.state.type.postfix && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.checkLVal(expr, undefined, undefined, \"postfix operation\");\n      this.next();\n      expr = this.finishNode(node, \"UpdateExpression\");\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(refExpressionErrors: ?ExpressionErrors): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startPos, startLoc);\n  }\n\n  parseSubscripts(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    noCalls?: ?boolean,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      const oldMaybeInAsyncArrowHead = this.state.maybeInAsyncArrowHead;\n      if (state.maybeAsyncArrow) {\n        this.state.maybeInAsyncArrowHead = true;\n      }\n      base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n      this.state.maybeInAsyncArrowHead = oldMaybeInAsyncArrowHead;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    noCalls: ?boolean,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    if (!noCalls && this.eat(tt.doubleColon)) {\n      return this.parseBind(base, startPos, startLoc, noCalls, state);\n    } else if (this.match(tt.backQuote)) {\n      return this.parseTaggedTemplateExpression(\n        base,\n        startPos,\n        startLoc,\n        state,\n      );\n    }\n\n    let optional = false;\n    if (this.match(tt.questionDot)) {\n      state.optionalChainMember = optional = true;\n      if (noCalls && this.lookaheadCharCode() === charCodes.leftParenthesis) {\n        // stop at `?.` when parsing `new a?.()`\n        state.stop = true;\n        return base;\n      }\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startPos,\n        startLoc,\n        state,\n        optional,\n      );\n    } else if (optional || this.match(tt.bracketL) || this.eat(tt.dot)) {\n      return this.parseMember(base, startPos, startLoc, state, optional);\n    } else {\n      state.stop = true;\n      return base;\n    }\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt(startPos, startLoc);\n    const computed = this.eat(tt.bracketL);\n    node.object = base;\n    node.computed = computed;\n    const property = computed\n      ? this.parseExpression()\n      : this.parseMaybePrivateName(true);\n\n    if (property.type === \"PrivateName\") {\n      if (node.object.type === \"Super\") {\n        this.raise(startPos, Errors.SuperPrivateField);\n      }\n      this.classScope.usePrivateName(property.id.name, property.start);\n    }\n    node.property = property;\n\n    if (computed) {\n      this.expect(tt.bracketR);\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    noCalls: ?boolean,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startPos,\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n\n    this.next(); // eat `(`\n\n    let node = this.startNodeAt(startPos, startLoc);\n    node.callee = base;\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n    }\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        tt.parenR,\n        state.maybeAsyncArrow,\n        base.type === \"Import\",\n        base.type !== \"Super\",\n        node,\n      );\n    }\n    this.finishCallExpression(node, state.optionalChainMember);\n\n    if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      state.stop = true;\n\n      node = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt(startPos, startLoc),\n        node,\n      );\n      this.checkYieldAwaitInDefaultParams();\n      this.state.yieldPos = oldYieldPos;\n      this.state.awaitPos = oldAwaitPos;\n    } else {\n      this.toReferencedListDeep(node.arguments);\n\n      // We keep the old value if it isn't null, for cases like\n      //   (x = async(yield)) => {}\n      //\n      // Hi developer of the future :) If you are implementing generator\n      // arrow functions, please read the note below about \"await\" and\n      // verify if the same logic is needed for yield.\n      if (oldYieldPos !== -1) this.state.yieldPos = oldYieldPos;\n\n      // Await is trickier than yield. When parsing a possible arrow function\n      // (e.g. something starting with `async(`) we don't know if its possible\n      // parameters will actually be inside an async arrow function or if it is\n      // a normal call expression.\n      // If it ended up being a call expression, if we are in a context where\n      // await expression are disallowed (and thus \"await\" is an identifier)\n      // we must be careful not to leak this.state.awaitPos to an even outer\n      // context, where \"await\" could not be an identifier.\n      // For example, this code is valid because \"await\" isn't directly inside\n      // an async function:\n      //\n      //     async function a() {\n      //       function b(param = async (await)) {\n      //       }\n      //     }\n      //\n      if (\n        (!this.isAwaitAllowed() && !oldMaybeInArrowParameters) ||\n        oldAwaitPos !== -1\n      ) {\n        this.state.awaitPos = oldAwaitPos;\n      }\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return node;\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    base: N.Expression,\n    startPos: number,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node: N.TaggedTemplateExpression = this.startNodeAt(\n      startPos,\n      startLoc,\n    );\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(startPos, Errors.OptionalChainingNoTemplate);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEnd === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      base.start === this.state.potentialArrowAt\n    );\n  }\n\n  finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(\n    node: T,\n    optional: boolean,\n  ): N.Expression {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        // todo(Babel 8): remove the if condition,\n        // moduleAttributes is renamed to importAssertions\n        if (!this.hasPlugin(\"moduleAttributes\")) {\n          this.expectPlugin(\"importAssertions\");\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(\n          node.start,\n          Errors.ImportCallArity,\n          this.hasPlugin(\"importAssertions\") ||\n            this.hasPlugin(\"moduleAttributes\")\n            ? \"one or two arguments\"\n            : \"one argument\",\n        );\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(arg.start, Errors.ImportCallSpreadArgument);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    close: TokenType,\n    possibleAsyncArrow: boolean,\n    dynamicImport?: boolean,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: ?N.Node,\n  ): $ReadOnlyArray<?N.Expression> {\n    const elts = [];\n    let innerParenStart;\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (\n            dynamicImport &&\n            !this.hasPlugin(\"importAssertions\") &&\n            !this.hasPlugin(\"moduleAttributes\")\n          ) {\n            this.raise(\n              this.state.lastTokStart,\n              Errors.ImportCallArgumentTrailingComma,\n            );\n          }\n          if (nodeForExtra) {\n            this.addExtra(\n              nodeForExtra,\n              \"trailingComma\",\n              this.state.lastTokStart,\n            );\n          }\n          this.next();\n          break;\n        }\n      }\n\n      // we need to make sure that if this is an async arrow functions,\n      // that we don't allow inner parens inside the params\n      if (this.match(tt.parenL) && !innerParenStart) {\n        innerParenStart = this.state.start;\n      }\n\n      elts.push(\n        this.parseExprListItem(\n          false,\n          possibleAsyncArrow ? new ExpressionErrors() : undefined,\n          possibleAsyncArrow ? { start: 0 } : undefined,\n          allowPlaceholder,\n        ),\n      );\n    }\n\n    // we found an async arrow function so let's not allow any inner parens\n    if (possibleAsyncArrow && innerParenStart && this.shouldParseAsyncArrow()) {\n      this.unexpected();\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    node: N.ArrowFunctionExpression,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingComma,\n    );\n    return node;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n  }\n\n  // Parse an atomic expression \u2014 either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(refExpressionErrors?: ?ExpressionErrors): N.Expression {\n    // If a division operator appears in an expression position, the\n    // tokenizer got confused, and we force it to read a regexp instead.\n    if (this.state.type === tt.slash) this.readRegexp();\n\n    const canBeArrow = this.state.potentialArrowAt === this.state.start;\n    let node;\n\n    switch (this.state.type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaProperty(node);\n        }\n\n        if (!this.match(tt.parenL)) {\n          this.raise(this.state.lastTokStart, Errors.UnsupportedImport);\n        }\n        return this.finishNode(node, \"Import\");\n      case tt._this:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt.name: {\n        const containsEsc = this.state.containsEsc;\n        const id = this.parseIdentifier();\n\n        if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n          if (this.match(tt._function)) {\n            const last = this.state.context.length - 1;\n            if (this.state.context[last] !== ct.functionStatement) {\n              // Since \"async\" is an identifier and normally identifiers\n              // can't be followed by expression, the tokenizer assumes\n              // that \"function\" starts a statement.\n              // Fixing it in the tokenizer would mean tracking not only the\n              // previous token (\"async\"), but also the one before to know\n              // its beforeExpr value.\n              // It's easier and more efficient to adjust the context here.\n              throw new Error(\"Internal error\");\n            }\n            this.state.context[last] = ct.functionExpression;\n\n            this.next();\n            return this.parseFunction(\n              this.startNodeAtNode(id),\n              undefined,\n              true,\n            );\n          } else if (this.match(tt.name)) {\n            return this.parseAsyncArrowUnaryFunction(id);\n          }\n        }\n\n        if (canBeArrow && this.match(tt.arrow) && !this.canInsertSemicolon()) {\n          this.next();\n          return this.parseArrowExpression(\n            this.startNodeAtNode(id),\n            [id],\n            false,\n          );\n        }\n\n        return id;\n      }\n\n      case tt._do: {\n        return this.parseDo();\n      }\n\n      case tt.regexp: {\n        const value = this.state.value;\n        node = this.parseLiteral(value.value, \"RegExpLiteral\");\n        node.pattern = value.pattern;\n        node.flags = value.flags;\n        return node;\n      }\n\n      case tt.num:\n        return this.parseLiteral(this.state.value, \"NumericLiteral\");\n\n      case tt.bigint:\n        return this.parseLiteral(this.state.value, \"BigIntLiteral\");\n\n      case tt.decimal:\n        return this.parseLiteral(this.state.value, \"DecimalLiteral\");\n\n      case tt.string:\n        return this.parseLiteral(this.state.value, \"StringLiteral\");\n\n      case tt._null:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"NullLiteral\");\n\n      case tt._true:\n      case tt._false:\n        return this.parseBooleanLiteral();\n\n      case tt.parenL:\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n\n      case tt.bracketBarL:\n      case tt.bracketHashL: {\n        return this.parseArrayLike(\n          this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n          /* canBePattern */ false,\n          /* isTuple */ true,\n          refExpressionErrors,\n        );\n      }\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceBarL:\n      case tt.braceHashL: {\n        return this.parseObjectLike(\n          this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ true,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        this.parseDecorators();\n      // fall through\n      case tt._class:\n        node = this.startNode();\n        this.takeDecorators(node);\n        return this.parseClass(node, false);\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.backQuote:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(callee.start, Errors.UnsupportedBind);\n        }\n      }\n\n      case tt.hash: {\n        if (this.state.inPipeline) {\n          node = this.startNode();\n\n          if (\n            this.getPluginOption(\"pipelineOperator\", \"proposal\") !== \"smart\"\n          ) {\n            this.raise(node.start, Errors.PrimaryTopicRequiresSmartPipeline);\n          }\n\n          this.next();\n\n          if (!this.primaryTopicReferenceIsAllowedInCurrentTopicContext()) {\n            this.raise(node.start, Errors.PrimaryTopicNotAllowed);\n          }\n\n          this.registerTopicReference();\n          return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n        }\n\n        // https://tc39.es/proposal-private-fields-in-in\n        // RelationalExpression [In, Yield, Await]\n        //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n        const nextCh = this.input.codePointAt(this.state.end);\n        if (isIdentifierStart(nextCh) || nextCh === charCodes.backslash) {\n          const start = this.state.start;\n          // $FlowIgnore It'll either parse a PrivateName or throw.\n          node = (this.parseMaybePrivateName(true): N.PrivateName);\n          if (this.match(tt._in)) {\n            this.expectPlugin(\"privateIn\");\n            this.classScope.usePrivateName(node.id.name, node.start);\n          } else if (this.hasPlugin(\"privateIn\")) {\n            this.raise(\n              this.state.start,\n              Errors.PrivateInExpectedIn,\n              node.id.name,\n            );\n          } else {\n            throw this.unexpected(start);\n          }\n          return node;\n        }\n      }\n      // fall through\n      case tt.relational: {\n        if (this.state.value === \"<\") {\n          const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n          if (\n            isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n            lookaheadCh === charCodes.greaterThan // Fragment <>\n          ) {\n            this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n          }\n        }\n      }\n      // fall through\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(id: N.Expression): N.ArrowFunctionExpression {\n    const node = this.startNodeAtNode(id);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldMaybeInAsyncArrowHead = this.state.maybeInAsyncArrowHead;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = true;\n    this.state.maybeInAsyncArrowHead = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    const params = [this.parseIdentifier()];\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.pos, Errors.LineTerminatorBeforeArrow);\n    }\n    this.expect(tt.arrow);\n    this.checkYieldAwaitInDefaultParams();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.maybeInAsyncArrowHead = oldMaybeInAsyncArrowHead;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n    // let foo = async bar => {};\n    this.parseArrowExpression(node, params, true);\n    return node;\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  parseDo(): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    const node = this.startNode();\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    node.body = this.parseBlock();\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(node.start, Errors.SuperNotAllowed);\n    } else if (\n      !this.scope.allowSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(node.start, Errors.UnexpectedSuper);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(node.start, Errors.UnsupportedSuper);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parseBooleanLiteral(): N.BooleanLiteral {\n    const node = this.startNode();\n    node.value = this.match(tt._true);\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseMaybePrivateName(\n    isPrivateNameAllowed: boolean,\n  ): N.PrivateName | N.Identifier {\n    const isPrivate = this.match(tt.hash);\n\n    if (isPrivate) {\n      this.expectOnePlugin([\"classPrivateProperties\", \"classPrivateMethods\"]);\n      if (!isPrivateNameAllowed) {\n        this.raise(this.state.pos, Errors.UnexpectedPrivateField);\n      }\n      const node = this.startNode();\n      this.next();\n      this.assertNoSpace(\"Unexpected space between # and identifier\");\n      node.id = this.parseIdentifier(true);\n      return this.finishNode(node, \"PrivateName\");\n    } else {\n      return this.parseIdentifier(true);\n    }\n  }\n\n  parseFunctionOrFunctionSent(): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      return this.parseMetaProperty(node, meta, \"sent\");\n    }\n    return this.parseFunction(node);\n  }\n\n  parseMetaProperty(\n    node: N.MetaProperty,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    if (meta.name === \"function\" && propertyName === \"sent\") {\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.isContextual(propertyName)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n    }\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(\n        node.property.start,\n        Errors.UnsupportedMetaProperty,\n        meta.name,\n        propertyName,\n      );\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  parseImportMetaProperty(node: N.MetaProperty): N.MetaProperty {\n    const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n    this.next(); // eat `.`\n\n    if (this.isContextual(\"meta\")) {\n      if (!this.inModule) {\n        this.raiseWithData(\n          id.start,\n          { code: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\" },\n          Errors.ImportMetaOutsideModule,\n        );\n      }\n      this.sawUnambiguousESM = true;\n    }\n\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n\n  parseLiteral<T: N.Literal>(\n    value: any,\n    type: /*T[\"kind\"]*/ string,\n    startPos?: number,\n    startLoc?: Position,\n  ): T {\n    startPos = startPos || this.state.start;\n    startLoc = startLoc || this.state.startLoc;\n\n    const node = this.startNodeAt(startPos, startLoc);\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(startPos, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode(node, type);\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartPos = this.state.start;\n    const innerStartLoc = this.state.startLoc;\n    const exprList = [];\n    const refExpressionErrors = new ExpressionErrors();\n    const refNeedsArrowPos = { start: 0 };\n    let first = true;\n    let spreadStart;\n    let optionalCommaStart;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma, refNeedsArrowPos.start || null);\n        if (this.match(tt.parenR)) {\n          optionalCommaStart = this.state.start;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartPos = this.state.start;\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStart = this.state.start;\n        exprList.push(\n          this.parseParenItem(\n            this.parseRestBinding(),\n            spreadNodeStartPos,\n            spreadNodeStartLoc,\n          ),\n        );\n\n        this.checkCommaAfterRest(charCodes.rightParenthesis);\n\n        break;\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowIn(\n            refExpressionErrors,\n            this.parseParenItem,\n            refNeedsArrowPos,\n          ),\n        );\n      }\n    }\n\n    const innerEndPos = this.state.lastTokEnd;\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt(startPos, startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow() &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      if (!this.isAwaitAllowed() && !this.state.maybeInAsyncArrowHead) {\n        this.state.awaitPos = oldAwaitPos;\n      }\n      this.checkYieldAwaitInDefaultParams();\n      this.state.yieldPos = oldYieldPos;\n      this.state.awaitPos = oldAwaitPos;\n      for (const param of exprList) {\n        if (param.extra && param.extra.parenthesized) {\n          this.unexpected(param.extra.parenStart);\n        }\n      }\n\n      this.parseArrowExpression(arrowNode, exprList, false);\n      return arrowNode;\n    }\n\n    // We keep the old value if it isn't null, for cases like\n    //   (x = (yield)) => {}\n    if (oldYieldPos !== -1) this.state.yieldPos = oldYieldPos;\n    if (oldAwaitPos !== -1) this.state.awaitPos = oldAwaitPos;\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStart);\n    }\n    if (optionalCommaStart) this.unexpected(optionalCommaStart);\n    if (spreadStart) this.unexpected(spreadStart);\n    this.checkExpressionErrors(refExpressionErrors, true);\n    if (refNeedsArrowPos.start) this.unexpected(refNeedsArrowPos.start);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(val, \"parenthesized\", true);\n      this.addExtra(val, \"parenStart\", startPos);\n      return val;\n    }\n\n    const parenExpression = this.startNodeAt(startPos, startLoc);\n    parenExpression.expression = val;\n    this.finishNode(parenExpression, \"ParenthesizedExpression\");\n    return parenExpression;\n  }\n\n  shouldParseArrow(): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(node: N.ArrowFunctionExpression): ?N.ArrowFunctionExpression {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem(\n    node: N.Expression,\n    startPos: number, // eslint-disable-line no-unused-vars\n    startLoc: Position, // eslint-disable-line no-unused-vars\n  ): N.Expression {\n    return node;\n  }\n\n  parseNewOrNewTarget(): N.NewExpression | N.MetaProperty {\n    const node = this.startNode();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n      this.next();\n      const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n        let error = Errors.UnexpectedNewTarget;\n\n        if (this.hasPlugin(\"classProperties\")) {\n          error += \" or class properties\";\n        }\n\n        /* eslint-disable @babel/development-internal/dry-error-messages */\n        this.raise(metaProp.start, error);\n        /* eslint-enable @babel/development-internal/dry-error-messages */\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call \u2014 at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(node: N.Expression): N.NewExpression {\n    node.callee = this.parseNoCallExpr();\n\n    if (node.callee.type === \"Import\") {\n      this.raise(node.callee.start, Errors.ImportCallNotNewExpression);\n    } else if (\n      node.callee.type === \"OptionalMemberExpression\" ||\n      node.callee.type === \"OptionalCallExpression\"\n    ) {\n      this.raise(this.state.lastTokEnd, Errors.OptionalChainingNoNew);\n    } else if (this.eat(tt.questionDot)) {\n      this.raise(this.state.start, Errors.OptionalChainingNoNew);\n    }\n\n    this.parseNewArguments(node);\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewArguments(node: N.NewExpression): void {\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // $FlowFixMe (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const elem = this.startNode();\n    if (this.state.value === null) {\n      if (!isTagged) {\n        this.raise(this.state.start + 1, Errors.InvalidEscapeSequenceTemplate);\n      }\n    }\n    elem.value = {\n      raw: this.input\n        .slice(this.state.start, this.state.end)\n        .replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.state.value,\n    };\n    this.next();\n    elem.tail = this.match(tt.backQuote);\n    return this.finishNode(elem, \"TemplateElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode();\n    this.next();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n    while (!curElt.tail) {\n      this.expect(tt.dollarBraceL);\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.expect(tt.braceR);\n      node.quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    this.next();\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(): N.Expression {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike<T: N.ObjectPattern | N.ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: ?boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash: any = Object.create(null);\n    let first = true;\n    const node = this.startNode();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n          this.next();\n          break;\n        }\n      }\n\n      const prop = this.parsePropertyDefinition(isPattern, refExpressionErrors);\n      if (!isPattern) {\n        // $FlowIgnore RestElement will never be returned if !isPattern\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (\n        isRecord &&\n        prop.type !== \"ObjectProperty\" &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(prop.start, Errors.InvalidRecordProperty);\n      }\n\n      // $FlowIgnore\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n\n      node.properties.push(prop);\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    return this.finishNode(node, type);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(prop: N.ObjectProperty): boolean {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    isPattern: boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): N.ObjectMember | N.SpreadElement | N.RestElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(this.state.start, Errors.UnsupportedPropertyDecorator);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode();\n    let isGenerator = false;\n    let isAsync = false;\n    let isAccessor = false;\n    let startPos;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      if (isPattern) {\n        this.next();\n        // Don't use parseRestBinding() as we only allow Identifier here.\n        prop.argument = this.parseIdentifier();\n        this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n        return this.finishNode(prop, \"RestElement\");\n      }\n\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (isPattern || refExpressionErrors) {\n      startPos = this.state.start;\n      startLoc = this.state.startLoc;\n    }\n\n    if (!isPattern) {\n      isGenerator = this.eat(tt.star);\n    }\n\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n\n    if (\n      !isPattern &&\n      !isGenerator &&\n      !containsEsc &&\n      this.maybeAsyncOrAccessorProp(prop)\n    ) {\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(this.state.pos, Errors.AccessorIsGenerator, keyName);\n          this.next();\n        }\n        this.parsePropertyName(prop, /* isPrivateNameAllowed */ false);\n      }\n    }\n\n    this.parseObjPropValue(\n      prop,\n      startPos,\n      startLoc,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n      refExpressionErrors,\n    );\n\n    return prop;\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    const start = method.start;\n\n    if (params.length !== paramCount) {\n      if (method.kind === \"get\") {\n        this.raise(start, Errors.BadGetterArity);\n      } else {\n        this.raise(start, Errors.BadSetterArity);\n      }\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(start, Errors.BadSetterRestParameter);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    prop: N.ObjectMethod,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): ?N.ObjectMethod {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(prop);\n      return prop;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    prop: N.ObjectProperty,\n    startPos: ?number,\n    startLoc: ?Position,\n    isPattern: boolean,\n    refExpressionErrors: ?ExpressionErrors,\n  ): ?N.ObjectProperty {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.start, this.state.startLoc)\n        : this.parseMaybeAssignAllowIn(refExpressionErrors);\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoveredInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startPos,\n          startLoc,\n          prop.key.__clone(),\n        );\n      } else if (this.match(tt.eq) && refExpressionErrors) {\n        if (refExpressionErrors.shorthandAssign === -1) {\n          refExpressionErrors.shorthandAssign = this.state.start;\n        }\n        prop.value = this.parseMaybeDefault(\n          startPos,\n          startLoc,\n          prop.key.__clone(),\n        );\n      } else {\n        prop.value = prop.key.__clone();\n      }\n      prop.shorthand = true;\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue(\n    prop: any,\n    startPos: ?number,\n    startLoc: ?Position,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n  ): void {\n    const node =\n      this.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) ||\n      this.parseObjectProperty(\n        prop,\n        startPos,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      );\n\n    if (!node) this.unexpected();\n\n    // $FlowFixMe\n    return node;\n  }\n\n  parsePropertyName(\n    prop: N.ObjectOrClassMember | N.ClassMember | N.TsNamedTypeElementBase,\n    isPrivateNameAllowed: boolean,\n  ): N.Expression | N.Identifier {\n    if (this.eat(tt.bracketL)) {\n      (prop: $FlowSubtype<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      const oldInPropertyName = this.state.inPropertyName;\n      this.state.inPropertyName = true;\n      // We check if it's valid for it to be a private name when we push it.\n      (prop: $FlowFixMe).key =\n        this.match(tt.num) ||\n        this.match(tt.string) ||\n        this.match(tt.bigint) ||\n        this.match(tt.decimal)\n          ? this.parseExprAtom()\n          : this.parseMaybePrivateName(isPrivateNameAllowed);\n\n      if (prop.key.type !== \"PrivateName\") {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n\n      this.state.inPropertyName = oldInPropertyName;\n    }\n\n    return prop.key;\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: ?boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = !!isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T: N.MethodLike>(\n    node: T,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: string,\n    inClassScope: boolean = false,\n  ): T {\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n\n    this.initFunction(node, isAsync);\n    node.generator = !!isGenerator;\n    const allowModifiers = isConstructor; // For TypeScript parameter properties\n    this.scope.enter(\n      SCOPE_FUNCTION |\n        SCOPE_SUPER |\n        (inClassScope ? SCOPE_CLASS : 0) |\n        (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams((node: any), allowModifiers);\n    this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n\n    return node;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors: ?ExpressionErrors,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      node,\n    );\n    if (canBePattern && !this.state.maybeInArrowParameters) {\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      this.toReferencedList(node.elements);\n    }\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    node: N.ArrowFunctionExpression,\n    params: ?(N.Expression[]),\n    isAsync: boolean,\n    trailingCommaPos: ?number,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody and AsyncConciseBody inherit [In]\n    if (!this.match(tt.bracketL) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaPos);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: N.ArrowFunctionExpression,\n    params: N.Expression[],\n    trailingCommaPos: ?number,\n  ): void {\n    node.params = this.toAssignableList(params, trailingCommaPos);\n  }\n\n  parseFunctionBodyAndFinish(\n    node: N.BodilessFunctionOrMethodBase,\n    type: string,\n    isMethod?: boolean = false,\n  ): void {\n    // $FlowIgnore (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    node: N.Function,\n    allowExpression: ?boolean,\n    isMethod?: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    const oldInParameters = this.state.inParameters;\n    this.state.inParameters = false;\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      node.body = this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            const errorPos =\n              // $FlowIgnore\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n              // $FlowIgnore\n              !!node.key\n                ? node.key.end\n                : node.start;\n            this.raise(errorPos, Errors.IllegalLanguageModeDirective);\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkLVal(\n              node.id,\n              BIND_OUTSIDE,\n              undefined,\n              \"function name\",\n              undefined,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n\n    this.state.inParameters = oldInParameters;\n  }\n\n  isSimpleParamList(\n    params: $ReadOnlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (params[i].type !== \"Identifier\") return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: N.Function,\n    allowDuplicates: boolean,\n    // eslint-disable-next-line no-unused-vars\n    isArrowFunction: ?boolean,\n    strictModeChanged?: boolean = true,\n  ): void {\n    // $FlowIssue\n    const nameHash: {} = Object.create(null);\n    for (let i = 0; i < node.params.length; i++) {\n      this.checkLVal(\n        node.params[i],\n        BIND_VAR,\n        allowDuplicates ? null : nameHash,\n        \"function parameter list\",\n        undefined,\n        strictModeChanged,\n      );\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n\n  parseExprList(\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n    nodeForExtra?: ?N.Node,\n  ): $ReadOnlyArray<?N.Expression> {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addExtra(\n              nodeForExtra,\n              \"trailingComma\",\n              this.state.lastTokStart,\n            );\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    allowEmpty: ?boolean,\n    refExpressionErrors?: ?ExpressionErrors,\n    refNeedsArrowPos: ?Pos,\n    allowPlaceholder: ?boolean,\n  ): ?N.Expression {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(this.state.pos, Errors.UnexpectedToken, \",\");\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartPos = this.state.start;\n      const spreadNodeStartLoc = this.state.startLoc;\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors, refNeedsArrowPos),\n        spreadNodeStartPos,\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(this.state.start, Errors.UnexpectedArgumentPlaceholder);\n      }\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(\n        refExpressionErrors,\n        this.parseParenItem,\n        refNeedsArrowPos,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode();\n    const name = this.parseIdentifierName(node.start, liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node: N.Identifier, name: string): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(pos: number, liberal?: boolean): string {\n    let name: string;\n\n    const { start, type } = this.state;\n\n    if (type === tt.name) {\n      name = this.state.value;\n    } else if (type.keyword) {\n      name = type.keyword;\n\n      // `class` and `function` keywords push function-type token context into this.context.\n      // But there is no chance to pop the context if the keyword is consumed\n      // as an identifier such as a property name.\n      const curContext = this.curContext();\n      if (\n        (type === tt._class || type === tt._function) &&\n        (curContext === ct.functionStatement ||\n          curContext === ct.functionExpression)\n      ) {\n        this.state.context.pop();\n      }\n    } else {\n      throw this.unexpected();\n    }\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      this.state.type = tt.name;\n    } else {\n      this.checkReservedWord(name, start, !!type.keyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: number,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    if (this.prodParam.hasYield && word === \"yield\") {\n      this.raise(startLoc, Errors.YieldBindingIdentifier);\n      return;\n    }\n\n    if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(startLoc, Errors.AwaitBindingIdentifier);\n        return;\n      }\n      if (\n        this.state.awaitPos === -1 &&\n        (this.state.maybeInAsyncArrowHead || this.isAwaitAllowed())\n      ) {\n        this.state.awaitPos = this.state.start;\n      }\n    }\n\n    if (\n      this.scope.inClass &&\n      !this.scope.inNonArrowFunction &&\n      word === \"arguments\"\n    ) {\n      this.raise(startLoc, Errors.ArgumentsInClass);\n      return;\n    }\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(startLoc, Errors.UnexpectedKeyword, word);\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n      ? isStrictBindReservedWord\n      : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      if (!this.prodParam.hasAwait && word === \"await\") {\n        this.raise(startLoc, Errors.AwaitNotInAsyncFunction);\n      } else {\n        this.raise(startLoc, Errors.UnexpectedReservedWord, word);\n      }\n    }\n  }\n\n  isAwaitAllowed(): boolean {\n    if (this.scope.inFunction) return this.prodParam.hasAwait;\n    if (this.options.allowAwaitOutsideFunction) return true;\n    if (this.hasPlugin(\"topLevelAwait\")) {\n      return this.inModule && this.prodParam.hasAwait;\n    }\n    return false;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(): N.AwaitExpression {\n    const node = this.startNode();\n\n    this.next();\n\n    if (this.state.inParameters) {\n      this.raise(node.start, Errors.AwaitExpressionFormalParameter);\n    } else if (this.state.awaitPos === -1) {\n      this.state.awaitPos = node.start;\n    }\n    if (this.eat(tt.star)) {\n      this.raise(node.start, Errors.ObsoleteAwaitStar);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (\n        this.hasPrecedingLineBreak() ||\n        // All the following expressions are ambiguous:\n        //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``\n        this.match(tt.plusMin) ||\n        this.match(tt.parenL) ||\n        this.match(tt.bracketL) ||\n        this.match(tt.backQuote) ||\n        // Sometimes the tokenizer generates tt.slash for regexps, and this is\n        // handler by parseExprAtom\n        this.match(tt.regexp) ||\n        this.match(tt.slash) ||\n        // This code could be parsed both as a modulo operator or as an intrinsic:\n        //   await %x(0)\n        (this.hasPlugin(\"v8intrinsic\") && this.match(tt.modulo))\n      ) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary();\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(): N.YieldExpression {\n    const node = this.startNode();\n\n    if (this.state.inParameters) {\n      this.raise(node.start, Errors.YieldInParameter);\n    } else if (this.state.yieldPos === -1) {\n      this.state.yieldPos = node.start;\n    }\n\n    this.next();\n    if (\n      this.match(tt.semi) ||\n      (!this.match(tt.star) && !this.state.type.startsExpr) ||\n      this.hasPrecedingLineBreak()\n    ) {\n      node.delegate = false;\n      node.argument = null;\n    } else {\n      node.delegate = this.eat(tt.star);\n      node.argument = this.parseMaybeAssign();\n    }\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartPos: number) {\n    if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(leftStartPos, Errors.PipelineHeadSequenceExpression);\n      }\n    }\n  }\n\n  parseSmartPipelineBody(\n    childExpression: N.Expression,\n    startPos: number,\n    startLoc: Position,\n  ): N.PipelineBody {\n    this.checkSmartPipelineBodyEarlyErrors(childExpression, startPos);\n\n    return this.parseSmartPipelineBodyInStyle(\n      childExpression,\n      startPos,\n      startLoc,\n    );\n  }\n\n  checkSmartPipelineBodyEarlyErrors(\n    childExpression: N.Expression,\n    startPos: number,\n  ): void {\n    if (this.match(tt.arrow)) {\n      // If the following token is invalidly `=>`, then throw a human-friendly error\n      // instead of something like 'Unexpected token, expected \";\"'.\n      throw this.raise(this.state.start, Errors.PipelineBodyNoArrow);\n    } else if (childExpression.type === \"SequenceExpression\") {\n      this.raise(startPos, Errors.PipelineBodySequenceExpression);\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(\n    childExpression: N.Expression,\n    startPos: number,\n    startLoc: Position,\n  ): N.PipelineBody {\n    const bodyNode = this.startNodeAt(startPos, startLoc);\n    const isSimpleReference = this.isSimpleReference(childExpression);\n    if (isSimpleReference) {\n      bodyNode.callee = childExpression;\n    } else {\n      if (!this.topicReferenceWasUsedInCurrentTopicContext()) {\n        this.raise(startPos, Errors.PipelineTopicUnused);\n      }\n      bodyNode.expression = childExpression;\n    }\n    return this.finishNode(\n      bodyNode,\n      isSimpleReference ? \"PipelineBareFunction\" : \"PipelineTopicExpression\",\n    );\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // Enable topic references from outer contexts within smart pipeline bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withTopicPermittingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // Disable topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withTopicForbiddingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Disable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 0,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a primary topic reference (`#`) within the current\n  // topic context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  primaryTopicReferenceIsAllowedInCurrentTopicContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentTopicContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(prec: number): N.Expression {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnary(),\n      startPos,\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n}\n", "// @flow\n\nimport * as N from \"../types\";\nimport { types as tt, type TokenType } from \"../tokenizer/types\";\nimport ExpressionParser from \"./expression\";\nimport { Errors } from \"./error\";\nimport {\n  isIdentifierChar,\n  isIdentifierStart,\n  keywordRelationalOperator,\n} from \"../util/identifier\";\nimport { lineBreak } from \"../util/whitespace\";\nimport * as charCodes from \"charcodes\";\nimport {\n  BIND_CLASS,\n  BIND_LEXICAL,\n  BIND_VAR,\n  BIND_FUNCTION,\n  SCOPE_CLASS,\n  SCOPE_FUNCTION,\n  SCOPE_OTHER,\n  SCOPE_SIMPLE_CATCH,\n  SCOPE_SUPER,\n  CLASS_ELEMENT_OTHER,\n  CLASS_ELEMENT_INSTANCE_GETTER,\n  CLASS_ELEMENT_INSTANCE_SETTER,\n  CLASS_ELEMENT_STATIC_GETTER,\n  CLASS_ELEMENT_STATIC_SETTER,\n  type BindingTypes,\n} from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport { PARAM, functionFlags } from \"../util/production-parameter\";\n\nconst loopLabel = { kind: \"loop\" },\n  switchLabel = { kind: \"switch\" };\n\nconst FUNC_NO_FLAGS = 0b000,\n  FUNC_STATEMENT = 0b001,\n  FUNC_HANGING_STATEMENT = 0b010,\n  FUNC_NULLABLE_ID = 0b100;\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nexport default class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(file: N.File, program: N.Program): N.File {\n    program.sourceType = this.options.sourceType;\n\n    program.interpreter = this.parseInterpreterDirective();\n\n    this.parseBlockBody(program, true, true, tt.eof);\n\n    if (\n      this.inModule &&\n      !this.options.allowUndeclaredExports &&\n      this.scope.undefinedExports.size > 0\n    ) {\n      for (const [name] of Array.from(this.scope.undefinedExports)) {\n        const pos = this.scope.undefinedExports.get(name);\n        // $FlowIssue\n        this.raise(pos, Errors.ModuleExportUndefined, name);\n      }\n    }\n\n    file.program = this.finishNode(program, \"Program\");\n    file.comments = this.state.comments;\n\n    if (this.options.tokens) file.tokens = this.tokens;\n\n    return this.finishNode(file, \"File\");\n  }\n\n  // TODO\n\n  stmtToDirective(stmt: N.Statement): N.Directive {\n    const expr = stmt.expression;\n\n    const directiveLiteral = this.startNodeAt(expr.start, expr.loc.start);\n    const directive = this.startNodeAt(stmt.start, stmt.loc.start);\n\n    const raw = this.input.slice(expr.start, expr.end);\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n\n    directive.value = this.finishNodeAt(\n      directiveLiteral,\n      \"DirectiveLiteral\",\n      expr.end,\n      expr.loc.end,\n    );\n\n    return this.finishNodeAt(directive, \"Directive\", stmt.end, stmt.loc.end);\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(context: ?string): boolean {\n    if (!this.isContextual(\"let\")) {\n      return false;\n    }\n    const next = this.nextTokenStart();\n    const nextCh = this.input.charCodeAt(next);\n    // For ambiguous cases, determine if a LexicalDeclaration (or only a\n    // Statement) is allowed here. If context is not empty then only a Statement\n    // is allowed. However, `let [` is an explicit negative lookahead for\n    // ExpressionStatement, so special-case it first.\n    if (nextCh === charCodes.leftSquareBracket) return true;\n    if (context) return false;\n\n    if (nextCh === charCodes.leftCurlyBrace) return true;\n\n    if (isIdentifierStart(nextCh)) {\n      let pos = next + 1;\n      while (isIdentifierChar(this.input.charCodeAt(pos))) {\n        ++pos;\n      }\n      const ident = this.input.slice(next, pos);\n      if (!keywordRelationalOperator.test(ident)) return true;\n    }\n    return false;\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatement(context: ?string, topLevel?: boolean): N.Statement {\n    if (this.match(tt.at)) {\n      this.parseDecorators(true);\n    }\n    return this.parseStatementContent(context, topLevel);\n  }\n\n  parseStatementContent(context: ?string, topLevel: ?boolean): N.Statement {\n    let starttype = this.state.type;\n    const node = this.startNode();\n    let kind;\n\n    if (this.isLet(context)) {\n      starttype = tt._var;\n      kind = \"let\";\n    }\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (starttype) {\n      case tt._break:\n      case tt._continue:\n        // $FlowFixMe\n        return this.parseBreakContinueStatement(node, starttype.keyword);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node);\n      case tt._do:\n        return this.parseDoStatement(node);\n      case tt._for:\n        return this.parseForStatement(node);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (context) {\n          if (this.state.strict) {\n            this.raise(this.state.start, Errors.StrictFunction);\n          } else if (context !== \"if\" && context !== \"label\") {\n            this.raise(this.state.start, Errors.SloppyFunction);\n          }\n        }\n        return this.parseFunctionStatement(node, false, !context);\n\n      case tt._class:\n        if (context) this.unexpected();\n        return this.parseClass(node, true);\n\n      case tt._if:\n        return this.parseIfStatement(node);\n      case tt._return:\n        return this.parseReturnStatement(node);\n      case tt._switch:\n        return this.parseSwitchStatement(node);\n      case tt._throw:\n        return this.parseThrowStatement(node);\n      case tt._try:\n        return this.parseTryStatement(node);\n\n      case tt._const:\n      case tt._var:\n        kind = kind || this.state.value;\n        if (context && kind !== \"var\") {\n          this.raise(this.state.start, Errors.UnexpectedLexicalDeclaration);\n        }\n        return this.parseVarStatement(node, kind);\n\n      case tt._while:\n        return this.parseWhileStatement(node);\n      case tt._with:\n        return this.parseWithStatement(node);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (!this.options.allowImportExportEverywhere && !topLevel) {\n          this.raise(this.state.start, Errors.UnexpectedImportExport);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (starttype === tt._import) {\n          result = this.parseImport(node);\n\n          if (\n            result.type === \"ImportDeclaration\" &&\n            (!result.importKind || result.importKind === \"value\")\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        } else {\n          result = this.parseExport(node);\n\n          if (\n            (result.type === \"ExportNamedDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            (result.type === \"ExportAllDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            result.type === \"ExportDefaultDeclaration\"\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        }\n\n        this.assertModuleNodeAllowed(node);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (context) {\n            this.raise(\n              this.state.start,\n              Errors.AsyncFunctionInSingleStatementContext,\n            );\n          }\n          this.next();\n          return this.parseFunctionStatement(node, true, !context);\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      starttype === tt.name &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(node, maybeName, expr, context);\n    } else {\n      return this.parseExpressionStatement(node, expr);\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raiseWithData(\n        node.start,\n        {\n          code: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\",\n        },\n        Errors.ImportOutsideModule,\n      );\n    }\n  }\n\n  takeDecorators(node: N.HasDecorators): void {\n    const decorators = this.state.decoratorStack[\n      this.state.decoratorStack.length - 1\n    ];\n    if (decorators.length) {\n      node.decorators = decorators;\n      this.resetStartLocationFromNode(node, decorators[0]);\n      this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n    }\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(allowExport?: boolean): void {\n    const currentContextDecorators = this.state.decoratorStack[\n      this.state.decoratorStack.length - 1\n    ];\n    while (this.match(tt.at)) {\n      const decorator = this.parseDecorator();\n      currentContextDecorators.push(decorator);\n    }\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (\n        this.hasPlugin(\"decorators\") &&\n        !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n      ) {\n        this.raise(this.state.start, Errors.DecoratorExportClass);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(this.state.start, Errors.UnexpectedLeadingDecorator);\n    }\n  }\n\n  parseDecorator(): N.Decorator {\n    this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n\n    const node = this.startNode();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      // Every time a decorator class expression is evaluated, a new empty array is pushed onto the stack\n      // So that the decorators of any nested class expressions will be dealt with separately\n      this.state.decoratorStack.push([]);\n\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.eat(tt.parenL)) {\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt(startPos, startLoc);\n          node.object = expr;\n          node.property = this.parseIdentifier(true);\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n      }\n\n      node.expression = this.parseMaybeDecoratorArguments(expr);\n      this.state.decoratorStack.pop();\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: N.BreakStatement | N.ContinueStatement,\n    keyword: string,\n  ): N.BreakStatement | N.ContinueStatement {\n    const isBreak = keyword === \"break\";\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, keyword);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: N.BreakStatement | N.ContinueStatement,\n    keyword: string,\n  ) {\n    const isBreak = keyword === \"break\";\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      this.raise(node.start, Errors.IllegalBreakContinue, keyword);\n    }\n  }\n\n  parseDebuggerStatement(node: N.DebuggerStatement): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  parseDoStatement(node: N.DoWhileStatement): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(\"do\"),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(node: N.Node): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = -1;\n    if (this.isAwaitAllowed() && this.eatContextual(\"await\")) {\n      awaitAt = this.state.lastTokStart;\n    }\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node, null);\n    }\n\n    const isLet = this.isLet();\n    if (this.match(tt._var) || this.match(tt._const) || isLet) {\n      const init = this.startNode();\n      const kind = isLet ? \"let\" : this.state.value;\n      this.next();\n      this.parseVar(init, true, kind);\n      this.finishNode(init, \"VariableDeclaration\");\n\n      if (\n        (this.match(tt._in) || this.isContextual(\"of\")) &&\n        init.declarations.length === 1\n      ) {\n        return this.parseForIn(node, init, awaitAt);\n      }\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node, init);\n    }\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    if (this.match(tt._in) || this.isContextual(\"of\")) {\n      this.toAssignable(init);\n      const description = this.isContextual(\"of\")\n        ? \"for-of statement\"\n        : \"for-in statement\";\n      this.checkLVal(init, undefined, undefined, description);\n      return this.parseForIn(node, init, awaitAt);\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node, init);\n  }\n\n  parseFunctionStatement(\n    node: N.FunctionDeclaration,\n    isAsync?: boolean,\n    declarationPosition?: boolean,\n  ): N.FunctionDeclaration {\n    this.next();\n    return this.parseFunction(\n      node,\n      FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT),\n      isAsync,\n    );\n  }\n\n  parseIfStatement(node: N.IfStatement): N.IfStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    node.consequent = this.parseStatement(\"if\");\n    node.alternate = this.eat(tt._else) ? this.parseStatement(\"if\") : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(node: N.ReturnStatement): N.ReturnStatement {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(this.state.start, Errors.IllegalReturn);\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  parseSwitchStatement(node: N.SwitchStatement): N.SwitchStatement {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        cases.push((cur = this.startNode()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              this.state.lastTokStart,\n              Errors.MultipleDefaultsInSwitch,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatement(null));\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(node: N.ThrowStatement): N.ThrowStatement {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.lastTokEnd, Errors.NewlineAfterThrow);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    const simple = param.type === \"Identifier\";\n    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, BIND_LEXICAL, null, \"catch clause\");\n\n    return param;\n  }\n\n  parseTryStatement(node: N.TryStatement): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n      this.scope.exit();\n\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(node.start, Errors.NoCatchOrFinally);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  parseVarStatement(\n    node: N.VariableDeclaration,\n    kind: \"var\" | \"let\" | \"const\",\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  parseWhileStatement(node: N.WhileStatement): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(\"while\"),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(node: N.WithStatement): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(this.state.start, Errors.StrictWith);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(\"with\"),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: N.EmptyStatement): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  parseLabeledStatement(\n    node: N.LabeledStatement,\n    maybeName: string,\n    expr: N.Identifier,\n    context: ?string,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(expr.start, Errors.LabelRedeclaration, maybeName);\n      }\n    }\n\n    const kind = this.state.type.isLoop\n      ? \"loop\"\n      : this.match(tt._switch)\n      ? \"switch\"\n      : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start,\n    });\n    node.body = this.parseStatement(\n      context\n        ? context.indexOf(\"label\") === -1\n          ? context + \"label\"\n          : context\n        : \"label\",\n    );\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: N.ExpressionStatement,\n    expr: N.Expression,\n  ): N.Statement {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    allowDirectives?: boolean = false,\n    createNewLexicalScope?: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode();\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): boolean {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    node: N.BlockStatementLike,\n    allowDirectives: ?boolean,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body = (node.body = []);\n    const directives = (node.directives = []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: ?(N.Directive[]),\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const octalPositions = [];\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      // Track octal literals that occur before a \"use strict\" directive.\n      if (!parsedNonDirective && this.state.octalPositions.length) {\n        octalPositions.push(...this.state.octalPositions);\n      }\n\n      const stmt = this.parseStatement(null, topLevel);\n\n      if (directives && !parsedNonDirective && this.isValidDirective(stmt)) {\n        const directive = this.stmtToDirective(stmt);\n        directives.push(directive);\n\n        if (!hasStrictModeDirective && directive.value.value === \"use strict\") {\n          hasStrictModeDirective = true;\n          this.setStrict(true);\n        }\n\n        continue;\n      }\n\n      parsedNonDirective = true;\n      body.push(stmt);\n    }\n\n    // Throw an error for any octal literals found before a\n    // \"use strict\" directive. Strict mode will be set at parse\n    // time for any literals that occur after the directive.\n    if (this.state.strict && octalPositions.length) {\n      for (const pos of octalPositions) {\n        this.raise(pos, Errors.StrictOctalLiteral);\n      }\n    }\n\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    node: N.ForStatement,\n    init: ?(N.VariableDeclaration | N.Expression),\n  ): N.ForStatement {\n    node.init = init;\n    this.expect(tt.semi);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.expect(tt.semi);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(\"for\"),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    node: N.ForInOf,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt: number,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt > -1) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt > -1;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(\n        init.start,\n        Errors.ForInOfLoopInitializer,\n        isForIn ? \"for-in\" : \"for-of\",\n      );\n    } else if (init.type === \"AssignmentPattern\") {\n      this.raise(init.start, Errors.InvalidLhs, \"for-loop\");\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(\"for\"),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    node: N.VariableDeclaration,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\",\n  ): N.VariableDeclaration {\n    const declarations = (node.declarations = []);\n    const isTypescript = this.hasPlugin(\"typescript\");\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode();\n      this.parseVarId(decl, kind);\n      if (this.eat(tt.eq)) {\n        decl.init = isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n      } else {\n        if (\n          kind === \"const\" &&\n          !(this.match(tt._in) || this.isContextual(\"of\"))\n        ) {\n          // `const` with no initializer is allowed in TypeScript.\n          // It could be a declaration like `const x: number;`.\n          if (!isTypescript) {\n            this.raise(\n              this.state.lastTokEnd,\n              Errors.DeclarationMissingInitializer,\n              \"Const declarations\",\n            );\n          }\n        } else if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(\"of\")))\n        ) {\n          this.raise(\n            this.state.lastTokEnd,\n            Errors.DeclarationMissingInitializer,\n            \"Complex binding patterns\",\n          );\n        }\n        decl.init = null;\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(decl: N.VariableDeclarator, kind: \"var\" | \"let\" | \"const\"): void {\n    decl.id = this.parseBindingAtom();\n    this.checkLVal(\n      decl.id,\n      kind === \"var\" ? BIND_VAR : BIND_LEXICAL,\n      undefined,\n      \"variable declaration\",\n      kind !== \"var\",\n    );\n  }\n\n  // Parse a function declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseFunction<T: N.NormalFunction>(\n    node: T,\n    statement?: number = FUNC_NO_FLAGS,\n    isAsync?: boolean = false,\n  ): T {\n    const isStatement = statement & FUNC_STATEMENT;\n    const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n    const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star) && isHangingStatement) {\n      this.raise(this.state.start, Errors.GeneratorInSingleStatementContext);\n    }\n    node.generator = this.eat(tt.star);\n\n    if (isStatement) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = false;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isStatement) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* allowModifiers */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isStatement && !isHangingStatement) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n\n    return node;\n  }\n\n  parseFunctionId(requireId?: boolean): ?N.Identifier {\n    return requireId || this.match(tt.name) ? this.parseIdentifier() : null;\n  }\n\n  parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n    const oldInParameters = this.state.inParameters;\n    this.state.inParameters = true;\n\n    this.expect(tt.parenL);\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      /* allowEmpty */ false,\n      allowModifiers,\n    );\n\n    this.state.inParameters = oldInParameters;\n    this.checkYieldAwaitInDefaultParams();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BIND_VAR\n          : BIND_LEXICAL\n        : BIND_FUNCTION,\n      node.id.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T: N.Class>(\n    node: T,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next();\n    this.takeDecorators(node);\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed &&\n      !method.static &&\n      (method.key.name === \"constructor\" || // Identifier\n        method.key.value === \"constructor\") // String literal\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    constructorAllowsSuper: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      constructorAllowsSuper,\n      hadConstructor: false,\n      hadStaticBlock: false,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody: N.ClassBody = this.startNode();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withTopicForbiddingContext(() => {\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(this.state.lastTokEnd, Errors.DecoratorSemicolon);\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          member.kind === \"constructor\" &&\n          member.decorators &&\n          member.decorators.length > 0\n        ) {\n          this.raise(member.start, Errors.DecoratorConstructor);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(this.state.start, Errors.TrailingDecorator);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    classBody: N.ClassBody,\n    member: N.ClassMember,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = (member: any);\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = (member: any);\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    return false;\n  }\n\n  parseClassMember(\n    classBody: N.ClassBody,\n    member: N.ClassMember,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(\"static\");\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(\n          classBody,\n          ((member: any): N.StaticBlock),\n          state,\n        );\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    classBody: N.ClassBody,\n    member: N.ClassMember,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod: $FlowSubtype<N.ClassMethod> = member;\n    const privateMethod: $FlowSubtype<N.ClassPrivateMethod> = member;\n    const publicProp: $FlowSubtype<N.ClassMethod> = member;\n    const privateProp: $FlowSubtype<N.ClassPrivateMethod> = member;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      this.parseClassElementName(method);\n\n      if (method.key.type === \"PrivateName\") {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(publicMethod.key.start, Errors.ConstructorIsGenerator);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const containsEsc = this.state.containsEsc;\n    const key = this.parseClassElementName(member);\n    const isPrivate = key.type === \"PrivateName\";\n    // Check the key is not a computed expression or string literal.\n    const isSimple = key.type === \"Identifier\";\n    const maybeQuestionTokenStart = this.state.start;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(key.start, Errors.DuplicateConstructor);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.constructorAllowsSuper;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (\n      isSimple &&\n      key.name === \"async\" &&\n      !containsEsc &&\n      !this.isLineTerminator()\n    ) {\n      // an async method\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStart);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (method.key.type === \"PrivateName\") {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, Errors.ConstructorIsAsync);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      isSimple &&\n      (key.name === \"get\" || key.name === \"set\") &&\n      !containsEsc &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      method.kind = key.name;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      this.parseClassElementName(publicMethod);\n\n      if (method.key.type === \"PrivateName\") {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, Errors.ConstructorIsAccessor);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/proposal-class-fields/#prod-ClassElementName\n  parseClassElementName(member: N.ClassMember): N.Expression | N.Identifier {\n    const key = this.parsePropertyName(member, /* isPrivateNameAllowed */ true);\n\n    if (\n      !member.computed &&\n      member.static &&\n      ((key: $FlowSubtype<N.Identifier>).name === \"prototype\" ||\n        (key: $FlowSubtype<N.StringLiteral>).value === \"prototype\")\n    ) {\n      this.raise(key.start, Errors.StaticPrototype);\n    }\n\n    if (key.type === \"PrivateName\" && key.id.name === \"constructor\") {\n      this.raise(key.start, Errors.ConstructorClassPrivateField);\n    }\n\n    return key;\n  }\n\n  parseClassStaticBlock(\n    classBody: N.ClassBody,\n    member: N.StaticBlock & { decorators?: Array<N.Decorator> },\n    state: N.ParseClassMemberState,\n  ) {\n    this.expectPlugin(\"classStaticBlock\", member.start);\n    // Start a new lexical scope\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(PARAM);\n    const body = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (state.hadStaticBlock) {\n      this.raise(member.start, Errors.DuplicateStaticBlock);\n    }\n    if (member.decorators?.length) {\n      this.raise(member.start, Errors.DecoratorStaticBlock);\n    }\n    state.hadStaticBlock = true;\n  }\n\n  pushClassProperty(classBody: N.ClassBody, prop: N.ClassProperty) {\n    if (\n      !prop.computed &&\n      (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")\n    ) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(prop.key.start, Errors.ConstructorClassField);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    classBody: N.ClassBody,\n    prop: N.ClassPrivateProperty,\n  ) {\n    this.expectPlugin(\"classPrivateProperties\", prop.key.start);\n\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      node.key.id.name,\n      CLASS_ELEMENT_OTHER,\n      node.key.start,\n    );\n  }\n\n  pushClassMethod(\n    classBody: N.ClassBody,\n    method: N.ClassMethod,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    classBody: N.ClassBody,\n    method: N.ClassPrivateMethod,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    this.expectPlugin(\"classPrivateMethods\", method.key.start);\n\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? CLASS_ELEMENT_STATIC_GETTER\n          : CLASS_ELEMENT_INSTANCE_GETTER\n        : node.kind === \"set\"\n        ? node.static\n          ? CLASS_ELEMENT_STATIC_SETTER\n          : CLASS_ELEMENT_INSTANCE_SETTER\n        : CLASS_ELEMENT_OTHER;\n    this.classScope.declarePrivateName(node.key.id.name, kind, node.key.start);\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line no-unused-vars\n    methodOrProp: N.ClassMethod | N.ClassProperty,\n  ): void {}\n\n  parseClassPrivateProperty(\n    node: N.ClassPrivateProperty,\n  ): N.ClassPrivateProperty {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.prodParam.enter(PARAM);\n\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.semicolon();\n    this.prodParam.exit();\n\n    this.scope.exit();\n\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n    if (!node.typeAnnotation) {\n      this.expectPlugin(\"classProperties\");\n    }\n\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.prodParam.enter(PARAM);\n\n    if (this.match(tt.eq)) {\n      this.expectPlugin(\"classProperties\");\n      this.next();\n      node.value = this.parseMaybeAssignAllowIn();\n    } else {\n      node.value = null;\n    }\n    this.semicolon();\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassId(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId: ?boolean,\n    bindingType: BindingTypes = BIND_CLASS,\n  ): void {\n    if (this.match(tt.name)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.checkLVal(node.id, bindingType, undefined, \"class name\");\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        this.unexpected(null, Errors.MissingClassName);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(node: N.Class): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(node: N.Node): N.AnyExport {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      this.parseExportFrom(node, true);\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (\n      (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) ||\n      (hasNamespace && parseAfterNamespace && !hasSpecifiers)\n    ) {\n      throw this.unexpected(null, tt.braceL);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      this.parseExportFrom(node, isFromRequired);\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(node);\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      this.checkExport(node, true, false, !!node.source);\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      // export default ...\n      node.declaration = this.parseExportDefaultExpression();\n      this.checkExport(node, true, true);\n\n      return this.finishNode(node, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, tt.braceL);\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  eatExportStar(node: N.Node): boolean {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n    if (this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n    if (this.isContextual(\"as\")) {\n      if (!node.specifiers) node.specifiers = [];\n\n      const specifier = this.startNodeAt(\n        this.state.lastTokStart,\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(node: N.Node): boolean {\n    if (this.match(tt.braceL)) {\n      if (!node.specifiers) node.specifiers = [];\n      node.specifiers.push(...this.parseExportSpecifiers());\n\n      node.source = null;\n      node.declaration = null;\n\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(node: N.Node): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(\"async\")) return false;\n    const next = this.nextTokenStart();\n    return (\n      !lineBreak.test(this.input.slice(this.state.pos, next)) &&\n      this.isUnparsedContextual(next, \"function\")\n    );\n  }\n\n  parseExportDefaultExpression(): N.Expression | N.Declaration {\n    const expr = this.startNode();\n\n    const isAsync = this.isAsyncFunction();\n\n    if (this.match(tt._function) || isAsync) {\n      this.next();\n      if (isAsync) {\n        this.next();\n      }\n\n      return this.parseFunction(\n        expr,\n        FUNC_STATEMENT | FUNC_NULLABLE_ID,\n        isAsync,\n      );\n    } else if (this.match(tt._class)) {\n      return this.parseClass(expr, true, true);\n    } else if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n      ) {\n        this.raise(this.state.start, Errors.DecoratorBeforeExport);\n      }\n      this.parseDecorators(false);\n      return this.parseClass(expr, true, true);\n    } else if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n      throw this.raise(this.state.start, Errors.UnsupportedDefaultExport);\n    } else {\n      const res = this.parseMaybeAssignAllowIn();\n      this.semicolon();\n      return res;\n    }\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  parseExportDeclaration(node: N.ExportNamedDeclaration): ?N.Declaration {\n    return this.parseStatement(null);\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    if (this.match(tt.name)) {\n      const value = this.state.value;\n      if ((value === \"async\" && !this.state.containsEsc) || value === \"let\") {\n        return false;\n      }\n      if (\n        (value === \"type\" || value === \"interface\") &&\n        !this.state.containsEsc\n      ) {\n        const l = this.lookahead();\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        if (\n          (l.type === tt.name && l.value !== \"from\") ||\n          l.type === tt.braceL\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (this.match(tt.name) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(node: N.ExportNamedDeclaration, expect?: boolean): void {\n    if (this.eatContextual(\"from\")) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n    } else {\n      if (expect) {\n        this.unexpected();\n      } else {\n        node.source = null;\n      }\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    if (this.match(tt.at)) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n          this.unexpected(this.state.start, Errors.DecoratorBeforeExport);\n        } else {\n          return true;\n        }\n      }\n    }\n\n    return (\n      this.state.type.keyword === \"var\" ||\n      this.state.type.keyword === \"const\" ||\n      this.state.type.keyword === \"function\" ||\n      this.state.type.keyword === \"class\" ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: N.ExportNamedDeclaration,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = ((node: any): N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(declaration.start, Errors.ExportDefaultFromAsIdentifier);\n          }\n        }\n      } else if (node.specifiers && node.specifiers.length) {\n        // Named exports\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportedName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportedName);\n          // $FlowIgnore\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type === \"StringLiteral\") {\n              this.raise(\n                specifier.start,\n                Errors.ExportBindingIsString,\n                local.extra.raw,\n                exportedName,\n              );\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.start, true, false);\n              // check if export is defined\n              // $FlowIgnore\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        // Exported declarations\n        if (\n          node.declaration.type === \"FunctionDeclaration\" ||\n          node.declaration.type === \"ClassDeclaration\"\n        ) {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (const declaration of node.declaration.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n\n    const currentContextDecorators = this.state.decoratorStack[\n      this.state.decoratorStack.length - 1\n    ];\n    // If node.declaration is a class, it will take all decorators in the current context.\n    // Thus we should throw if we see non-empty decorators here.\n    if (currentContextDecorators.length) {\n      throw this.raise(node.start, Errors.UnsupportedDecoratorExport);\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node:\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier,\n    name: string,\n  ): void {\n    if (this.state.exportedIdentifiers.indexOf(name) > -1) {\n      this.raise(\n        node.start,\n        name === \"default\"\n          ? Errors.DuplicateDefaultExport\n          : Errors.DuplicateExport,\n        name,\n      );\n    }\n    this.state.exportedIdentifiers.push(name);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const node = this.startNode();\n      node.local = this.parseModuleExportName();\n      node.exported = this.eatContextual(\"as\")\n        ? this.parseModuleExportName()\n        : node.local.__clone();\n      nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n    }\n\n    return nodes;\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      this.expectPlugin(\"moduleStringNames\");\n      const result = this.parseLiteral<N.StringLiteral>(\n        this.state.value,\n        \"StringLiteral\",\n      );\n      const surrogate = result.value.match(loneSurrogate);\n      if (surrogate) {\n        this.raise(\n          result.start,\n          Errors.ModuleExportNameHasLoneSurrogate,\n          surrogate[0].charCodeAt(0).toString(16),\n        );\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(node: N.Node): N.AnyImport {\n    // import '...'\n    node.specifiers = [];\n    if (!this.match(tt.string)) {\n      // check if we have a default import like\n      // import React from \"react\";\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      /* we are checking if we do not have a default import, then it is obvious that we need named imports\n       * import { get } from \"axios\";\n       * but if we do have a default import\n       * we need to check if we have a comma after that and\n       * that is where this `|| this.eat` condition comes into play\n       */\n      const parseNext = !hasDefault || this.eat(tt.comma);\n      // if we do have to parse the next set of specifiers, we first check for star imports\n      // import React, * from \"react\";\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      // now we check if we need to parse the next imports\n      // but only if they are not importing * (everything)\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(\"from\");\n    }\n    node.source = this.parseImportSource();\n    // https://github.com/tc39/proposal-import-assertions\n    // parse module import assertions if the next token is `assert` or ignore\n    // and finish the ImportDeclaration node.\n    const assertions = this.maybeParseImportAssertions();\n    if (assertions) {\n      node.assertions = assertions;\n    }\n    // todo(Babel 8): remove module attributes support\n    else {\n      const attributes = this.maybeParseModuleAttributes();\n      if (attributes) {\n        node.attributes = attributes;\n      }\n    }\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom();\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n    return this.match(tt.name);\n  }\n\n  parseImportSpecifierLocal(\n    node: N.ImportDeclaration,\n    specifier: N.Node,\n    type: string,\n    contextDescription: string,\n  ): void {\n    specifier.local = this.parseIdentifier();\n    this.checkLVal(\n      specifier.local,\n      BIND_LEXICAL,\n      undefined,\n      contextDescription,\n    );\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  parseAssertEntries() {\n    this.expectPlugin(\"importAssertions\");\n\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      let assertionKeyNode;\n      if (this.match(tt.string)) {\n        assertionKeyNode = this.parseLiteral(this.state.value, \"StringLiteral\");\n      } else {\n        assertionKeyNode = this.parseIdentifier(true);\n      }\n      this.next();\n      node.key = assertionKeyNode;\n\n      // for now we are only allowing `type` as the only allowed module attribute\n      if (node.key.name !== \"type\") {\n        this.raise(\n          node.key.start,\n          Errors.ModuleAttributeDifferentFromType,\n          node.key.name,\n        );\n      }\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(node.key.name)) {\n        this.raise(\n          node.key.start,\n          Errors.ModuleAttributesWithDuplicateKeys,\n          node.key.name,\n        );\n      }\n      attrNames.add(node.key.name);\n\n      if (!this.match(tt.string)) {\n        throw this.unexpected(\n          this.state.start,\n          Errors.ModuleAttributeInvalidValue,\n        );\n      }\n      node.value = this.parseLiteral(this.state.value, \"StringLiteral\");\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   * @returns\n   * @memberof StatementParser\n   */\n  maybeParseModuleAttributes() {\n    if (this.match(tt._with) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n    const attrs = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(\n          node.key.start,\n          Errors.ModuleAttributeDifferentFromType,\n          node.key.name,\n        );\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(\n          node.key.start,\n          Errors.ModuleAttributesWithDuplicateKeys,\n          node.key.name,\n        );\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.unexpected(\n          this.state.start,\n          Errors.ModuleAttributeInvalidValue,\n        );\n      }\n      node.value = this.parseLiteral(this.state.value, \"StringLiteral\");\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAssertions() {\n    if (\n      this.match(tt.name) &&\n      this.state.value === \"assert\" &&\n      !this.hasPrecedingLineBreak()\n    ) {\n      this.expectPlugin(\"importAssertions\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n\n    this.eat(tt.braceL);\n    const attrs = this.parseAssertEntries();\n    this.eat(tt.braceR);\n\n    return attrs;\n  }\n\n  maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n    if (this.shouldParseDefaultImport(node)) {\n      // import defaultObj, { x, y as z } from '...'\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode(),\n        \"ImportDefaultSpecifier\",\n        \"default import specifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: N.ImportDeclaration): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode();\n      this.next();\n      this.expectContextual(\"as\");\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n        \"import namespace specifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: N.ImportDeclaration) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(this.state.start, Errors.DestructureNamedImport);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      this.parseImportSpecifier(node);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(node: N.ImportDeclaration): void {\n    const specifier = this.startNode();\n    specifier.imported = this.parseModuleExportName();\n    if (this.eatContextual(\"as\")) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (imported.type === \"StringLiteral\") {\n        throw this.raise(\n          specifier.start,\n          Errors.ImportBindingIsString,\n          imported.value,\n        );\n      }\n      this.checkReservedWord(imported.name, specifier.start, true, true);\n      specifier.local = imported.__clone();\n    }\n    this.checkLVal(\n      specifier.local,\n      BIND_LEXICAL,\n      undefined,\n      \"import specifier\",\n    );\n    node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n  }\n}\n", "// @flow\n\nimport {\n  CLASS_ELEMENT_KIND_ACCESSOR,\n  CLASS_ELEMENT_FLAG_STATIC,\n  type ClassElementTypes,\n} from \"./scopeflags\";\nimport { Errors } from \"../parser/error\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementTypes> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, number> = new Map();\n}\n\ntype raiseFunction = (number, string, ...any) => void;\n\nexport default class ClassScopeHandler {\n  stack: Array<ClassScope> = [];\n  raise: raiseFunction;\n  undefinedPrivateNames: Map<string, number> = new Map();\n\n  constructor(raise: raiseFunction) {\n    this.raise = raise;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, pos);\n        }\n      } else {\n        this.raise(pos, Errors.InvalidPrivateFieldResolution, name);\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementTypes,\n    pos: number,\n  ) {\n    const classScope = this.current();\n    let redefined = classScope.privateNames.has(name);\n\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && classScope.loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) classScope.loneAccessors.delete(name);\n      } else if (!redefined) {\n        classScope.loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.raise(pos, Errors.PrivateNameRedeclaration, name);\n    }\n\n    classScope.privateNames.add(name);\n    classScope.undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, pos: number) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, pos);\n    } else {\n      // top-level\n      this.raise(pos, Errors.InvalidPrivateFieldResolution, name);\n    }\n  }\n}\n", "// @flow\n\nimport type { Options } from \"../options\";\nimport type { File /*::, JSXOpeningElement */ } from \"../types\";\nimport type { PluginList } from \"../plugin-utils\";\nimport { getOptions } from \"../options\";\nimport StatementParser from \"./statement\";\nimport { SCOPE_PROGRAM } from \"../util/scopeflags\";\nimport ScopeHandler from \"../util/scope\";\nimport ClassScopeHandler from \"../util/class-scope\";\nimport ProductionParameterHandler, {\n  PARAM_AWAIT,\n  PARAM,\n} from \"../util/production-parameter\";\n\nexport type PluginsMap = Map<string, { [string]: any }>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  /*::\n  +jsxParseOpeningElementAfterName: (\n    node: JSXOpeningElement,\n  ) => JSXOpeningElement;\n  */\n\n  constructor(options: ?Options, input: string) {\n    options = getOptions(options);\n    super(options, input);\n\n    const ScopeHandler = this.getScopeHandler();\n\n    this.options = options;\n    this.inModule = this.options.sourceType === \"module\";\n    this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n    this.prodParam = new ProductionParameterHandler();\n    this.classScope = new ClassScopeHandler(this.raise.bind(this));\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): Class<ScopeHandler<*>> {\n    return ScopeHandler;\n  }\n\n  parse(): File {\n    let paramFlags = PARAM;\n    if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n    const file = this.startNode();\n    const program = this.startNode();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n}\n\nfunction pluginsMap(plugins: PluginList): PluginsMap {\n  const pluginMap: PluginsMap = new Map();\n  for (const plugin of plugins) {\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n  return pluginMap;\n}\n", "// @flow\n\nimport { type Options } from \"./options\";\nimport {\n  hasPlugin,\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n  type PluginList,\n} from \"./plugin-utils\";\nimport Parser from \"./parser\";\n\nimport { types as tokTypes } from \"./tokenizer/types\";\nimport \"./tokenizer/context\";\n\nimport type { Expression, File } from \"./types\";\n\nexport function parse(input: string, options?: Options): File {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression();\n}\n\nexport { tokTypes };\n\nfunction getParser(options: ?Options, input: string): Parser {\n  let cls = Parser;\n  if (options?.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n\n  return new cls(options, input);\n}\n\nconst parserClassCache: { [key: string]: Class<Parser> } = {};\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(pluginsFromOptions: PluginList): Class<Parser> {\n  const pluginList = mixinPluginNames.filter(name =>\n    hasPlugin(pluginsFromOptions, name),\n  );\n\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache[key] = cls;\n  }\n  return cls;\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = shallowEqual;\n\nfunction shallowEqual(actual, expected) {\n  const keys = Object.keys(expected);\n\n  for (const key of keys) {\n    if (actual[key] !== expected[key]) {\n      return false;\n    }\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isArrayExpression = isArrayExpression;\nexports.isAssignmentExpression = isAssignmentExpression;\nexports.isBinaryExpression = isBinaryExpression;\nexports.isInterpreterDirective = isInterpreterDirective;\nexports.isDirective = isDirective;\nexports.isDirectiveLiteral = isDirectiveLiteral;\nexports.isBlockStatement = isBlockStatement;\nexports.isBreakStatement = isBreakStatement;\nexports.isCallExpression = isCallExpression;\nexports.isCatchClause = isCatchClause;\nexports.isConditionalExpression = isConditionalExpression;\nexports.isContinueStatement = isContinueStatement;\nexports.isDebuggerStatement = isDebuggerStatement;\nexports.isDoWhileStatement = isDoWhileStatement;\nexports.isEmptyStatement = isEmptyStatement;\nexports.isExpressionStatement = isExpressionStatement;\nexports.isFile = isFile;\nexports.isForInStatement = isForInStatement;\nexports.isForStatement = isForStatement;\nexports.isFunctionDeclaration = isFunctionDeclaration;\nexports.isFunctionExpression = isFunctionExpression;\nexports.isIdentifier = isIdentifier;\nexports.isIfStatement = isIfStatement;\nexports.isLabeledStatement = isLabeledStatement;\nexports.isStringLiteral = isStringLiteral;\nexports.isNumericLiteral = isNumericLiteral;\nexports.isNullLiteral = isNullLiteral;\nexports.isBooleanLiteral = isBooleanLiteral;\nexports.isRegExpLiteral = isRegExpLiteral;\nexports.isLogicalExpression = isLogicalExpression;\nexports.isMemberExpression = isMemberExpression;\nexports.isNewExpression = isNewExpression;\nexports.isProgram = isProgram;\nexports.isObjectExpression = isObjectExpression;\nexports.isObjectMethod = isObjectMethod;\nexports.isObjectProperty = isObjectProperty;\nexports.isRestElement = isRestElement;\nexports.isReturnStatement = isReturnStatement;\nexports.isSequenceExpression = isSequenceExpression;\nexports.isParenthesizedExpression = isParenthesizedExpression;\nexports.isSwitchCase = isSwitchCase;\nexports.isSwitchStatement = isSwitchStatement;\nexports.isThisExpression = isThisExpression;\nexports.isThrowStatement = isThrowStatement;\nexports.isTryStatement = isTryStatement;\nexports.isUnaryExpression = isUnaryExpression;\nexports.isUpdateExpression = isUpdateExpression;\nexports.isVariableDeclaration = isVariableDeclaration;\nexports.isVariableDeclarator = isVariableDeclarator;\nexports.isWhileStatement = isWhileStatement;\nexports.isWithStatement = isWithStatement;\nexports.isAssignmentPattern = isAssignmentPattern;\nexports.isArrayPattern = isArrayPattern;\nexports.isArrowFunctionExpression = isArrowFunctionExpression;\nexports.isClassBody = isClassBody;\nexports.isClassExpression = isClassExpression;\nexports.isClassDeclaration = isClassDeclaration;\nexports.isExportAllDeclaration = isExportAllDeclaration;\nexports.isExportDefaultDeclaration = isExportDefaultDeclaration;\nexports.isExportNamedDeclaration = isExportNamedDeclaration;\nexports.isExportSpecifier = isExportSpecifier;\nexports.isForOfStatement = isForOfStatement;\nexports.isImportDeclaration = isImportDeclaration;\nexports.isImportDefaultSpecifier = isImportDefaultSpecifier;\nexports.isImportNamespaceSpecifier = isImportNamespaceSpecifier;\nexports.isImportSpecifier = isImportSpecifier;\nexports.isMetaProperty = isMetaProperty;\nexports.isClassMethod = isClassMethod;\nexports.isObjectPattern = isObjectPattern;\nexports.isSpreadElement = isSpreadElement;\nexports.isSuper = isSuper;\nexports.isTaggedTemplateExpression = isTaggedTemplateExpression;\nexports.isTemplateElement = isTemplateElement;\nexports.isTemplateLiteral = isTemplateLiteral;\nexports.isYieldExpression = isYieldExpression;\nexports.isAwaitExpression = isAwaitExpression;\nexports.isImport = isImport;\nexports.isBigIntLiteral = isBigIntLiteral;\nexports.isExportNamespaceSpecifier = isExportNamespaceSpecifier;\nexports.isOptionalMemberExpression = isOptionalMemberExpression;\nexports.isOptionalCallExpression = isOptionalCallExpression;\nexports.isAnyTypeAnnotation = isAnyTypeAnnotation;\nexports.isArrayTypeAnnotation = isArrayTypeAnnotation;\nexports.isBooleanTypeAnnotation = isBooleanTypeAnnotation;\nexports.isBooleanLiteralTypeAnnotation = isBooleanLiteralTypeAnnotation;\nexports.isNullLiteralTypeAnnotation = isNullLiteralTypeAnnotation;\nexports.isClassImplements = isClassImplements;\nexports.isDeclareClass = isDeclareClass;\nexports.isDeclareFunction = isDeclareFunction;\nexports.isDeclareInterface = isDeclareInterface;\nexports.isDeclareModule = isDeclareModule;\nexports.isDeclareModuleExports = isDeclareModuleExports;\nexports.isDeclareTypeAlias = isDeclareTypeAlias;\nexports.isDeclareOpaqueType = isDeclareOpaqueType;\nexports.isDeclareVariable = isDeclareVariable;\nexports.isDeclareExportDeclaration = isDeclareExportDeclaration;\nexports.isDeclareExportAllDeclaration = isDeclareExportAllDeclaration;\nexports.isDeclaredPredicate = isDeclaredPredicate;\nexports.isExistsTypeAnnotation = isExistsTypeAnnotation;\nexports.isFunctionTypeAnnotation = isFunctionTypeAnnotation;\nexports.isFunctionTypeParam = isFunctionTypeParam;\nexports.isGenericTypeAnnotation = isGenericTypeAnnotation;\nexports.isInferredPredicate = isInferredPredicate;\nexports.isInterfaceExtends = isInterfaceExtends;\nexports.isInterfaceDeclaration = isInterfaceDeclaration;\nexports.isInterfaceTypeAnnotation = isInterfaceTypeAnnotation;\nexports.isIntersectionTypeAnnotation = isIntersectionTypeAnnotation;\nexports.isMixedTypeAnnotation = isMixedTypeAnnotation;\nexports.isEmptyTypeAnnotation = isEmptyTypeAnnotation;\nexports.isNullableTypeAnnotation = isNullableTypeAnnotation;\nexports.isNumberLiteralTypeAnnotation = isNumberLiteralTypeAnnotation;\nexports.isNumberTypeAnnotation = isNumberTypeAnnotation;\nexports.isObjectTypeAnnotation = isObjectTypeAnnotation;\nexports.isObjectTypeInternalSlot = isObjectTypeInternalSlot;\nexports.isObjectTypeCallProperty = isObjectTypeCallProperty;\nexports.isObjectTypeIndexer = isObjectTypeIndexer;\nexports.isObjectTypeProperty = isObjectTypeProperty;\nexports.isObjectTypeSpreadProperty = isObjectTypeSpreadProperty;\nexports.isOpaqueType = isOpaqueType;\nexports.isQualifiedTypeIdentifier = isQualifiedTypeIdentifier;\nexports.isStringLiteralTypeAnnotation = isStringLiteralTypeAnnotation;\nexports.isStringTypeAnnotation = isStringTypeAnnotation;\nexports.isSymbolTypeAnnotation = isSymbolTypeAnnotation;\nexports.isThisTypeAnnotation = isThisTypeAnnotation;\nexports.isTupleTypeAnnotation = isTupleTypeAnnotation;\nexports.isTypeofTypeAnnotation = isTypeofTypeAnnotation;\nexports.isTypeAlias = isTypeAlias;\nexports.isTypeAnnotation = isTypeAnnotation;\nexports.isTypeCastExpression = isTypeCastExpression;\nexports.isTypeParameter = isTypeParameter;\nexports.isTypeParameterDeclaration = isTypeParameterDeclaration;\nexports.isTypeParameterInstantiation = isTypeParameterInstantiation;\nexports.isUnionTypeAnnotation = isUnionTypeAnnotation;\nexports.isVariance = isVariance;\nexports.isVoidTypeAnnotation = isVoidTypeAnnotation;\nexports.isEnumDeclaration = isEnumDeclaration;\nexports.isEnumBooleanBody = isEnumBooleanBody;\nexports.isEnumNumberBody = isEnumNumberBody;\nexports.isEnumStringBody = isEnumStringBody;\nexports.isEnumSymbolBody = isEnumSymbolBody;\nexports.isEnumBooleanMember = isEnumBooleanMember;\nexports.isEnumNumberMember = isEnumNumberMember;\nexports.isEnumStringMember = isEnumStringMember;\nexports.isEnumDefaultedMember = isEnumDefaultedMember;\nexports.isJSXAttribute = isJSXAttribute;\nexports.isJSXClosingElement = isJSXClosingElement;\nexports.isJSXElement = isJSXElement;\nexports.isJSXEmptyExpression = isJSXEmptyExpression;\nexports.isJSXExpressionContainer = isJSXExpressionContainer;\nexports.isJSXSpreadChild = isJSXSpreadChild;\nexports.isJSXIdentifier = isJSXIdentifier;\nexports.isJSXMemberExpression = isJSXMemberExpression;\nexports.isJSXNamespacedName = isJSXNamespacedName;\nexports.isJSXOpeningElement = isJSXOpeningElement;\nexports.isJSXSpreadAttribute = isJSXSpreadAttribute;\nexports.isJSXText = isJSXText;\nexports.isJSXFragment = isJSXFragment;\nexports.isJSXOpeningFragment = isJSXOpeningFragment;\nexports.isJSXClosingFragment = isJSXClosingFragment;\nexports.isNoop = isNoop;\nexports.isPlaceholder = isPlaceholder;\nexports.isV8IntrinsicIdentifier = isV8IntrinsicIdentifier;\nexports.isArgumentPlaceholder = isArgumentPlaceholder;\nexports.isBindExpression = isBindExpression;\nexports.isClassProperty = isClassProperty;\nexports.isPipelineTopicExpression = isPipelineTopicExpression;\nexports.isPipelineBareFunction = isPipelineBareFunction;\nexports.isPipelinePrimaryTopicReference = isPipelinePrimaryTopicReference;\nexports.isClassPrivateProperty = isClassPrivateProperty;\nexports.isClassPrivateMethod = isClassPrivateMethod;\nexports.isImportAttribute = isImportAttribute;\nexports.isDecorator = isDecorator;\nexports.isDoExpression = isDoExpression;\nexports.isExportDefaultSpecifier = isExportDefaultSpecifier;\nexports.isPrivateName = isPrivateName;\nexports.isRecordExpression = isRecordExpression;\nexports.isTupleExpression = isTupleExpression;\nexports.isDecimalLiteral = isDecimalLiteral;\nexports.isStaticBlock = isStaticBlock;\nexports.isTSParameterProperty = isTSParameterProperty;\nexports.isTSDeclareFunction = isTSDeclareFunction;\nexports.isTSDeclareMethod = isTSDeclareMethod;\nexports.isTSQualifiedName = isTSQualifiedName;\nexports.isTSCallSignatureDeclaration = isTSCallSignatureDeclaration;\nexports.isTSConstructSignatureDeclaration = isTSConstructSignatureDeclaration;\nexports.isTSPropertySignature = isTSPropertySignature;\nexports.isTSMethodSignature = isTSMethodSignature;\nexports.isTSIndexSignature = isTSIndexSignature;\nexports.isTSAnyKeyword = isTSAnyKeyword;\nexports.isTSBooleanKeyword = isTSBooleanKeyword;\nexports.isTSBigIntKeyword = isTSBigIntKeyword;\nexports.isTSIntrinsicKeyword = isTSIntrinsicKeyword;\nexports.isTSNeverKeyword = isTSNeverKeyword;\nexports.isTSNullKeyword = isTSNullKeyword;\nexports.isTSNumberKeyword = isTSNumberKeyword;\nexports.isTSObjectKeyword = isTSObjectKeyword;\nexports.isTSStringKeyword = isTSStringKeyword;\nexports.isTSSymbolKeyword = isTSSymbolKeyword;\nexports.isTSUndefinedKeyword = isTSUndefinedKeyword;\nexports.isTSUnknownKeyword = isTSUnknownKeyword;\nexports.isTSVoidKeyword = isTSVoidKeyword;\nexports.isTSThisType = isTSThisType;\nexports.isTSFunctionType = isTSFunctionType;\nexports.isTSConstructorType = isTSConstructorType;\nexports.isTSTypeReference = isTSTypeReference;\nexports.isTSTypePredicate = isTSTypePredicate;\nexports.isTSTypeQuery = isTSTypeQuery;\nexports.isTSTypeLiteral = isTSTypeLiteral;\nexports.isTSArrayType = isTSArrayType;\nexports.isTSTupleType = isTSTupleType;\nexports.isTSOptionalType = isTSOptionalType;\nexports.isTSRestType = isTSRestType;\nexports.isTSNamedTupleMember = isTSNamedTupleMember;\nexports.isTSUnionType = isTSUnionType;\nexports.isTSIntersectionType = isTSIntersectionType;\nexports.isTSConditionalType = isTSConditionalType;\nexports.isTSInferType = isTSInferType;\nexports.isTSParenthesizedType = isTSParenthesizedType;\nexports.isTSTypeOperator = isTSTypeOperator;\nexports.isTSIndexedAccessType = isTSIndexedAccessType;\nexports.isTSMappedType = isTSMappedType;\nexports.isTSLiteralType = isTSLiteralType;\nexports.isTSExpressionWithTypeArguments = isTSExpressionWithTypeArguments;\nexports.isTSInterfaceDeclaration = isTSInterfaceDeclaration;\nexports.isTSInterfaceBody = isTSInterfaceBody;\nexports.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration;\nexports.isTSAsExpression = isTSAsExpression;\nexports.isTSTypeAssertion = isTSTypeAssertion;\nexports.isTSEnumDeclaration = isTSEnumDeclaration;\nexports.isTSEnumMember = isTSEnumMember;\nexports.isTSModuleDeclaration = isTSModuleDeclaration;\nexports.isTSModuleBlock = isTSModuleBlock;\nexports.isTSImportType = isTSImportType;\nexports.isTSImportEqualsDeclaration = isTSImportEqualsDeclaration;\nexports.isTSExternalModuleReference = isTSExternalModuleReference;\nexports.isTSNonNullExpression = isTSNonNullExpression;\nexports.isTSExportAssignment = isTSExportAssignment;\nexports.isTSNamespaceExportDeclaration = isTSNamespaceExportDeclaration;\nexports.isTSTypeAnnotation = isTSTypeAnnotation;\nexports.isTSTypeParameterInstantiation = isTSTypeParameterInstantiation;\nexports.isTSTypeParameterDeclaration = isTSTypeParameterDeclaration;\nexports.isTSTypeParameter = isTSTypeParameter;\nexports.isExpression = isExpression;\nexports.isBinary = isBinary;\nexports.isScopable = isScopable;\nexports.isBlockParent = isBlockParent;\nexports.isBlock = isBlock;\nexports.isStatement = isStatement;\nexports.isTerminatorless = isTerminatorless;\nexports.isCompletionStatement = isCompletionStatement;\nexports.isConditional = isConditional;\nexports.isLoop = isLoop;\nexports.isWhile = isWhile;\nexports.isExpressionWrapper = isExpressionWrapper;\nexports.isFor = isFor;\nexports.isForXStatement = isForXStatement;\nexports.isFunction = isFunction;\nexports.isFunctionParent = isFunctionParent;\nexports.isPureish = isPureish;\nexports.isDeclaration = isDeclaration;\nexports.isPatternLike = isPatternLike;\nexports.isLVal = isLVal;\nexports.isTSEntityName = isTSEntityName;\nexports.isLiteral = isLiteral;\nexports.isImmutable = isImmutable;\nexports.isUserWhitespacable = isUserWhitespacable;\nexports.isMethod = isMethod;\nexports.isObjectMember = isObjectMember;\nexports.isProperty = isProperty;\nexports.isUnaryLike = isUnaryLike;\nexports.isPattern = isPattern;\nexports.isClass = isClass;\nexports.isModuleDeclaration = isModuleDeclaration;\nexports.isExportDeclaration = isExportDeclaration;\nexports.isModuleSpecifier = isModuleSpecifier;\nexports.isFlow = isFlow;\nexports.isFlowType = isFlowType;\nexports.isFlowBaseAnnotation = isFlowBaseAnnotation;\nexports.isFlowDeclaration = isFlowDeclaration;\nexports.isFlowPredicate = isFlowPredicate;\nexports.isEnumBody = isEnumBody;\nexports.isEnumMember = isEnumMember;\nexports.isJSX = isJSX;\nexports.isPrivate = isPrivate;\nexports.isTSTypeElement = isTSTypeElement;\nexports.isTSType = isTSType;\nexports.isTSBaseType = isTSBaseType;\nexports.isNumberLiteral = isNumberLiteral;\nexports.isRegexLiteral = isRegexLiteral;\nexports.isRestProperty = isRestProperty;\nexports.isSpreadProperty = isSpreadProperty;\n\nvar _shallowEqual = _interopRequireDefault(require(\"../../utils/shallowEqual\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isArrayExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrayExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAssignmentExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AssignmentExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBinaryExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BinaryExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterpreterDirective(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterpreterDirective\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDirective(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Directive\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDirectiveLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DirectiveLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBlockStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BlockStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBreakStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BreakStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isCallExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"CallExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isCatchClause(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"CatchClause\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isConditionalExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ConditionalExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isContinueStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ContinueStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDebuggerStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DebuggerStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDoWhileStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DoWhileStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEmptyStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EmptyStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExpressionStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExpressionStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFile(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"File\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForInStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForInStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Identifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isIfStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"IfStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLabeledStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"LabeledStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStringLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StringLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumericLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumericLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNullLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NullLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBooleanLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BooleanLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRegExpLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RegExpLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLogicalExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"LogicalExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMemberExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"MemberExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNewExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NewExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isProgram(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Program\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRestElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RestElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isReturnStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ReturnStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSequenceExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SequenceExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isParenthesizedExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ParenthesizedExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSwitchCase(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SwitchCase\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSwitchStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SwitchStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isThisExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ThisExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isThrowStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ThrowStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTryStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TryStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUnaryExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UnaryExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUpdateExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UpdateExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVariableDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"VariableDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVariableDeclarator(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"VariableDeclarator\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isWhileStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"WhileStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isWithStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"WithStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAssignmentPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AssignmentPattern\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArrayPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrayPattern\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArrowFunctionExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrowFunctionExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportAllDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportAllDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportDefaultDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportDefaultDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportNamedDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportNamedDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForOfStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForOfStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportDefaultSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportDefaultSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportNamespaceSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportNamespaceSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMetaProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"MetaProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectPattern\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSpreadElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SpreadElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSuper(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Super\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTaggedTemplateExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TaggedTemplateExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTemplateElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TemplateElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTemplateLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TemplateLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isYieldExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"YieldExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAwaitExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AwaitExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImport(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Import\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBigIntLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BigIntLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportNamespaceSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportNamespaceSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isOptionalMemberExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"OptionalMemberExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isOptionalCallExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"OptionalCallExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAnyTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AnyTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArrayTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrayTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBooleanTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BooleanTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBooleanLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BooleanLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNullLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NullLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassImplements(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassImplements\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareClass(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareClass\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareFunction\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareInterface(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareInterface\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareModule(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareModule\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareModuleExports(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareModuleExports\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareTypeAlias(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareTypeAlias\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareOpaqueType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareOpaqueType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareVariable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareVariable\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareExportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareExportDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareExportAllDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareExportAllDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclaredPredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclaredPredicate\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExistsTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExistsTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionTypeParam(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionTypeParam\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isGenericTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"GenericTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInferredPredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InferredPredicate\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterfaceExtends(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterfaceExtends\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterfaceDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterfaceDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterfaceTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterfaceTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isIntersectionTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"IntersectionTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMixedTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"MixedTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEmptyTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EmptyTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNullableTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NullableTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumberLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumberLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumberTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumberTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeInternalSlot(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeInternalSlot\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeCallProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeCallProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeIndexer(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeIndexer\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeSpreadProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeSpreadProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isOpaqueType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"OpaqueType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isQualifiedTypeIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"QualifiedTypeIdentifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStringLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StringLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStringTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StringTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSymbolTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SymbolTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isThisTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ThisTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTupleTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TupleTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeofTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeofTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeAlias(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeAlias\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeCastExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeCastExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeParameter(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeParameter\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeParameterDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeParameterDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeParameterInstantiation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeParameterInstantiation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUnionTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UnionTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVariance(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Variance\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVoidTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"VoidTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumBooleanBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumBooleanBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumNumberBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumNumberBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumStringBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumStringBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumSymbolBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumSymbolBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumBooleanMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumBooleanMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumNumberMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumNumberMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumStringMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumStringMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumDefaultedMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumDefaultedMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXAttribute(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXAttribute\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXClosingElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXClosingElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXEmptyExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXEmptyExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXExpressionContainer(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXExpressionContainer\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXSpreadChild(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXSpreadChild\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXIdentifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXMemberExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXMemberExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXNamespacedName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXNamespacedName\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXOpeningElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXOpeningElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXSpreadAttribute(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXSpreadAttribute\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXText(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXText\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXFragment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXFragment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXOpeningFragment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXOpeningFragment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXClosingFragment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXClosingFragment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNoop(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Noop\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPlaceholder(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Placeholder\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isV8IntrinsicIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"V8IntrinsicIdentifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArgumentPlaceholder(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArgumentPlaceholder\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBindExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BindExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPipelineTopicExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PipelineTopicExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPipelineBareFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PipelineBareFunction\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPipelinePrimaryTopicReference(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PipelinePrimaryTopicReference\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassPrivateProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassPrivateProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassPrivateMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassPrivateMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportAttribute(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportAttribute\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDecorator(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Decorator\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDoExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DoExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportDefaultSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportDefaultSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPrivateName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PrivateName\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRecordExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RecordExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTupleExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TupleExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDecimalLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DecimalLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStaticBlock(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StaticBlock\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSParameterProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSParameterProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSDeclareFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSDeclareFunction\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSDeclareMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSDeclareMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSQualifiedName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSQualifiedName\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSCallSignatureDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSCallSignatureDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSConstructSignatureDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSConstructSignatureDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSPropertySignature(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSPropertySignature\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSMethodSignature(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSMethodSignature\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIndexSignature(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIndexSignature\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSAnyKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSAnyKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSBooleanKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSBooleanKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSBigIntKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSBigIntKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIntrinsicKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIntrinsicKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNeverKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNeverKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNullKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNullKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNumberKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNumberKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSObjectKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSObjectKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSStringKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSStringKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSSymbolKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSSymbolKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSUndefinedKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSUndefinedKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSUnknownKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSUnknownKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSVoidKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSVoidKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSThisType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSThisType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSFunctionType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSFunctionType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSConstructorType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSConstructorType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeReference(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeReference\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypePredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypePredicate\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeQuery(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeQuery\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSArrayType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSArrayType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTupleType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTupleType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSOptionalType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSOptionalType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSRestType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSRestType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNamedTupleMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNamedTupleMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSUnionType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSUnionType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIntersectionType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIntersectionType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSConditionalType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSConditionalType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSInferType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSInferType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSParenthesizedType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSParenthesizedType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeOperator(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeOperator\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIndexedAccessType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIndexedAccessType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSMappedType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSMappedType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSLiteralType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSLiteralType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSExpressionWithTypeArguments(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSExpressionWithTypeArguments\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSInterfaceDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSInterfaceDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSInterfaceBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSInterfaceBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeAliasDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeAliasDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSAsExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSAsExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeAssertion(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeAssertion\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSEnumDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSEnumDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSEnumMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSEnumMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSModuleDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSModuleDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSModuleBlock(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSModuleBlock\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSImportType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSImportType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSImportEqualsDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSImportEqualsDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSExternalModuleReference(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSExternalModuleReference\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNonNullExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNonNullExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSExportAssignment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSExportAssignment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNamespaceExportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNamespaceExportDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeParameterInstantiation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeParameterInstantiation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeParameterDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeParameterDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeParameter(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeParameter\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Expression\" || \"ArrayExpression\" === nodeType || \"AssignmentExpression\" === nodeType || \"BinaryExpression\" === nodeType || \"CallExpression\" === nodeType || \"ConditionalExpression\" === nodeType || \"FunctionExpression\" === nodeType || \"Identifier\" === nodeType || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"LogicalExpression\" === nodeType || \"MemberExpression\" === nodeType || \"NewExpression\" === nodeType || \"ObjectExpression\" === nodeType || \"SequenceExpression\" === nodeType || \"ParenthesizedExpression\" === nodeType || \"ThisExpression\" === nodeType || \"UnaryExpression\" === nodeType || \"UpdateExpression\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassExpression\" === nodeType || \"MetaProperty\" === nodeType || \"Super\" === nodeType || \"TaggedTemplateExpression\" === nodeType || \"TemplateLiteral\" === nodeType || \"YieldExpression\" === nodeType || \"AwaitExpression\" === nodeType || \"Import\" === nodeType || \"BigIntLiteral\" === nodeType || \"OptionalMemberExpression\" === nodeType || \"OptionalCallExpression\" === nodeType || \"TypeCastExpression\" === nodeType || \"JSXElement\" === nodeType || \"JSXFragment\" === nodeType || \"BindExpression\" === nodeType || \"PipelinePrimaryTopicReference\" === nodeType || \"DoExpression\" === nodeType || \"RecordExpression\" === nodeType || \"TupleExpression\" === nodeType || \"DecimalLiteral\" === nodeType || \"TSAsExpression\" === nodeType || \"TSTypeAssertion\" === nodeType || \"TSNonNullExpression\" === nodeType || nodeType === \"Placeholder\" && (\"Expression\" === node.expectedNode || \"Identifier\" === node.expectedNode || \"StringLiteral\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBinary(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Binary\" || \"BinaryExpression\" === nodeType || \"LogicalExpression\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isScopable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Scopable\" || \"BlockStatement\" === nodeType || \"CatchClause\" === nodeType || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"Program\" === nodeType || \"ObjectMethod\" === nodeType || \"SwitchStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassExpression\" === nodeType || \"ClassDeclaration\" === nodeType || \"ForOfStatement\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"StaticBlock\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBlockParent(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BlockParent\" || \"BlockStatement\" === nodeType || \"CatchClause\" === nodeType || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"Program\" === nodeType || \"ObjectMethod\" === nodeType || \"SwitchStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ForOfStatement\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"StaticBlock\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBlock(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Block\" || \"BlockStatement\" === nodeType || \"Program\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Statement\" || \"BlockStatement\" === nodeType || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"DebuggerStatement\" === nodeType || \"DoWhileStatement\" === nodeType || \"EmptyStatement\" === nodeType || \"ExpressionStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"IfStatement\" === nodeType || \"LabeledStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"SwitchStatement\" === nodeType || \"ThrowStatement\" === nodeType || \"TryStatement\" === nodeType || \"VariableDeclaration\" === nodeType || \"WhileStatement\" === nodeType || \"WithStatement\" === nodeType || \"ClassDeclaration\" === nodeType || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ForOfStatement\" === nodeType || \"ImportDeclaration\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType || \"EnumDeclaration\" === nodeType || \"TSDeclareFunction\" === nodeType || \"TSInterfaceDeclaration\" === nodeType || \"TSTypeAliasDeclaration\" === nodeType || \"TSEnumDeclaration\" === nodeType || \"TSModuleDeclaration\" === nodeType || \"TSImportEqualsDeclaration\" === nodeType || \"TSExportAssignment\" === nodeType || \"TSNamespaceExportDeclaration\" === nodeType || nodeType === \"Placeholder\" && (\"Statement\" === node.expectedNode || \"Declaration\" === node.expectedNode || \"BlockStatement\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTerminatorless(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Terminatorless\" || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"ThrowStatement\" === nodeType || \"YieldExpression\" === nodeType || \"AwaitExpression\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isCompletionStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"CompletionStatement\" || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"ThrowStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isConditional(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Conditional\" || \"ConditionalExpression\" === nodeType || \"IfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLoop(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Loop\" || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isWhile(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"While\" || \"DoWhileStatement\" === nodeType || \"WhileStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExpressionWrapper(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExpressionWrapper\" || \"ExpressionStatement\" === nodeType || \"ParenthesizedExpression\" === nodeType || \"TypeCastExpression\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFor(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"For\" || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForXStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForXStatement\" || \"ForInStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Function\" || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"ObjectMethod\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionParent(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionParent\" || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"ObjectMethod\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPureish(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Pureish\" || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"BigIntLiteral\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Declaration\" || \"FunctionDeclaration\" === nodeType || \"VariableDeclaration\" === nodeType || \"ClassDeclaration\" === nodeType || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ImportDeclaration\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType || \"EnumDeclaration\" === nodeType || \"TSDeclareFunction\" === nodeType || \"TSInterfaceDeclaration\" === nodeType || \"TSTypeAliasDeclaration\" === nodeType || \"TSEnumDeclaration\" === nodeType || \"TSModuleDeclaration\" === nodeType || nodeType === \"Placeholder\" && \"Declaration\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPatternLike(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PatternLike\" || \"Identifier\" === nodeType || \"RestElement\" === nodeType || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || nodeType === \"Placeholder\" && (\"Pattern\" === node.expectedNode || \"Identifier\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLVal(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"LVal\" || \"Identifier\" === nodeType || \"MemberExpression\" === nodeType || \"RestElement\" === nodeType || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || \"TSParameterProperty\" === nodeType || nodeType === \"Placeholder\" && (\"Pattern\" === node.expectedNode || \"Identifier\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSEntityName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSEntityName\" || \"Identifier\" === nodeType || \"TSQualifiedName\" === nodeType || nodeType === \"Placeholder\" && \"Identifier\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Literal\" || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"TemplateLiteral\" === nodeType || \"BigIntLiteral\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImmutable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Immutable\" || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"BigIntLiteral\" === nodeType || \"JSXAttribute\" === nodeType || \"JSXClosingElement\" === nodeType || \"JSXElement\" === nodeType || \"JSXExpressionContainer\" === nodeType || \"JSXSpreadChild\" === nodeType || \"JSXOpeningElement\" === nodeType || \"JSXText\" === nodeType || \"JSXFragment\" === nodeType || \"JSXOpeningFragment\" === nodeType || \"JSXClosingFragment\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUserWhitespacable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UserWhitespacable\" || \"ObjectMethod\" === nodeType || \"ObjectProperty\" === nodeType || \"ObjectTypeInternalSlot\" === nodeType || \"ObjectTypeCallProperty\" === nodeType || \"ObjectTypeIndexer\" === nodeType || \"ObjectTypeProperty\" === nodeType || \"ObjectTypeSpreadProperty\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Method\" || \"ObjectMethod\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectMember\" || \"ObjectMethod\" === nodeType || \"ObjectProperty\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Property\" || \"ObjectProperty\" === nodeType || \"ClassProperty\" === nodeType || \"ClassPrivateProperty\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUnaryLike(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UnaryLike\" || \"UnaryExpression\" === nodeType || \"SpreadElement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Pattern\" || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || nodeType === \"Placeholder\" && \"Pattern\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClass(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Class\" || \"ClassExpression\" === nodeType || \"ClassDeclaration\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isModuleDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ModuleDeclaration\" || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ImportDeclaration\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportDeclaration\" || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isModuleSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ModuleSpecifier\" || \"ExportSpecifier\" === nodeType || \"ImportDefaultSpecifier\" === nodeType || \"ImportNamespaceSpecifier\" === nodeType || \"ImportSpecifier\" === nodeType || \"ExportNamespaceSpecifier\" === nodeType || \"ExportDefaultSpecifier\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlow(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Flow\" || \"AnyTypeAnnotation\" === nodeType || \"ArrayTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"BooleanLiteralTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"ClassImplements\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"DeclaredPredicate\" === nodeType || \"ExistsTypeAnnotation\" === nodeType || \"FunctionTypeAnnotation\" === nodeType || \"FunctionTypeParam\" === nodeType || \"GenericTypeAnnotation\" === nodeType || \"InferredPredicate\" === nodeType || \"InterfaceExtends\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"InterfaceTypeAnnotation\" === nodeType || \"IntersectionTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NullableTypeAnnotation\" === nodeType || \"NumberLiteralTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"ObjectTypeAnnotation\" === nodeType || \"ObjectTypeInternalSlot\" === nodeType || \"ObjectTypeCallProperty\" === nodeType || \"ObjectTypeIndexer\" === nodeType || \"ObjectTypeProperty\" === nodeType || \"ObjectTypeSpreadProperty\" === nodeType || \"OpaqueType\" === nodeType || \"QualifiedTypeIdentifier\" === nodeType || \"StringLiteralTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"TupleTypeAnnotation\" === nodeType || \"TypeofTypeAnnotation\" === nodeType || \"TypeAlias\" === nodeType || \"TypeAnnotation\" === nodeType || \"TypeCastExpression\" === nodeType || \"TypeParameter\" === nodeType || \"TypeParameterDeclaration\" === nodeType || \"TypeParameterInstantiation\" === nodeType || \"UnionTypeAnnotation\" === nodeType || \"Variance\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowType\" || \"AnyTypeAnnotation\" === nodeType || \"ArrayTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"BooleanLiteralTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"ExistsTypeAnnotation\" === nodeType || \"FunctionTypeAnnotation\" === nodeType || \"GenericTypeAnnotation\" === nodeType || \"InterfaceTypeAnnotation\" === nodeType || \"IntersectionTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NullableTypeAnnotation\" === nodeType || \"NumberLiteralTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"ObjectTypeAnnotation\" === nodeType || \"StringLiteralTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"TupleTypeAnnotation\" === nodeType || \"TypeofTypeAnnotation\" === nodeType || \"UnionTypeAnnotation\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowBaseAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowBaseAnnotation\" || \"AnyTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowDeclaration\" || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowPredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowPredicate\" || \"DeclaredPredicate\" === nodeType || \"InferredPredicate\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumBody\" || \"EnumBooleanBody\" === nodeType || \"EnumNumberBody\" === nodeType || \"EnumStringBody\" === nodeType || \"EnumSymbolBody\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumMember\" || \"EnumBooleanMember\" === nodeType || \"EnumNumberMember\" === nodeType || \"EnumStringMember\" === nodeType || \"EnumDefaultedMember\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSX(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSX\" || \"JSXAttribute\" === nodeType || \"JSXClosingElement\" === nodeType || \"JSXElement\" === nodeType || \"JSXEmptyExpression\" === nodeType || \"JSXExpressionContainer\" === nodeType || \"JSXSpreadChild\" === nodeType || \"JSXIdentifier\" === nodeType || \"JSXMemberExpression\" === nodeType || \"JSXNamespacedName\" === nodeType || \"JSXOpeningElement\" === nodeType || \"JSXSpreadAttribute\" === nodeType || \"JSXText\" === nodeType || \"JSXFragment\" === nodeType || \"JSXOpeningFragment\" === nodeType || \"JSXClosingFragment\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPrivate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Private\" || \"ClassPrivateProperty\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"PrivateName\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeElement\" || \"TSCallSignatureDeclaration\" === nodeType || \"TSConstructSignatureDeclaration\" === nodeType || \"TSPropertySignature\" === nodeType || \"TSMethodSignature\" === nodeType || \"TSIndexSignature\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSType\" || \"TSAnyKeyword\" === nodeType || \"TSBooleanKeyword\" === nodeType || \"TSBigIntKeyword\" === nodeType || \"TSIntrinsicKeyword\" === nodeType || \"TSNeverKeyword\" === nodeType || \"TSNullKeyword\" === nodeType || \"TSNumberKeyword\" === nodeType || \"TSObjectKeyword\" === nodeType || \"TSStringKeyword\" === nodeType || \"TSSymbolKeyword\" === nodeType || \"TSUndefinedKeyword\" === nodeType || \"TSUnknownKeyword\" === nodeType || \"TSVoidKeyword\" === nodeType || \"TSThisType\" === nodeType || \"TSFunctionType\" === nodeType || \"TSConstructorType\" === nodeType || \"TSTypeReference\" === nodeType || \"TSTypePredicate\" === nodeType || \"TSTypeQuery\" === nodeType || \"TSTypeLiteral\" === nodeType || \"TSArrayType\" === nodeType || \"TSTupleType\" === nodeType || \"TSOptionalType\" === nodeType || \"TSRestType\" === nodeType || \"TSUnionType\" === nodeType || \"TSIntersectionType\" === nodeType || \"TSConditionalType\" === nodeType || \"TSInferType\" === nodeType || \"TSParenthesizedType\" === nodeType || \"TSTypeOperator\" === nodeType || \"TSIndexedAccessType\" === nodeType || \"TSMappedType\" === nodeType || \"TSLiteralType\" === nodeType || \"TSExpressionWithTypeArguments\" === nodeType || \"TSImportType\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSBaseType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSBaseType\" || \"TSAnyKeyword\" === nodeType || \"TSBooleanKeyword\" === nodeType || \"TSBigIntKeyword\" === nodeType || \"TSIntrinsicKeyword\" === nodeType || \"TSNeverKeyword\" === nodeType || \"TSNullKeyword\" === nodeType || \"TSNumberKeyword\" === nodeType || \"TSObjectKeyword\" === nodeType || \"TSStringKeyword\" === nodeType || \"TSSymbolKeyword\" === nodeType || \"TSUndefinedKeyword\" === nodeType || \"TSUnknownKeyword\" === nodeType || \"TSVoidKeyword\" === nodeType || \"TSThisType\" === nodeType || \"TSLiteralType\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumberLiteral(node, opts) {\n  console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumberLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRegexLiteral(node, opts) {\n  console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RegexLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRestProperty(node, opts) {\n  console.trace(\"The node type RestProperty has been renamed to RestElement\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RestProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSpreadProperty(node, opts) {\n  console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SpreadProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = matchesPattern;\n\nvar _generated = require(\"./generated\");\n\nfunction matchesPattern(member, match, allowPartial) {\n  if (!(0, _generated.isMemberExpression)(member)) return false;\n  const parts = Array.isArray(match) ? match : match.split(\".\");\n  const nodes = [];\n  let node;\n\n  for (node = member; (0, _generated.isMemberExpression)(node); node = node.object) {\n    nodes.push(node.property);\n  }\n\n  nodes.push(node);\n  if (nodes.length < parts.length) return false;\n  if (!allowPartial && nodes.length > parts.length) return false;\n\n  for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {\n    const node = nodes[j];\n    let value;\n\n    if ((0, _generated.isIdentifier)(node)) {\n      value = node.name;\n    } else if ((0, _generated.isStringLiteral)(node)) {\n      value = node.value;\n    } else {\n      return false;\n    }\n\n    if (parts[i] !== value) return false;\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = buildMatchMemberExpression;\n\nvar _matchesPattern = _interopRequireDefault(require(\"./matchesPattern\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction buildMatchMemberExpression(match, allowPartial) {\n  const parts = match.split(\".\");\n  return member => (0, _matchesPattern.default)(member, parts, allowPartial);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _buildMatchMemberExpression = _interopRequireDefault(require(\"../buildMatchMemberExpression\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst isReactComponent = (0, _buildMatchMemberExpression.default)(\"React.Component\");\nvar _default = isReactComponent;\nexports.default = _default;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isCompatTag;\n\nfunction isCompatTag(tagName) {\n  return !!tagName && /^[a-z]/.test(tagName);\n}", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n", "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", "var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n", "var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n", "var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n", "var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n", "var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n", "var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n", "var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n", "var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n", "var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n", "var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n", "var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n", "var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n", "var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n", "var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n", "var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n", "'use strict';\n\nlet fastProto = null;\n\n// Creates an object with permanently fast properties in V8. See Toon Verwaest's\n// post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62\n// for more details. Use %HasFastProperties(object) and the Node.js flag\n// --allow-natives-syntax to check whether an object has fast properties.\nfunction FastObject(o) {\n\t// A prototype object will have \"fast properties\" enabled once it is checked\n\t// against the inline property cache of a function, e.g. fastProto.property:\n\t// https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63\n\tif (fastProto !== null && typeof fastProto.property) {\n\t\tconst result = fastProto;\n\t\tfastProto = FastObject.prototype = null;\n\t\treturn result;\n\t}\n\tfastProto = FastObject.prototype = o == null ? Object.create(null) : o;\n\treturn new FastObject;\n}\n\n// Initialize the inline property cache of FastObject\nFastObject();\n\nmodule.exports = function toFastproperties(o) {\n\treturn FastObject(o);\n};\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isType;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isType(nodeType, targetType) {\n  if (nodeType === targetType) return true;\n  if (_definitions.ALIAS_KEYS[targetType]) return false;\n  const aliases = _definitions.FLIPPED_ALIAS_KEYS[targetType];\n\n  if (aliases) {\n    if (aliases[0] === nodeType) return true;\n\n    for (const alias of aliases) {\n      if (nodeType === alias) return true;\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPlaceholderType;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isPlaceholderType(placeholderType, targetType) {\n  if (placeholderType === targetType) return true;\n  const aliases = _definitions.PLACEHOLDERS_ALIAS[placeholderType];\n\n  if (aliases) {\n    for (const alias of aliases) {\n      if (targetType === alias) return true;\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = is;\n\nvar _shallowEqual = _interopRequireDefault(require(\"../utils/shallowEqual\"));\n\nvar _isType = _interopRequireDefault(require(\"./isType\"));\n\nvar _isPlaceholderType = _interopRequireDefault(require(\"./isPlaceholderType\"));\n\nvar _definitions = require(\"../definitions\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction is(type, node, opts) {\n  if (!node) return false;\n  const matches = (0, _isType.default)(node.type, type);\n\n  if (!matches) {\n    if (!opts && node.type === \"Placeholder\" && type in _definitions.FLIPPED_ALIAS_KEYS) {\n      return (0, _isPlaceholderType.default)(node.expectedNode, type);\n    }\n\n    return false;\n  }\n\n  if (typeof opts === \"undefined\") {\n    return true;\n  } else {\n    return (0, _shallowEqual.default)(node, opts);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isIdentifierStart = isIdentifierStart;\nexports.isIdentifierChar = isIdentifierChar;\nexports.isIdentifierName = isIdentifierName;\nlet 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\\u08a0-\\u08b4\\u08b6-\\u08c7\\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\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\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-\\u170c\\u170e-\\u1711\\u1720-\\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-\\u1b4b\\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-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\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-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\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\";\nlet 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\\u08d3-\\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\\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\\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-\\u0ecd\\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-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\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-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\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\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst 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, 157, 310, 10, 21, 11, 7, 153, 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, 107, 20, 28, 22, 13, 52, 76, 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, 85, 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, 230, 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, 35, 56, 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, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 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, 8952, 286, 50, 2, 18, 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, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 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, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];\nconst 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, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 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, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 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, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n\n  return false;\n}\n\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nfunction isIdentifierName(name) {\n  let isFirst = true;\n\n  for (let _i = 0, _Array$from = Array.from(name); _i < _Array$from.length; _i++) {\n    const char = _Array$from[_i];\n    const cp = char.codePointAt(0);\n\n    if (isFirst) {\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n\n      isFirst = false;\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n\n  return !isFirst;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isReservedWord = isReservedWord;\nexports.isStrictReservedWord = isStrictReservedWord;\nexports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;\nexports.isStrictBindReservedWord = isStrictBindReservedWord;\nexports.isKeyword = isKeyword;\nconst reservedWords = {\n  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\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\n\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\n\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\n\nfunction isKeyword(word) {\n  return keywords.has(word);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"isIdentifierName\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierName;\n  }\n});\nObject.defineProperty(exports, \"isIdentifierChar\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierChar;\n  }\n});\nObject.defineProperty(exports, \"isIdentifierStart\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierStart;\n  }\n});\nObject.defineProperty(exports, \"isReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictBindOnlyReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictBindOnlyReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictBindReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictBindReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isKeyword\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isKeyword;\n  }\n});\n\nvar _identifier = require(\"./identifier\");\n\nvar _keyword = require(\"./keyword\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isValidIdentifier;\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nfunction isValidIdentifier(name, reserved = true) {\n  if (typeof name !== \"string\") return false;\n\n  if (reserved) {\n    if ((0, _helperValidatorIdentifier.isKeyword)(name) || (0, _helperValidatorIdentifier.isStrictReservedWord)(name)) {\n      return false;\n    } else if (name === \"await\") {\n      return false;\n    }\n  }\n\n  return (0, _helperValidatorIdentifier.isIdentifierName)(name);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.ASSIGNMENT_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = void 0;\nconst STATEMENT_OR_BLOCK_KEYS = [\"consequent\", \"body\", \"alternate\"];\nexports.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS;\nconst FLATTENABLE_KEYS = [\"body\", \"expressions\"];\nexports.FLATTENABLE_KEYS = FLATTENABLE_KEYS;\nconst FOR_INIT_KEYS = [\"left\", \"init\"];\nexports.FOR_INIT_KEYS = FOR_INIT_KEYS;\nconst COMMENT_KEYS = [\"leadingComments\", \"trailingComments\", \"innerComments\"];\nexports.COMMENT_KEYS = COMMENT_KEYS;\nconst LOGICAL_OPERATORS = [\"||\", \"&&\", \"??\"];\nexports.LOGICAL_OPERATORS = LOGICAL_OPERATORS;\nconst UPDATE_OPERATORS = [\"++\", \"--\"];\nexports.UPDATE_OPERATORS = UPDATE_OPERATORS;\nconst BOOLEAN_NUMBER_BINARY_OPERATORS = [\">\", \"<\", \">=\", \"<=\"];\nexports.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS;\nconst EQUALITY_BINARY_OPERATORS = [\"==\", \"===\", \"!=\", \"!==\"];\nexports.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS;\nconst COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, \"in\", \"instanceof\"];\nexports.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS;\nconst BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS];\nexports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS;\nconst NUMBER_BINARY_OPERATORS = [\"-\", \"/\", \"%\", \"*\", \"**\", \"&\", \"|\", \">>\", \">>>\", \"<<\", \"^\"];\nexports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS;\nconst BINARY_OPERATORS = [\"+\", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS];\nexports.BINARY_OPERATORS = BINARY_OPERATORS;\nconst ASSIGNMENT_OPERATORS = [\"=\", \"+=\", ...NUMBER_BINARY_OPERATORS.map(op => op + \"=\"), ...LOGICAL_OPERATORS.map(op => op + \"=\")];\nexports.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS;\nconst BOOLEAN_UNARY_OPERATORS = [\"delete\", \"!\"];\nexports.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS;\nconst NUMBER_UNARY_OPERATORS = [\"+\", \"-\", \"~\"];\nexports.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS;\nconst STRING_UNARY_OPERATORS = [\"typeof\"];\nexports.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS;\nconst UNARY_OPERATORS = [\"void\", \"throw\", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS];\nexports.UNARY_OPERATORS = UNARY_OPERATORS;\nconst INHERIT_KEYS = {\n  optional: [\"typeAnnotation\", \"typeParameters\", \"returnType\"],\n  force: [\"start\", \"loc\", \"end\"]\n};\nexports.INHERIT_KEYS = INHERIT_KEYS;\nconst BLOCK_SCOPED_SYMBOL = Symbol.for(\"var used to be block scoped\");\nexports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL;\nconst NOT_LOCAL_BINDING = Symbol.for(\"should not be considered a local binding\");\nexports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = validate;\nexports.validateField = validateField;\nexports.validateChild = validateChild;\n\nvar _definitions = require(\"../definitions\");\n\nfunction validate(node, key, val) {\n  if (!node) return;\n  const fields = _definitions.NODE_FIELDS[node.type];\n  if (!fields) return;\n  const field = fields[key];\n  validateField(node, key, val, field);\n  validateChild(node, key, val);\n}\n\nfunction validateField(node, key, val, field) {\n  if (!(field == null ? void 0 : field.validate)) return;\n  if (field.optional && val == null) return;\n  field.validate(node, key, val);\n}\n\nfunction validateChild(node, key, val) {\n  if (val == null) return;\n  const validate = _definitions.NODE_PARENT_VALIDATIONS[val.type];\n  if (!validate) return;\n  validate(node, key, val);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.validate = validate;\nexports.typeIs = typeIs;\nexports.validateType = validateType;\nexports.validateOptional = validateOptional;\nexports.validateOptionalType = validateOptionalType;\nexports.arrayOf = arrayOf;\nexports.arrayOfType = arrayOfType;\nexports.validateArrayOfType = validateArrayOfType;\nexports.assertEach = assertEach;\nexports.assertOneOf = assertOneOf;\nexports.assertNodeType = assertNodeType;\nexports.assertNodeOrValueType = assertNodeOrValueType;\nexports.assertValueType = assertValueType;\nexports.assertShape = assertShape;\nexports.assertOptionalChainStart = assertOptionalChainStart;\nexports.chain = chain;\nexports.default = defineType;\nexports.NODE_PARENT_VALIDATIONS = exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.FLIPPED_ALIAS_KEYS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = void 0;\n\nvar _is = _interopRequireDefault(require(\"../validators/is\"));\n\nvar _validate = require(\"../validators/validate\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst VISITOR_KEYS = {};\nexports.VISITOR_KEYS = VISITOR_KEYS;\nconst ALIAS_KEYS = {};\nexports.ALIAS_KEYS = ALIAS_KEYS;\nconst FLIPPED_ALIAS_KEYS = {};\nexports.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS;\nconst NODE_FIELDS = {};\nexports.NODE_FIELDS = NODE_FIELDS;\nconst BUILDER_KEYS = {};\nexports.BUILDER_KEYS = BUILDER_KEYS;\nconst DEPRECATED_KEYS = {};\nexports.DEPRECATED_KEYS = DEPRECATED_KEYS;\nconst NODE_PARENT_VALIDATIONS = {};\nexports.NODE_PARENT_VALIDATIONS = NODE_PARENT_VALIDATIONS;\n\nfunction getType(val) {\n  if (Array.isArray(val)) {\n    return \"array\";\n  } else if (val === null) {\n    return \"null\";\n  } else {\n    return typeof val;\n  }\n}\n\nfunction validate(validate) {\n  return {\n    validate\n  };\n}\n\nfunction typeIs(typeName) {\n  return typeof typeName === \"string\" ? assertNodeType(typeName) : assertNodeType(...typeName);\n}\n\nfunction validateType(typeName) {\n  return validate(typeIs(typeName));\n}\n\nfunction validateOptional(validate) {\n  return {\n    validate,\n    optional: true\n  };\n}\n\nfunction validateOptionalType(typeName) {\n  return {\n    validate: typeIs(typeName),\n    optional: true\n  };\n}\n\nfunction arrayOf(elementType) {\n  return chain(assertValueType(\"array\"), assertEach(elementType));\n}\n\nfunction arrayOfType(typeName) {\n  return arrayOf(typeIs(typeName));\n}\n\nfunction validateArrayOfType(typeName) {\n  return validate(arrayOfType(typeName));\n}\n\nfunction assertEach(callback) {\n  function validator(node, key, val) {\n    if (!Array.isArray(val)) return;\n\n    for (let i = 0; i < val.length; i++) {\n      const subkey = `${key}[${i}]`;\n      const v = val[i];\n      callback(node, subkey, v);\n      if (process.env.BABEL_TYPES_8_BREAKING) (0, _validate.validateChild)(node, subkey, v);\n    }\n  }\n\n  validator.each = callback;\n  return validator;\n}\n\nfunction assertOneOf(...values) {\n  function validate(node, key, val) {\n    if (values.indexOf(val) < 0) {\n      throw new TypeError(`Property ${key} expected value to be one of ${JSON.stringify(values)} but got ${JSON.stringify(val)}`);\n    }\n  }\n\n  validate.oneOf = values;\n  return validate;\n}\n\nfunction assertNodeType(...types) {\n  function validate(node, key, val) {\n    for (const type of types) {\n      if ((0, _is.default)(type, val)) {\n        (0, _validate.validateChild)(node, key, val);\n        return;\n      }\n    }\n\n    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)}`);\n  }\n\n  validate.oneOfNodeTypes = types;\n  return validate;\n}\n\nfunction assertNodeOrValueType(...types) {\n  function validate(node, key, val) {\n    for (const type of types) {\n      if (getType(val) === type || (0, _is.default)(type, val)) {\n        (0, _validate.validateChild)(node, key, val);\n        return;\n      }\n    }\n\n    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)}`);\n  }\n\n  validate.oneOfNodeOrValueTypes = types;\n  return validate;\n}\n\nfunction assertValueType(type) {\n  function validate(node, key, val) {\n    const valid = getType(val) === type;\n\n    if (!valid) {\n      throw new TypeError(`Property ${key} expected type of ${type} but got ${getType(val)}`);\n    }\n  }\n\n  validate.type = type;\n  return validate;\n}\n\nfunction assertShape(shape) {\n  function validate(node, key, val) {\n    const errors = [];\n\n    for (const property of Object.keys(shape)) {\n      try {\n        (0, _validate.validateField)(node, property, val[property], shape[property]);\n      } catch (error) {\n        if (error instanceof TypeError) {\n          errors.push(error.message);\n          continue;\n        }\n\n        throw error;\n      }\n    }\n\n    if (errors.length) {\n      throw new TypeError(`Property ${key} of ${node.type} expected to have the following:\\n${errors.join(\"\\n\")}`);\n    }\n  }\n\n  validate.shapeOf = shape;\n  return validate;\n}\n\nfunction assertOptionalChainStart() {\n  function validate(node) {\n    var _current;\n\n    let current = node;\n\n    while (node) {\n      const {\n        type\n      } = current;\n\n      if (type === \"OptionalCallExpression\") {\n        if (current.optional) return;\n        current = current.callee;\n        continue;\n      }\n\n      if (type === \"OptionalMemberExpression\") {\n        if (current.optional) return;\n        current = current.object;\n        continue;\n      }\n\n      break;\n    }\n\n    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}`);\n  }\n\n  return validate;\n}\n\nfunction chain(...fns) {\n  function validate(...args) {\n    for (const fn of fns) {\n      fn(...args);\n    }\n  }\n\n  validate.chainOf = fns;\n  return validate;\n}\n\nconst validTypeOpts = [\"aliases\", \"builder\", \"deprecatedAlias\", \"fields\", \"inherits\", \"visitor\", \"validate\"];\nconst validFieldKeys = [\"default\", \"optional\", \"validate\"];\n\nfunction defineType(type, opts = {}) {\n  const inherits = opts.inherits && store[opts.inherits] || {};\n  let fields = opts.fields;\n\n  if (!fields) {\n    fields = {};\n\n    if (inherits.fields) {\n      const keys = Object.getOwnPropertyNames(inherits.fields);\n\n      for (const key of keys) {\n        const field = inherits.fields[key];\n        fields[key] = {\n          default: field.default,\n          optional: field.optional,\n          validate: field.validate\n        };\n      }\n    }\n  }\n\n  const visitor = opts.visitor || inherits.visitor || [];\n  const aliases = opts.aliases || inherits.aliases || [];\n  const builder = opts.builder || inherits.builder || opts.visitor || [];\n\n  for (const k of Object.keys(opts)) {\n    if (validTypeOpts.indexOf(k) === -1) {\n      throw new Error(`Unknown type option \"${k}\" on ${type}`);\n    }\n  }\n\n  if (opts.deprecatedAlias) {\n    DEPRECATED_KEYS[opts.deprecatedAlias] = type;\n  }\n\n  for (const key of visitor.concat(builder)) {\n    fields[key] = fields[key] || {};\n  }\n\n  for (const key of Object.keys(fields)) {\n    const field = fields[key];\n\n    if (field.default !== undefined && builder.indexOf(key) === -1) {\n      field.optional = true;\n    }\n\n    if (field.default === undefined) {\n      field.default = null;\n    } else if (!field.validate && field.default != null) {\n      field.validate = assertValueType(getType(field.default));\n    }\n\n    for (const k of Object.keys(field)) {\n      if (validFieldKeys.indexOf(k) === -1) {\n        throw new Error(`Unknown field key \"${k}\" on ${type}.${key}`);\n      }\n    }\n  }\n\n  VISITOR_KEYS[type] = opts.visitor = visitor;\n  BUILDER_KEYS[type] = opts.builder = builder;\n  NODE_FIELDS[type] = opts.fields = fields;\n  ALIAS_KEYS[type] = opts.aliases = aliases;\n  aliases.forEach(alias => {\n    FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];\n    FLIPPED_ALIAS_KEYS[alias].push(type);\n  });\n\n  if (opts.validate) {\n    NODE_PARENT_VALIDATIONS[type] = opts.validate;\n  }\n\n  store[type] = opts;\n}\n\nconst store = {};", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.classMethodOrDeclareMethodCommon = exports.classMethodOrPropertyCommon = exports.patternLikeCommon = exports.functionDeclarationCommon = exports.functionTypeAnnotationCommon = exports.functionCommon = void 0;\n\nvar _is = _interopRequireDefault(require(\"../validators/is\"));\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"../validators/isValidIdentifier\"));\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nvar _constants = require(\"../constants\");\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(0, _utils.default)(\"ArrayExpression\", {\n  fields: {\n    elements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)(\"null\", \"Expression\", \"SpreadElement\"))),\n      default: !process.env.BABEL_TYPES_8_BREAKING ? [] : undefined\n    }\n  },\n  visitor: [\"elements\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"AssignmentExpression\", {\n  fields: {\n    operator: {\n      validate: function () {\n        if (!process.env.BABEL_TYPES_8_BREAKING) {\n          return (0, _utils.assertValueType)(\"string\");\n        }\n\n        const identifier = (0, _utils.assertOneOf)(..._constants.ASSIGNMENT_OPERATORS);\n        const pattern = (0, _utils.assertOneOf)(\"=\");\n        return function (node, key, val) {\n          const validator = (0, _is.default)(\"Pattern\", node.left) ? pattern : identifier;\n          validator(node, key, val);\n        };\n      }()\n    },\n    left: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"LVal\") : (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  builder: [\"operator\", \"left\", \"right\"],\n  visitor: [\"left\", \"right\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"BinaryExpression\", {\n  builder: [\"operator\", \"left\", \"right\"],\n  fields: {\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.BINARY_OPERATORS)\n    },\n    left: {\n      validate: function () {\n        const expression = (0, _utils.assertNodeType)(\"Expression\");\n        const inOp = (0, _utils.assertNodeType)(\"Expression\", \"PrivateName\");\n\n        const validator = function (node, key, val) {\n          const validator = node.operator === \"in\" ? inOp : expression;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"PrivateName\"];\n        return validator;\n      }()\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  visitor: [\"left\", \"right\"],\n  aliases: [\"Binary\", \"Expression\"]\n});\n(0, _utils.default)(\"InterpreterDirective\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"Directive\", {\n  visitor: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertNodeType)(\"DirectiveLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"DirectiveLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"BlockStatement\", {\n  builder: [\"body\", \"directives\"],\n  visitor: [\"directives\", \"body\"],\n  fields: {\n    directives: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Directive\"))),\n      default: []\n    },\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\", \"Block\", \"Statement\"]\n});\n(0, _utils.default)(\"BreakStatement\", {\n  visitor: [\"label\"],\n  fields: {\n    label: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    }\n  },\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"]\n});\n(0, _utils.default)(\"CallExpression\", {\n  visitor: [\"callee\", \"arguments\", \"typeParameters\", \"typeArguments\"],\n  builder: [\"callee\", \"arguments\"],\n  aliases: [\"Expression\"],\n  fields: Object.assign({\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\", \"V8IntrinsicIdentifier\")\n    },\n    arguments: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\", \"JSXNamespacedName\", \"ArgumentPlaceholder\")))\n    }\n  }, !process.env.BABEL_TYPES_8_BREAKING ? {\n    optional: {\n      validate: (0, _utils.assertOneOf)(true, false),\n      optional: true\n    }\n  } : {}, {\n    typeArguments: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\"),\n      optional: true\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"CatchClause\", {\n  visitor: [\"param\", \"body\"],\n  fields: {\n    param: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\"]\n});\n(0, _utils.default)(\"ConditionalExpression\", {\n  visitor: [\"test\", \"consequent\", \"alternate\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    consequent: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    alternate: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  aliases: [\"Expression\", \"Conditional\"]\n});\n(0, _utils.default)(\"ContinueStatement\", {\n  visitor: [\"label\"],\n  fields: {\n    label: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    }\n  },\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"]\n});\n(0, _utils.default)(\"DebuggerStatement\", {\n  aliases: [\"Statement\"]\n});\n(0, _utils.default)(\"DoWhileStatement\", {\n  visitor: [\"test\", \"body\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  },\n  aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"]\n});\n(0, _utils.default)(\"EmptyStatement\", {\n  aliases: [\"Statement\"]\n});\n(0, _utils.default)(\"ExpressionStatement\", {\n  visitor: [\"expression\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  aliases: [\"Statement\", \"ExpressionWrapper\"]\n});\n(0, _utils.default)(\"File\", {\n  builder: [\"program\", \"comments\", \"tokens\"],\n  visitor: [\"program\"],\n  fields: {\n    program: {\n      validate: (0, _utils.assertNodeType)(\"Program\")\n    },\n    comments: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? Object.assign(() => {}, {\n        each: {\n          oneOfNodeTypes: [\"CommentBlock\", \"CommentLine\"]\n        }\n      }) : (0, _utils.assertEach)((0, _utils.assertNodeType)(\"CommentBlock\", \"CommentLine\")),\n      optional: true\n    },\n    tokens: {\n      validate: (0, _utils.assertEach)(Object.assign(() => {}, {\n        type: \"any\"\n      })),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ForInStatement\", {\n  visitor: [\"left\", \"right\", \"body\"],\n  aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\", \"ForXStatement\"],\n  fields: {\n    left: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"VariableDeclaration\", \"LVal\") : (0, _utils.assertNodeType)(\"VariableDeclaration\", \"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"ForStatement\", {\n  visitor: [\"init\", \"test\", \"update\", \"body\"],\n  aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\"],\n  fields: {\n    init: {\n      validate: (0, _utils.assertNodeType)(\"VariableDeclaration\", \"Expression\"),\n      optional: true\n    },\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    update: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\nconst functionCommon = {\n  params: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"RestElement\", \"TSParameterProperty\")))\n  },\n  generator: {\n    default: false\n  },\n  async: {\n    default: false\n  }\n};\nexports.functionCommon = functionCommon;\nconst functionTypeAnnotationCommon = {\n  returnType: {\n    validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n    optional: true\n  },\n  typeParameters: {\n    validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n    optional: true\n  }\n};\nexports.functionTypeAnnotationCommon = functionTypeAnnotationCommon;\nconst functionDeclarationCommon = Object.assign({}, functionCommon, {\n  declare: {\n    validate: (0, _utils.assertValueType)(\"boolean\"),\n    optional: true\n  },\n  id: {\n    validate: (0, _utils.assertNodeType)(\"Identifier\"),\n    optional: true\n  }\n});\nexports.functionDeclarationCommon = functionDeclarationCommon;\n(0, _utils.default)(\"FunctionDeclaration\", {\n  builder: [\"id\", \"params\", \"body\", \"generator\", \"async\"],\n  visitor: [\"id\", \"params\", \"body\", \"returnType\", \"typeParameters\"],\n  fields: Object.assign({}, functionDeclarationCommon, functionTypeAnnotationCommon, {\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }),\n  aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Statement\", \"Pureish\", \"Declaration\"],\n  validate: function () {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return () => {};\n    const identifier = (0, _utils.assertNodeType)(\"Identifier\");\n    return function (parent, key, node) {\n      if (!(0, _is.default)(\"ExportDefaultDeclaration\", parent)) {\n        identifier(node, \"id\", node.id);\n      }\n    };\n  }()\n});\n(0, _utils.default)(\"FunctionExpression\", {\n  inherits: \"FunctionDeclaration\",\n  aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Expression\", \"Pureish\"],\n  fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  })\n});\nconst patternLikeCommon = {\n  typeAnnotation: {\n    validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n    optional: true\n  },\n  decorators: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\")))\n  }\n};\nexports.patternLikeCommon = patternLikeCommon;\n(0, _utils.default)(\"Identifier\", {\n  builder: [\"name\"],\n  visitor: [\"typeAnnotation\", \"decorators\"],\n  aliases: [\"Expression\", \"PatternLike\", \"LVal\", \"TSEntityName\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    name: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (!(0, _isValidIdentifier.default)(val, false)) {\n          throw new TypeError(`\"${val}\" is not a valid identifier name`);\n        }\n      }, {\n        type: \"string\"\n      }))\n    },\n    optional: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  }),\n\n  validate(parent, key, node) {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return;\n    const match = /\\.(\\w+)$/.exec(key);\n    if (!match) return;\n    const [, parentKey] = match;\n    const nonComp = {\n      computed: false\n    };\n\n    if (parentKey === \"property\") {\n      if ((0, _is.default)(\"MemberExpression\", parent, nonComp)) return;\n      if ((0, _is.default)(\"OptionalMemberExpression\", parent, nonComp)) return;\n    } else if (parentKey === \"key\") {\n      if ((0, _is.default)(\"Property\", parent, nonComp)) return;\n      if ((0, _is.default)(\"Method\", parent, nonComp)) return;\n    } else if (parentKey === \"exported\") {\n      if ((0, _is.default)(\"ExportSpecifier\", parent)) return;\n    } else if (parentKey === \"imported\") {\n      if ((0, _is.default)(\"ImportSpecifier\", parent, {\n        imported: node\n      })) return;\n    } else if (parentKey === \"meta\") {\n      if ((0, _is.default)(\"MetaProperty\", parent, {\n        meta: node\n      })) return;\n    }\n\n    if (((0, _helperValidatorIdentifier.isKeyword)(node.name) || (0, _helperValidatorIdentifier.isReservedWord)(node.name)) && node.name !== \"this\") {\n      throw new TypeError(`\"${node.name}\" is not a valid identifier`);\n    }\n  }\n\n});\n(0, _utils.default)(\"IfStatement\", {\n  visitor: [\"test\", \"consequent\", \"alternate\"],\n  aliases: [\"Statement\", \"Conditional\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    consequent: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    },\n    alternate: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"LabeledStatement\", {\n  visitor: [\"label\", \"body\"],\n  aliases: [\"Statement\"],\n  fields: {\n    label: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"StringLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"NumericLiteral\", {\n  builder: [\"value\"],\n  deprecatedAlias: \"NumberLiteral\",\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"number\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"NullLiteral\", {\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"BooleanLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"boolean\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"RegExpLiteral\", {\n  builder: [\"pattern\", \"flags\"],\n  deprecatedAlias: \"RegexLiteral\",\n  aliases: [\"Expression\", \"Pureish\", \"Literal\"],\n  fields: {\n    pattern: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    },\n    flags: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n        const invalid = /[^gimsuy]/.exec(val);\n\n        if (invalid) {\n          throw new TypeError(`\"${invalid[0]}\" is not a valid RegExp flag`);\n        }\n      }, {\n        type: \"string\"\n      })),\n      default: \"\"\n    }\n  }\n});\n(0, _utils.default)(\"LogicalExpression\", {\n  builder: [\"operator\", \"left\", \"right\"],\n  visitor: [\"left\", \"right\"],\n  aliases: [\"Binary\", \"Expression\"],\n  fields: {\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.LOGICAL_OPERATORS)\n    },\n    left: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"MemberExpression\", {\n  builder: [\"object\", \"property\", \"computed\", \"optional\"],\n  visitor: [\"object\", \"property\"],\n  aliases: [\"Expression\", \"LVal\"],\n  fields: Object.assign({\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    property: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"PrivateName\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"PrivateName\"];\n        return validator;\n      }()\n    },\n    computed: {\n      default: false\n    }\n  }, !process.env.BABEL_TYPES_8_BREAKING ? {\n    optional: {\n      validate: (0, _utils.assertOneOf)(true, false),\n      optional: true\n    }\n  } : {})\n});\n(0, _utils.default)(\"NewExpression\", {\n  inherits: \"CallExpression\"\n});\n(0, _utils.default)(\"Program\", {\n  visitor: [\"directives\", \"body\"],\n  builder: [\"body\", \"directives\", \"sourceType\", \"interpreter\"],\n  fields: {\n    sourceFile: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    },\n    sourceType: {\n      validate: (0, _utils.assertOneOf)(\"script\", \"module\"),\n      default: \"script\"\n    },\n    interpreter: {\n      validate: (0, _utils.assertNodeType)(\"InterpreterDirective\"),\n      default: null,\n      optional: true\n    },\n    directives: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Directive\"))),\n      default: []\n    },\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\", \"Block\"]\n});\n(0, _utils.default)(\"ObjectExpression\", {\n  visitor: [\"properties\"],\n  aliases: [\"Expression\"],\n  fields: {\n    properties: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ObjectMethod\", \"ObjectProperty\", \"SpreadElement\")))\n    }\n  }\n});\n(0, _utils.default)(\"ObjectMethod\", {\n  builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"generator\", \"async\"],\n  fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n    kind: Object.assign({\n      validate: (0, _utils.assertOneOf)(\"method\", \"get\", \"set\")\n    }, !process.env.BABEL_TYPES_8_BREAKING ? {\n      default: \"method\"\n    } : {}),\n    computed: {\n      default: false\n    },\n    key: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"StringLiteral\", \"NumericLiteral\"];\n        return validator;\n      }()\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }),\n  visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n  aliases: [\"UserWhitespacable\", \"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\", \"ObjectMember\"]\n});\n(0, _utils.default)(\"ObjectProperty\", {\n  builder: [\"key\", \"value\", \"computed\", \"shorthand\", ...(!process.env.BABEL_TYPES_8_BREAKING ? [\"decorators\"] : [])],\n  fields: {\n    computed: {\n      default: false\n    },\n    key: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"StringLiteral\", \"NumericLiteral\"];\n        return validator;\n      }()\n    },\n    value: {\n      validate: (0, _utils.assertNodeType)(\"Expression\", \"PatternLike\")\n    },\n    shorthand: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && node.computed) {\n          throw new TypeError(\"Property shorthand of ObjectProperty cannot be true if computed is true\");\n        }\n      }, {\n        type: \"boolean\"\n      }), function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && !(0, _is.default)(\"Identifier\", node.key)) {\n          throw new TypeError(\"Property shorthand of ObjectProperty cannot be true if key is not an Identifier\");\n        }\n      }),\n      default: false\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  },\n  visitor: [\"key\", \"value\", \"decorators\"],\n  aliases: [\"UserWhitespacable\", \"Property\", \"ObjectMember\"],\n  validate: function () {\n    const pattern = (0, _utils.assertNodeType)(\"Identifier\", \"Pattern\");\n    const expression = (0, _utils.assertNodeType)(\"Expression\");\n    return function (parent, key, node) {\n      if (!process.env.BABEL_TYPES_8_BREAKING) return;\n      const validator = (0, _is.default)(\"ObjectPattern\", parent) ? pattern : expression;\n      validator(node, \"value\", node.value);\n    };\n  }()\n});\n(0, _utils.default)(\"RestElement\", {\n  visitor: [\"argument\", \"typeAnnotation\"],\n  builder: [\"argument\"],\n  aliases: [\"LVal\", \"PatternLike\"],\n  deprecatedAlias: \"RestProperty\",\n  fields: Object.assign({}, patternLikeCommon, {\n    argument: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"LVal\") : (0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"MemberExpression\")\n    }\n  }),\n\n  validate(parent, key) {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return;\n    const match = /(\\w+)\\[(\\d+)\\]/.exec(key);\n    if (!match) throw new Error(\"Internal Babel error: malformed key.\");\n    const [, listKey, index] = match;\n\n    if (parent[listKey].length > index + 1) {\n      throw new TypeError(`RestElement must be last element of ${listKey}`);\n    }\n  }\n\n});\n(0, _utils.default)(\"ReturnStatement\", {\n  visitor: [\"argument\"],\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"SequenceExpression\", {\n  visitor: [\"expressions\"],\n  fields: {\n    expressions: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\")))\n    }\n  },\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ParenthesizedExpression\", {\n  visitor: [\"expression\"],\n  aliases: [\"Expression\", \"ExpressionWrapper\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"SwitchCase\", {\n  visitor: [\"test\", \"consequent\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    consequent: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  }\n});\n(0, _utils.default)(\"SwitchStatement\", {\n  visitor: [\"discriminant\", \"cases\"],\n  aliases: [\"Statement\", \"BlockParent\", \"Scopable\"],\n  fields: {\n    discriminant: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    cases: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"SwitchCase\")))\n    }\n  }\n});\n(0, _utils.default)(\"ThisExpression\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ThrowStatement\", {\n  visitor: [\"argument\"],\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"TryStatement\", {\n  visitor: [\"block\", \"handler\", \"finalizer\"],\n  aliases: [\"Statement\"],\n  fields: {\n    block: {\n      validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"BlockStatement\"), Object.assign(function (node) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (!node.handler && !node.finalizer) {\n          throw new TypeError(\"TryStatement expects either a handler or finalizer, or both\");\n        }\n      }, {\n        oneOfNodeTypes: [\"BlockStatement\"]\n      }))\n    },\n    handler: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"CatchClause\")\n    },\n    finalizer: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }\n});\n(0, _utils.default)(\"UnaryExpression\", {\n  builder: [\"operator\", \"argument\", \"prefix\"],\n  fields: {\n    prefix: {\n      default: true\n    },\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.UNARY_OPERATORS)\n    }\n  },\n  visitor: [\"argument\"],\n  aliases: [\"UnaryLike\", \"Expression\"]\n});\n(0, _utils.default)(\"UpdateExpression\", {\n  builder: [\"operator\", \"argument\", \"prefix\"],\n  fields: {\n    prefix: {\n      default: false\n    },\n    argument: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"Expression\") : (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\")\n    },\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.UPDATE_OPERATORS)\n    }\n  },\n  visitor: [\"argument\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"VariableDeclaration\", {\n  builder: [\"kind\", \"declarations\"],\n  visitor: [\"declarations\"],\n  aliases: [\"Statement\", \"Declaration\"],\n  fields: {\n    declare: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    kind: {\n      validate: (0, _utils.assertOneOf)(\"var\", \"let\", \"const\")\n    },\n    declarations: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"VariableDeclarator\")))\n    }\n  },\n\n  validate(parent, key, node) {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return;\n    if (!(0, _is.default)(\"ForXStatement\", parent, {\n      left: node\n    })) return;\n\n    if (node.declarations.length !== 1) {\n      throw new TypeError(`Exactly one VariableDeclarator is required in the VariableDeclaration of a ${parent.type}`);\n    }\n  }\n\n});\n(0, _utils.default)(\"VariableDeclarator\", {\n  visitor: [\"id\", \"init\"],\n  fields: {\n    id: {\n      validate: function () {\n        if (!process.env.BABEL_TYPES_8_BREAKING) {\n          return (0, _utils.assertNodeType)(\"LVal\");\n        }\n\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\");\n        const without = (0, _utils.assertNodeType)(\"Identifier\");\n        return function (node, key, val) {\n          const validator = node.init ? normal : without;\n          validator(node, key, val);\n        };\n      }()\n    },\n    definite: {\n      optional: true,\n      validate: (0, _utils.assertValueType)(\"boolean\")\n    },\n    init: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"WhileStatement\", {\n  visitor: [\"test\", \"body\"],\n  aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"WithStatement\", {\n  visitor: [\"object\", \"body\"],\n  aliases: [\"Statement\"],\n  fields: {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"AssignmentPattern\", {\n  visitor: [\"left\", \"right\", \"decorators\"],\n  builder: [\"left\", \"right\"],\n  aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    left: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"ObjectPattern\", \"ArrayPattern\", \"MemberExpression\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"ArrayPattern\", {\n  visitor: [\"elements\", \"typeAnnotation\"],\n  builder: [\"elements\"],\n  aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    elements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)(\"null\", \"PatternLike\")))\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"ArrowFunctionExpression\", {\n  builder: [\"params\", \"body\", \"async\"],\n  visitor: [\"params\", \"body\", \"returnType\", \"typeParameters\"],\n  aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Expression\", \"Pureish\"],\n  fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n    expression: {\n      validate: (0, _utils.assertValueType)(\"boolean\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\", \"Expression\")\n    }\n  })\n});\n(0, _utils.default)(\"ClassBody\", {\n  visitor: [\"body\"],\n  fields: {\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ClassMethod\", \"ClassPrivateMethod\", \"ClassProperty\", \"ClassPrivateProperty\", \"TSDeclareMethod\", \"TSIndexSignature\")))\n    }\n  }\n});\n(0, _utils.default)(\"ClassExpression\", {\n  builder: [\"id\", \"superClass\", \"body\", \"decorators\"],\n  visitor: [\"id\", \"body\", \"superClass\", \"mixins\", \"typeParameters\", \"superTypeParameters\", \"implements\", \"decorators\"],\n  aliases: [\"Scopable\", \"Class\", \"Expression\"],\n  fields: {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"ClassBody\")\n    },\n    superClass: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    superTypeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    },\n    implements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSExpressionWithTypeArguments\", \"ClassImplements\"))),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    mixins: {\n      validate: (0, _utils.assertNodeType)(\"InterfaceExtends\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ClassDeclaration\", {\n  inherits: \"ClassExpression\",\n  aliases: [\"Scopable\", \"Class\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"ClassBody\")\n    },\n    superClass: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    superTypeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    },\n    implements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSExpressionWithTypeArguments\", \"ClassImplements\"))),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    mixins: {\n      validate: (0, _utils.assertNodeType)(\"InterfaceExtends\"),\n      optional: true\n    },\n    declare: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    abstract: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  },\n  validate: function () {\n    const identifier = (0, _utils.assertNodeType)(\"Identifier\");\n    return function (parent, key, node) {\n      if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n      if (!(0, _is.default)(\"ExportDefaultDeclaration\", parent)) {\n        identifier(node, \"id\", node.id);\n      }\n    };\n  }()\n});\n(0, _utils.default)(\"ExportAllDeclaration\", {\n  visitor: [\"source\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n  fields: {\n    source: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"ExportDefaultDeclaration\", {\n  visitor: [\"declaration\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n  fields: {\n    declaration: {\n      validate: (0, _utils.assertNodeType)(\"FunctionDeclaration\", \"TSDeclareFunction\", \"ClassDeclaration\", \"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"ExportNamedDeclaration\", {\n  visitor: [\"declaration\", \"specifiers\", \"source\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n  fields: {\n    declaration: {\n      optional: true,\n      validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"Declaration\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && node.specifiers.length) {\n          throw new TypeError(\"Only declaration or specifiers is allowed on ExportNamedDeclaration\");\n        }\n      }, {\n        oneOfNodeTypes: [\"Declaration\"]\n      }), function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && node.source) {\n          throw new TypeError(\"Cannot export a declaration from a source\");\n        }\n      })\n    },\n    specifiers: {\n      default: [],\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)(function () {\n        const sourced = (0, _utils.assertNodeType)(\"ExportSpecifier\", \"ExportDefaultSpecifier\", \"ExportNamespaceSpecifier\");\n        const sourceless = (0, _utils.assertNodeType)(\"ExportSpecifier\");\n        if (!process.env.BABEL_TYPES_8_BREAKING) return sourced;\n        return function (node, key, val) {\n          const validator = node.source ? sourced : sourceless;\n          validator(node, key, val);\n        };\n      }()))\n    },\n    source: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\"),\n      optional: true\n    },\n    exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"type\", \"value\"))\n  }\n});\n(0, _utils.default)(\"ExportSpecifier\", {\n  visitor: [\"local\", \"exported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    exported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"ForOfStatement\", {\n  visitor: [\"left\", \"right\", \"body\"],\n  builder: [\"left\", \"right\", \"body\", \"await\"],\n  aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\", \"ForXStatement\"],\n  fields: {\n    left: {\n      validate: function () {\n        if (!process.env.BABEL_TYPES_8_BREAKING) {\n          return (0, _utils.assertNodeType)(\"VariableDeclaration\", \"LVal\");\n        }\n\n        const declaration = (0, _utils.assertNodeType)(\"VariableDeclaration\");\n        const lval = (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\");\n        return function (node, key, val) {\n          if ((0, _is.default)(\"VariableDeclaration\", val)) {\n            declaration(node, key, val);\n          } else {\n            lval(node, key, val);\n          }\n        };\n      }()\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    },\n    await: {\n      default: false\n    }\n  }\n});\n(0, _utils.default)(\"ImportDeclaration\", {\n  visitor: [\"specifiers\", \"source\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\"],\n  fields: {\n    specifiers: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ImportSpecifier\", \"ImportDefaultSpecifier\", \"ImportNamespaceSpecifier\")))\n    },\n    source: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n    },\n    importKind: {\n      validate: (0, _utils.assertOneOf)(\"type\", \"typeof\", \"value\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ImportDefaultSpecifier\", {\n  visitor: [\"local\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"ImportNamespaceSpecifier\", {\n  visitor: [\"local\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"ImportSpecifier\", {\n  visitor: [\"local\", \"imported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    imported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n    },\n    importKind: {\n      validate: (0, _utils.assertOneOf)(\"type\", \"typeof\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"MetaProperty\", {\n  visitor: [\"meta\", \"property\"],\n  aliases: [\"Expression\"],\n  fields: {\n    meta: {\n      validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"Identifier\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n        let property;\n\n        switch (val.name) {\n          case \"function\":\n            property = \"sent\";\n            break;\n\n          case \"new\":\n            property = \"target\";\n            break;\n\n          case \"import\":\n            property = \"meta\";\n            break;\n        }\n\n        if (!(0, _is.default)(\"Identifier\", node.property, {\n          name: property\n        })) {\n          throw new TypeError(\"Unrecognised MetaProperty\");\n        }\n      }, {\n        oneOfNodeTypes: [\"Identifier\"]\n      }))\n    },\n    property: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\nconst classMethodOrPropertyCommon = {\n  abstract: {\n    validate: (0, _utils.assertValueType)(\"boolean\"),\n    optional: true\n  },\n  accessibility: {\n    validate: (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\"),\n    optional: true\n  },\n  static: {\n    default: false\n  },\n  computed: {\n    default: false\n  },\n  optional: {\n    validate: (0, _utils.assertValueType)(\"boolean\"),\n    optional: true\n  },\n  key: {\n    validate: (0, _utils.chain)(function () {\n      const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n      const computed = (0, _utils.assertNodeType)(\"Expression\");\n      return function (node, key, val) {\n        const validator = node.computed ? computed : normal;\n        validator(node, key, val);\n      };\n    }(), (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\", \"Expression\"))\n  }\n};\nexports.classMethodOrPropertyCommon = classMethodOrPropertyCommon;\nconst classMethodOrDeclareMethodCommon = Object.assign({}, functionCommon, classMethodOrPropertyCommon, {\n  kind: {\n    validate: (0, _utils.assertOneOf)(\"get\", \"set\", \"method\", \"constructor\"),\n    default: \"method\"\n  },\n  access: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\")),\n    optional: true\n  },\n  decorators: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n    optional: true\n  }\n});\nexports.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon;\n(0, _utils.default)(\"ClassMethod\", {\n  aliases: [\"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\"],\n  builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"static\", \"generator\", \"async\"],\n  visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n  fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, {\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  })\n});\n(0, _utils.default)(\"ObjectPattern\", {\n  visitor: [\"properties\", \"typeAnnotation\", \"decorators\"],\n  builder: [\"properties\"],\n  aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    properties: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"RestElement\", \"ObjectProperty\")))\n    }\n  })\n});\n(0, _utils.default)(\"SpreadElement\", {\n  visitor: [\"argument\"],\n  aliases: [\"UnaryLike\"],\n  deprecatedAlias: \"SpreadProperty\",\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"Super\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"TaggedTemplateExpression\", {\n  visitor: [\"tag\", \"quasi\"],\n  aliases: [\"Expression\"],\n  fields: {\n    tag: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    quasi: {\n      validate: (0, _utils.assertNodeType)(\"TemplateLiteral\")\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"TemplateElement\", {\n  builder: [\"value\", \"tail\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertShape)({\n        raw: {\n          validate: (0, _utils.assertValueType)(\"string\")\n        },\n        cooked: {\n          validate: (0, _utils.assertValueType)(\"string\"),\n          optional: true\n        }\n      })\n    },\n    tail: {\n      default: false\n    }\n  }\n});\n(0, _utils.default)(\"TemplateLiteral\", {\n  visitor: [\"quasis\", \"expressions\"],\n  aliases: [\"Expression\", \"Literal\"],\n  fields: {\n    quasis: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TemplateElement\")))\n    },\n    expressions: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"TSType\")), function (node, key, val) {\n        if (node.quasis.length !== val.length + 1) {\n          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}`);\n        }\n      })\n    }\n  }\n});\n(0, _utils.default)(\"YieldExpression\", {\n  builder: [\"argument\", \"delegate\"],\n  visitor: [\"argument\"],\n  aliases: [\"Expression\", \"Terminatorless\"],\n  fields: {\n    delegate: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && !node.argument) {\n          throw new TypeError(\"Property delegate of YieldExpression cannot be true if there is no argument\");\n        }\n      }, {\n        type: \"boolean\"\n      })),\n      default: false\n    },\n    argument: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"AwaitExpression\", {\n  builder: [\"argument\"],\n  visitor: [\"argument\"],\n  aliases: [\"Expression\", \"Terminatorless\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"Import\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"BigIntLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"ExportNamespaceSpecifier\", {\n  visitor: [\"exported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    exported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"OptionalMemberExpression\", {\n  builder: [\"object\", \"property\", \"computed\", \"optional\"],\n  visitor: [\"object\", \"property\"],\n  aliases: [\"Expression\"],\n  fields: {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    property: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\"];\n        return validator;\n      }()\n    },\n    computed: {\n      default: false\n    },\n    optional: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)(\"boolean\") : (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), (0, _utils.assertOptionalChainStart)())\n    }\n  }\n});\n(0, _utils.default)(\"OptionalCallExpression\", {\n  visitor: [\"callee\", \"arguments\", \"typeParameters\", \"typeArguments\"],\n  builder: [\"callee\", \"arguments\", \"optional\"],\n  aliases: [\"Expression\"],\n  fields: {\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    arguments: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\", \"JSXNamespacedName\")))\n    },\n    optional: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)(\"boolean\") : (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), (0, _utils.assertOptionalChainStart)())\n    },\n    typeArguments: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\"),\n      optional: true\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  }\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nconst defineInterfaceishType = (name, typeParameterType = \"TypeParameterDeclaration\") => {\n  (0, _utils.default)(name, {\n    builder: [\"id\", \"typeParameters\", \"extends\", \"body\"],\n    visitor: [\"id\", \"typeParameters\", \"extends\", \"mixins\", \"implements\", \"body\"],\n    aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n    fields: {\n      id: (0, _utils.validateType)(\"Identifier\"),\n      typeParameters: (0, _utils.validateOptionalType)(typeParameterType),\n      extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"InterfaceExtends\")),\n      mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"InterfaceExtends\")),\n      implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ClassImplements\")),\n      body: (0, _utils.validateType)(\"ObjectTypeAnnotation\")\n    }\n  });\n};\n\n(0, _utils.default)(\"AnyTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ArrayTypeAnnotation\", {\n  visitor: [\"elementType\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    elementType: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"BooleanTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"BooleanLiteralTypeAnnotation\", {\n  builder: [\"value\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    value: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"NullLiteralTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ClassImplements\", {\n  visitor: [\"id\", \"typeParameters\"],\n  aliases: [\"Flow\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterInstantiation\")\n  }\n});\ndefineInterfaceishType(\"DeclareClass\");\n(0, _utils.default)(\"DeclareFunction\", {\n  visitor: [\"id\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    predicate: (0, _utils.validateOptionalType)(\"DeclaredPredicate\")\n  }\n});\ndefineInterfaceishType(\"DeclareInterface\");\n(0, _utils.default)(\"DeclareModule\", {\n  builder: [\"id\", \"body\", \"kind\"],\n  visitor: [\"id\", \"body\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    body: (0, _utils.validateType)(\"BlockStatement\"),\n    kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"CommonJS\", \"ES\"))\n  }\n});\n(0, _utils.default)(\"DeclareModuleExports\", {\n  visitor: [\"typeAnnotation\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TypeAnnotation\")\n  }\n});\n(0, _utils.default)(\"DeclareTypeAlias\", {\n  visitor: [\"id\", \"typeParameters\", \"right\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    right: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"DeclareOpaqueType\", {\n  visitor: [\"id\", \"typeParameters\", \"supertype\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    supertype: (0, _utils.validateOptionalType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"DeclareVariable\", {\n  visitor: [\"id\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\")\n  }\n});\n(0, _utils.default)(\"DeclareExportDeclaration\", {\n  visitor: [\"declaration\", \"specifiers\", \"source\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    declaration: (0, _utils.validateOptionalType)(\"Flow\"),\n    specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)([\"ExportSpecifier\", \"ExportNamespaceSpecifier\"])),\n    source: (0, _utils.validateOptionalType)(\"StringLiteral\"),\n    default: (0, _utils.validateOptional)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"DeclareExportAllDeclaration\", {\n  visitor: [\"source\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    source: (0, _utils.validateType)(\"StringLiteral\"),\n    exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"type\", \"value\"))\n  }\n});\n(0, _utils.default)(\"DeclaredPredicate\", {\n  visitor: [\"value\"],\n  aliases: [\"Flow\", \"FlowPredicate\"],\n  fields: {\n    value: (0, _utils.validateType)(\"Flow\")\n  }\n});\n(0, _utils.default)(\"ExistsTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\"]\n});\n(0, _utils.default)(\"FunctionTypeAnnotation\", {\n  visitor: [\"typeParameters\", \"params\", \"rest\", \"returnType\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    params: (0, _utils.validate)((0, _utils.arrayOfType)(\"FunctionTypeParam\")),\n    rest: (0, _utils.validateOptionalType)(\"FunctionTypeParam\"),\n    returnType: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"FunctionTypeParam\", {\n  visitor: [\"name\", \"typeAnnotation\"],\n  aliases: [\"Flow\"],\n  fields: {\n    name: (0, _utils.validateOptionalType)(\"Identifier\"),\n    typeAnnotation: (0, _utils.validateType)(\"FlowType\"),\n    optional: (0, _utils.validateOptional)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"GenericTypeAnnotation\", {\n  visitor: [\"id\", \"typeParameters\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"QualifiedTypeIdentifier\"]),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"InferredPredicate\", {\n  aliases: [\"Flow\", \"FlowPredicate\"]\n});\n(0, _utils.default)(\"InterfaceExtends\", {\n  visitor: [\"id\", \"typeParameters\"],\n  aliases: [\"Flow\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"QualifiedTypeIdentifier\"]),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterInstantiation\")\n  }\n});\ndefineInterfaceishType(\"InterfaceDeclaration\");\n(0, _utils.default)(\"InterfaceTypeAnnotation\", {\n  visitor: [\"extends\", \"body\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"InterfaceExtends\")),\n    body: (0, _utils.validateType)(\"ObjectTypeAnnotation\")\n  }\n});\n(0, _utils.default)(\"IntersectionTypeAnnotation\", {\n  visitor: [\"types\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    types: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"MixedTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"EmptyTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"NullableTypeAnnotation\", {\n  visitor: [\"typeAnnotation\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"NumberLiteralTypeAnnotation\", {\n  builder: [\"value\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    value: (0, _utils.validate)((0, _utils.assertValueType)(\"number\"))\n  }\n});\n(0, _utils.default)(\"NumberTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ObjectTypeAnnotation\", {\n  visitor: [\"properties\", \"indexers\", \"callProperties\", \"internalSlots\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  builder: [\"properties\", \"indexers\", \"callProperties\", \"internalSlots\", \"exact\"],\n  fields: {\n    properties: (0, _utils.validate)((0, _utils.arrayOfType)([\"ObjectTypeProperty\", \"ObjectTypeSpreadProperty\"])),\n    indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ObjectTypeIndexer\")),\n    callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ObjectTypeCallProperty\")),\n    internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ObjectTypeInternalSlot\")),\n    exact: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      default: false\n    },\n    inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"ObjectTypeInternalSlot\", {\n  visitor: [\"id\", \"value\", \"optional\", \"static\", \"method\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    value: (0, _utils.validateType)(\"FlowType\"),\n    optional: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    method: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"ObjectTypeCallProperty\", {\n  visitor: [\"value\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    value: (0, _utils.validateType)(\"FlowType\"),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"ObjectTypeIndexer\", {\n  visitor: [\"id\", \"key\", \"value\", \"variance\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    id: (0, _utils.validateOptionalType)(\"Identifier\"),\n    key: (0, _utils.validateType)(\"FlowType\"),\n    value: (0, _utils.validateType)(\"FlowType\"),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    variance: (0, _utils.validateOptionalType)(\"Variance\")\n  }\n});\n(0, _utils.default)(\"ObjectTypeProperty\", {\n  visitor: [\"key\", \"value\", \"variance\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    key: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    value: (0, _utils.validateType)(\"FlowType\"),\n    kind: (0, _utils.validate)((0, _utils.assertOneOf)(\"init\", \"get\", \"set\")),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    proto: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    optional: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    variance: (0, _utils.validateOptionalType)(\"Variance\")\n  }\n});\n(0, _utils.default)(\"ObjectTypeSpreadProperty\", {\n  visitor: [\"argument\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    argument: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"OpaqueType\", {\n  visitor: [\"id\", \"typeParameters\", \"supertype\", \"impltype\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    supertype: (0, _utils.validateOptionalType)(\"FlowType\"),\n    impltype: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"QualifiedTypeIdentifier\", {\n  visitor: [\"id\", \"qualification\"],\n  aliases: [\"Flow\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    qualification: (0, _utils.validateType)([\"Identifier\", \"QualifiedTypeIdentifier\"])\n  }\n});\n(0, _utils.default)(\"StringLiteralTypeAnnotation\", {\n  builder: [\"value\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    value: (0, _utils.validate)((0, _utils.assertValueType)(\"string\"))\n  }\n});\n(0, _utils.default)(\"StringTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"SymbolTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ThisTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"TupleTypeAnnotation\", {\n  visitor: [\"types\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    types: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"TypeofTypeAnnotation\", {\n  visitor: [\"argument\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    argument: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"TypeAlias\", {\n  visitor: [\"id\", \"typeParameters\", \"right\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    right: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"TypeAnnotation\", {\n  aliases: [\"Flow\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"TypeCastExpression\", {\n  visitor: [\"expression\", \"typeAnnotation\"],\n  aliases: [\"Flow\", \"ExpressionWrapper\", \"Expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\"),\n    typeAnnotation: (0, _utils.validateType)(\"TypeAnnotation\")\n  }\n});\n(0, _utils.default)(\"TypeParameter\", {\n  aliases: [\"Flow\"],\n  visitor: [\"bound\", \"default\", \"variance\"],\n  fields: {\n    name: (0, _utils.validate)((0, _utils.assertValueType)(\"string\")),\n    bound: (0, _utils.validateOptionalType)(\"TypeAnnotation\"),\n    default: (0, _utils.validateOptionalType)(\"FlowType\"),\n    variance: (0, _utils.validateOptionalType)(\"Variance\")\n  }\n});\n(0, _utils.default)(\"TypeParameterDeclaration\", {\n  aliases: [\"Flow\"],\n  visitor: [\"params\"],\n  fields: {\n    params: (0, _utils.validate)((0, _utils.arrayOfType)(\"TypeParameter\"))\n  }\n});\n(0, _utils.default)(\"TypeParameterInstantiation\", {\n  aliases: [\"Flow\"],\n  visitor: [\"params\"],\n  fields: {\n    params: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"UnionTypeAnnotation\", {\n  visitor: [\"types\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    types: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"Variance\", {\n  aliases: [\"Flow\"],\n  builder: [\"kind\"],\n  fields: {\n    kind: (0, _utils.validate)((0, _utils.assertOneOf)(\"minus\", \"plus\"))\n  }\n});\n(0, _utils.default)(\"VoidTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"EnumDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"body\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    body: (0, _utils.validateType)([\"EnumBooleanBody\", \"EnumNumberBody\", \"EnumStringBody\", \"EnumSymbolBody\"])\n  }\n});\n(0, _utils.default)(\"EnumBooleanBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    explicit: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    members: (0, _utils.validateArrayOfType)(\"EnumBooleanMember\")\n  }\n});\n(0, _utils.default)(\"EnumNumberBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    explicit: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    members: (0, _utils.validateArrayOfType)(\"EnumNumberMember\")\n  }\n});\n(0, _utils.default)(\"EnumStringBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    explicit: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    members: (0, _utils.validateArrayOfType)([\"EnumStringMember\", \"EnumDefaultedMember\"])\n  }\n});\n(0, _utils.default)(\"EnumSymbolBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    members: (0, _utils.validateArrayOfType)(\"EnumDefaultedMember\")\n  }\n});\n(0, _utils.default)(\"EnumBooleanMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    init: (0, _utils.validateType)(\"BooleanLiteral\")\n  }\n});\n(0, _utils.default)(\"EnumNumberMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\", \"init\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    init: (0, _utils.validateType)(\"NumericLiteral\")\n  }\n});\n(0, _utils.default)(\"EnumStringMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\", \"init\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    init: (0, _utils.validateType)(\"StringLiteral\")\n  }\n});\n(0, _utils.default)(\"EnumDefaultedMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\")\n  }\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n(0, _utils.default)(\"JSXAttribute\", {\n  visitor: [\"name\", \"value\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\", \"JSXNamespacedName\")\n    },\n    value: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"JSXElement\", \"JSXFragment\", \"StringLiteral\", \"JSXExpressionContainer\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXClosingElement\", {\n  visitor: [\"name\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\", \"JSXMemberExpression\", \"JSXNamespacedName\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXElement\", {\n  builder: [\"openingElement\", \"closingElement\", \"children\", \"selfClosing\"],\n  visitor: [\"openingElement\", \"children\", \"closingElement\"],\n  aliases: [\"JSX\", \"Immutable\", \"Expression\"],\n  fields: {\n    openingElement: {\n      validate: (0, _utils.assertNodeType)(\"JSXOpeningElement\")\n    },\n    closingElement: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"JSXClosingElement\")\n    },\n    children: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"JSXText\", \"JSXExpressionContainer\", \"JSXSpreadChild\", \"JSXElement\", \"JSXFragment\")))\n    },\n    selfClosing: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"JSXEmptyExpression\", {\n  aliases: [\"JSX\"]\n});\n(0, _utils.default)(\"JSXExpressionContainer\", {\n  visitor: [\"expression\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\", \"JSXEmptyExpression\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXSpreadChild\", {\n  visitor: [\"expression\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXIdentifier\", {\n  builder: [\"name\"],\n  aliases: [\"JSX\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXMemberExpression\", {\n  visitor: [\"object\", \"property\"],\n  aliases: [\"JSX\"],\n  fields: {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"JSXMemberExpression\", \"JSXIdentifier\")\n    },\n    property: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXNamespacedName\", {\n  visitor: [\"namespace\", \"name\"],\n  aliases: [\"JSX\"],\n  fields: {\n    namespace: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\")\n    },\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXOpeningElement\", {\n  builder: [\"name\", \"attributes\", \"selfClosing\"],\n  visitor: [\"name\", \"attributes\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\", \"JSXMemberExpression\", \"JSXNamespacedName\")\n    },\n    selfClosing: {\n      default: false\n    },\n    attributes: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"JSXAttribute\", \"JSXSpreadAttribute\")))\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"JSXSpreadAttribute\", {\n  visitor: [\"argument\"],\n  aliases: [\"JSX\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXText\", {\n  aliases: [\"JSX\", \"Immutable\"],\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXFragment\", {\n  builder: [\"openingFragment\", \"closingFragment\", \"children\"],\n  visitor: [\"openingFragment\", \"children\", \"closingFragment\"],\n  aliases: [\"JSX\", \"Immutable\", \"Expression\"],\n  fields: {\n    openingFragment: {\n      validate: (0, _utils.assertNodeType)(\"JSXOpeningFragment\")\n    },\n    closingFragment: {\n      validate: (0, _utils.assertNodeType)(\"JSXClosingFragment\")\n    },\n    children: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"JSXText\", \"JSXExpressionContainer\", \"JSXSpreadChild\", \"JSXElement\", \"JSXFragment\")))\n    }\n  }\n});\n(0, _utils.default)(\"JSXOpeningFragment\", {\n  aliases: [\"JSX\", \"Immutable\"]\n});\n(0, _utils.default)(\"JSXClosingFragment\", {\n  aliases: [\"JSX\", \"Immutable\"]\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PLACEHOLDERS_FLIPPED_ALIAS = exports.PLACEHOLDERS_ALIAS = exports.PLACEHOLDERS = void 0;\n\nvar _utils = require(\"./utils\");\n\nconst PLACEHOLDERS = [\"Identifier\", \"StringLiteral\", \"Expression\", \"Statement\", \"Declaration\", \"BlockStatement\", \"ClassBody\", \"Pattern\"];\nexports.PLACEHOLDERS = PLACEHOLDERS;\nconst PLACEHOLDERS_ALIAS = {\n  Declaration: [\"Statement\"],\n  Pattern: [\"PatternLike\", \"LVal\"]\n};\nexports.PLACEHOLDERS_ALIAS = PLACEHOLDERS_ALIAS;\n\nfor (const type of PLACEHOLDERS) {\n  const alias = _utils.ALIAS_KEYS[type];\n  if (alias == null ? void 0 : alias.length) PLACEHOLDERS_ALIAS[type] = alias;\n}\n\nconst PLACEHOLDERS_FLIPPED_ALIAS = {};\nexports.PLACEHOLDERS_FLIPPED_ALIAS = PLACEHOLDERS_FLIPPED_ALIAS;\nObject.keys(PLACEHOLDERS_ALIAS).forEach(type => {\n  PLACEHOLDERS_ALIAS[type].forEach(alias => {\n    if (!Object.hasOwnProperty.call(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {\n      PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];\n    }\n\n    PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);\n  });\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nvar _placeholders = require(\"./placeholders\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n(0, _utils.default)(\"Noop\", {\n  visitor: []\n});\n(0, _utils.default)(\"Placeholder\", {\n  visitor: [],\n  builder: [\"expectedNode\", \"name\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    expectedNode: {\n      validate: (0, _utils.assertOneOf)(..._placeholders.PLACEHOLDERS)\n    }\n  }\n});\n(0, _utils.default)(\"V8IntrinsicIdentifier\", {\n  builder: [\"name\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nvar _core = require(\"./core\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n(0, _utils.default)(\"ArgumentPlaceholder\", {});\n(0, _utils.default)(\"BindExpression\", {\n  visitor: [\"object\", \"callee\"],\n  aliases: [\"Expression\"],\n  fields: !process.env.BABEL_TYPES_8_BREAKING ? {\n    object: {\n      validate: Object.assign(() => {}, {\n        oneOfNodeTypes: [\"Expression\"]\n      })\n    },\n    callee: {\n      validate: Object.assign(() => {}, {\n        oneOfNodeTypes: [\"Expression\"]\n      })\n    }\n  } : {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"ClassProperty\", {\n  visitor: [\"key\", \"value\", \"typeAnnotation\", \"decorators\"],\n  builder: [\"key\", \"value\", \"typeAnnotation\", \"decorators\", \"computed\", \"static\"],\n  aliases: [\"Property\"],\n  fields: Object.assign({}, _core.classMethodOrPropertyCommon, {\n    value: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    definite: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    typeAnnotation: {\n      validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    readonly: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    declare: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"PipelineTopicExpression\", {\n  builder: [\"expression\"],\n  visitor: [\"expression\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"PipelineBareFunction\", {\n  builder: [\"callee\"],\n  visitor: [\"callee\"],\n  fields: {\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"PipelinePrimaryTopicReference\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ClassPrivateProperty\", {\n  visitor: [\"key\", \"value\", \"decorators\"],\n  builder: [\"key\", \"value\", \"decorators\", \"static\"],\n  aliases: [\"Property\", \"Private\"],\n  fields: {\n    key: {\n      validate: (0, _utils.assertNodeType)(\"PrivateName\")\n    },\n    value: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ClassPrivateMethod\", {\n  builder: [\"kind\", \"key\", \"params\", \"body\", \"static\"],\n  visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n  aliases: [\"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\", \"Private\"],\n  fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, _core.functionTypeAnnotationCommon, {\n    key: {\n      validate: (0, _utils.assertNodeType)(\"PrivateName\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  })\n});\n(0, _utils.default)(\"ImportAttribute\", {\n  visitor: [\"key\", \"value\"],\n  fields: {\n    key: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n    },\n    value: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"Decorator\", {\n  visitor: [\"expression\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"DoExpression\", {\n  visitor: [\"body\"],\n  aliases: [\"Expression\"],\n  fields: {\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }\n});\n(0, _utils.default)(\"ExportDefaultSpecifier\", {\n  visitor: [\"exported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    exported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"PrivateName\", {\n  visitor: [\"id\"],\n  aliases: [\"Private\"],\n  fields: {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"RecordExpression\", {\n  visitor: [\"properties\"],\n  aliases: [\"Expression\"],\n  fields: {\n    properties: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ObjectProperty\", \"SpreadElement\")))\n    }\n  }\n});\n(0, _utils.default)(\"TupleExpression\", {\n  fields: {\n    elements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\"))),\n      default: []\n    }\n  },\n  visitor: [\"elements\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"DecimalLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"StaticBlock\", {\n  visitor: [\"body\"],\n  fields: {\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\"]\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nvar _core = require(\"./core\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nconst bool = (0, _utils.assertValueType)(\"boolean\");\nconst tSFunctionTypeAnnotationCommon = {\n  returnType: {\n    validate: (0, _utils.assertNodeType)(\"TSTypeAnnotation\", \"Noop\"),\n    optional: true\n  },\n  typeParameters: {\n    validate: (0, _utils.assertNodeType)(\"TSTypeParameterDeclaration\", \"Noop\"),\n    optional: true\n  }\n};\n(0, _utils.default)(\"TSParameterProperty\", {\n  aliases: [\"LVal\"],\n  visitor: [\"parameter\"],\n  fields: {\n    accessibility: {\n      validate: (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\"),\n      optional: true\n    },\n    readonly: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    parameter: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"AssignmentPattern\")\n    }\n  }\n});\n(0, _utils.default)(\"TSDeclareFunction\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"typeParameters\", \"params\", \"returnType\"],\n  fields: Object.assign({}, _core.functionDeclarationCommon, tSFunctionTypeAnnotationCommon)\n});\n(0, _utils.default)(\"TSDeclareMethod\", {\n  visitor: [\"decorators\", \"key\", \"typeParameters\", \"params\", \"returnType\"],\n  fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, tSFunctionTypeAnnotationCommon)\n});\n(0, _utils.default)(\"TSQualifiedName\", {\n  aliases: [\"TSEntityName\"],\n  visitor: [\"left\", \"right\"],\n  fields: {\n    left: (0, _utils.validateType)(\"TSEntityName\"),\n    right: (0, _utils.validateType)(\"Identifier\")\n  }\n});\nconst signatureDeclarationCommon = {\n  typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterDeclaration\"),\n  parameters: (0, _utils.validateArrayOfType)([\"Identifier\", \"RestElement\"]),\n  typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\")\n};\nconst callConstructSignatureDeclaration = {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"typeParameters\", \"parameters\", \"typeAnnotation\"],\n  fields: signatureDeclarationCommon\n};\n(0, _utils.default)(\"TSCallSignatureDeclaration\", callConstructSignatureDeclaration);\n(0, _utils.default)(\"TSConstructSignatureDeclaration\", callConstructSignatureDeclaration);\nconst namedTypeElementCommon = {\n  key: (0, _utils.validateType)(\"Expression\"),\n  computed: (0, _utils.validate)(bool),\n  optional: (0, _utils.validateOptional)(bool)\n};\n(0, _utils.default)(\"TSPropertySignature\", {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"key\", \"typeAnnotation\", \"initializer\"],\n  fields: Object.assign({}, namedTypeElementCommon, {\n    readonly: (0, _utils.validateOptional)(bool),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\"),\n    initializer: (0, _utils.validateOptionalType)(\"Expression\")\n  })\n});\n(0, _utils.default)(\"TSMethodSignature\", {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"key\", \"typeParameters\", \"parameters\", \"typeAnnotation\"],\n  fields: Object.assign({}, signatureDeclarationCommon, namedTypeElementCommon)\n});\n(0, _utils.default)(\"TSIndexSignature\", {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"parameters\", \"typeAnnotation\"],\n  fields: {\n    readonly: (0, _utils.validateOptional)(bool),\n    parameters: (0, _utils.validateArrayOfType)(\"Identifier\"),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\")\n  }\n});\nconst tsKeywordTypes = [\"TSAnyKeyword\", \"TSBooleanKeyword\", \"TSBigIntKeyword\", \"TSIntrinsicKeyword\", \"TSNeverKeyword\", \"TSNullKeyword\", \"TSNumberKeyword\", \"TSObjectKeyword\", \"TSStringKeyword\", \"TSSymbolKeyword\", \"TSUndefinedKeyword\", \"TSUnknownKeyword\", \"TSVoidKeyword\"];\n\nfor (const type of tsKeywordTypes) {\n  (0, _utils.default)(type, {\n    aliases: [\"TSType\", \"TSBaseType\"],\n    visitor: [],\n    fields: {}\n  });\n}\n\n(0, _utils.default)(\"TSThisType\", {\n  aliases: [\"TSType\", \"TSBaseType\"],\n  visitor: [],\n  fields: {}\n});\nconst fnOrCtr = {\n  aliases: [\"TSType\"],\n  visitor: [\"typeParameters\", \"parameters\", \"typeAnnotation\"],\n  fields: signatureDeclarationCommon\n};\n(0, _utils.default)(\"TSFunctionType\", fnOrCtr);\n(0, _utils.default)(\"TSConstructorType\", fnOrCtr);\n(0, _utils.default)(\"TSTypeReference\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeName\", \"typeParameters\"],\n  fields: {\n    typeName: (0, _utils.validateType)(\"TSEntityName\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"TSTypePredicate\", {\n  aliases: [\"TSType\"],\n  visitor: [\"parameterName\", \"typeAnnotation\"],\n  builder: [\"parameterName\", \"typeAnnotation\", \"asserts\"],\n  fields: {\n    parameterName: (0, _utils.validateType)([\"Identifier\", \"TSThisType\"]),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\"),\n    asserts: (0, _utils.validateOptional)(bool)\n  }\n});\n(0, _utils.default)(\"TSTypeQuery\", {\n  aliases: [\"TSType\"],\n  visitor: [\"exprName\"],\n  fields: {\n    exprName: (0, _utils.validateType)([\"TSEntityName\", \"TSImportType\"])\n  }\n});\n(0, _utils.default)(\"TSTypeLiteral\", {\n  aliases: [\"TSType\"],\n  visitor: [\"members\"],\n  fields: {\n    members: (0, _utils.validateArrayOfType)(\"TSTypeElement\")\n  }\n});\n(0, _utils.default)(\"TSArrayType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"elementType\"],\n  fields: {\n    elementType: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSTupleType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"elementTypes\"],\n  fields: {\n    elementTypes: (0, _utils.validateArrayOfType)([\"TSType\", \"TSNamedTupleMember\"])\n  }\n});\n(0, _utils.default)(\"TSOptionalType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSRestType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSNamedTupleMember\", {\n  visitor: [\"label\", \"elementType\"],\n  builder: [\"label\", \"elementType\", \"optional\"],\n  fields: {\n    label: (0, _utils.validateType)(\"Identifier\"),\n    optional: {\n      validate: bool,\n      default: false\n    },\n    elementType: (0, _utils.validateType)(\"TSType\")\n  }\n});\nconst unionOrIntersection = {\n  aliases: [\"TSType\"],\n  visitor: [\"types\"],\n  fields: {\n    types: (0, _utils.validateArrayOfType)(\"TSType\")\n  }\n};\n(0, _utils.default)(\"TSUnionType\", unionOrIntersection);\n(0, _utils.default)(\"TSIntersectionType\", unionOrIntersection);\n(0, _utils.default)(\"TSConditionalType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"checkType\", \"extendsType\", \"trueType\", \"falseType\"],\n  fields: {\n    checkType: (0, _utils.validateType)(\"TSType\"),\n    extendsType: (0, _utils.validateType)(\"TSType\"),\n    trueType: (0, _utils.validateType)(\"TSType\"),\n    falseType: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSInferType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeParameter\"],\n  fields: {\n    typeParameter: (0, _utils.validateType)(\"TSTypeParameter\")\n  }\n});\n(0, _utils.default)(\"TSParenthesizedType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSTypeOperator\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    operator: (0, _utils.validate)((0, _utils.assertValueType)(\"string\")),\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSIndexedAccessType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"objectType\", \"indexType\"],\n  fields: {\n    objectType: (0, _utils.validateType)(\"TSType\"),\n    indexType: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSMappedType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeParameter\", \"typeAnnotation\", \"nameType\"],\n  fields: {\n    readonly: (0, _utils.validateOptional)(bool),\n    typeParameter: (0, _utils.validateType)(\"TSTypeParameter\"),\n    optional: (0, _utils.validateOptional)(bool),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSType\"),\n    nameType: (0, _utils.validateOptionalType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSLiteralType\", {\n  aliases: [\"TSType\", \"TSBaseType\"],\n  visitor: [\"literal\"],\n  fields: {\n    literal: (0, _utils.validateType)([\"NumericLiteral\", \"StringLiteral\", \"BooleanLiteral\", \"BigIntLiteral\"])\n  }\n});\n(0, _utils.default)(\"TSExpressionWithTypeArguments\", {\n  aliases: [\"TSType\"],\n  visitor: [\"expression\", \"typeParameters\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"TSEntityName\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"TSInterfaceDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"typeParameters\", \"extends\", \"body\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterDeclaration\"),\n    extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"TSExpressionWithTypeArguments\")),\n    body: (0, _utils.validateType)(\"TSInterfaceBody\")\n  }\n});\n(0, _utils.default)(\"TSInterfaceBody\", {\n  visitor: [\"body\"],\n  fields: {\n    body: (0, _utils.validateArrayOfType)(\"TSTypeElement\")\n  }\n});\n(0, _utils.default)(\"TSTypeAliasDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"typeParameters\", \"typeAnnotation\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterDeclaration\"),\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSAsExpression\", {\n  aliases: [\"Expression\"],\n  visitor: [\"expression\", \"typeAnnotation\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\"),\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSTypeAssertion\", {\n  aliases: [\"Expression\"],\n  visitor: [\"typeAnnotation\", \"expression\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\"),\n    expression: (0, _utils.validateType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSEnumDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"members\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    const: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    members: (0, _utils.validateArrayOfType)(\"TSEnumMember\"),\n    initializer: (0, _utils.validateOptionalType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSEnumMember\", {\n  visitor: [\"id\", \"initializer\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    initializer: (0, _utils.validateOptionalType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSModuleDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"body\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    global: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    body: (0, _utils.validateType)([\"TSModuleBlock\", \"TSModuleDeclaration\"])\n  }\n});\n(0, _utils.default)(\"TSModuleBlock\", {\n  aliases: [\"Scopable\", \"Block\", \"BlockParent\"],\n  visitor: [\"body\"],\n  fields: {\n    body: (0, _utils.validateArrayOfType)(\"Statement\")\n  }\n});\n(0, _utils.default)(\"TSImportType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"argument\", \"qualifier\", \"typeParameters\"],\n  fields: {\n    argument: (0, _utils.validateType)(\"StringLiteral\"),\n    qualifier: (0, _utils.validateOptionalType)(\"TSEntityName\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"TSImportEqualsDeclaration\", {\n  aliases: [\"Statement\"],\n  visitor: [\"id\", \"moduleReference\"],\n  fields: {\n    isExport: (0, _utils.validate)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    moduleReference: (0, _utils.validateType)([\"TSEntityName\", \"TSExternalModuleReference\"])\n  }\n});\n(0, _utils.default)(\"TSExternalModuleReference\", {\n  visitor: [\"expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"StringLiteral\")\n  }\n});\n(0, _utils.default)(\"TSNonNullExpression\", {\n  aliases: [\"Expression\"],\n  visitor: [\"expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSExportAssignment\", {\n  aliases: [\"Statement\"],\n  visitor: [\"expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSNamespaceExportDeclaration\", {\n  aliases: [\"Statement\"],\n  visitor: [\"id\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\")\n  }\n});\n(0, _utils.default)(\"TSTypeAnnotation\", {\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: {\n      validate: (0, _utils.assertNodeType)(\"TSType\")\n    }\n  }\n});\n(0, _utils.default)(\"TSTypeParameterInstantiation\", {\n  visitor: [\"params\"],\n  fields: {\n    params: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSType\")))\n    }\n  }\n});\n(0, _utils.default)(\"TSTypeParameterDeclaration\", {\n  visitor: [\"params\"],\n  fields: {\n    params: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSTypeParameter\")))\n    }\n  }\n});\n(0, _utils.default)(\"TSTypeParameter\", {\n  builder: [\"constraint\", \"default\", \"name\"],\n  visitor: [\"constraint\", \"default\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    },\n    constraint: {\n      validate: (0, _utils.assertNodeType)(\"TSType\"),\n      optional: true\n    },\n    default: {\n      validate: (0, _utils.assertNodeType)(\"TSType\"),\n      optional: true\n    }\n  }\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"VISITOR_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.VISITOR_KEYS;\n  }\n});\nObject.defineProperty(exports, \"ALIAS_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.ALIAS_KEYS;\n  }\n});\nObject.defineProperty(exports, \"FLIPPED_ALIAS_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.FLIPPED_ALIAS_KEYS;\n  }\n});\nObject.defineProperty(exports, \"NODE_FIELDS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.NODE_FIELDS;\n  }\n});\nObject.defineProperty(exports, \"BUILDER_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.BUILDER_KEYS;\n  }\n});\nObject.defineProperty(exports, \"DEPRECATED_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.DEPRECATED_KEYS;\n  }\n});\nObject.defineProperty(exports, \"NODE_PARENT_VALIDATIONS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.NODE_PARENT_VALIDATIONS;\n  }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS\", {\n  enumerable: true,\n  get: function () {\n    return _placeholders.PLACEHOLDERS;\n  }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS_ALIAS\", {\n  enumerable: true,\n  get: function () {\n    return _placeholders.PLACEHOLDERS_ALIAS;\n  }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS_FLIPPED_ALIAS\", {\n  enumerable: true,\n  get: function () {\n    return _placeholders.PLACEHOLDERS_FLIPPED_ALIAS;\n  }\n});\nexports.TYPES = void 0;\n\nvar _toFastProperties = _interopRequireDefault(require(\"to-fast-properties\"));\n\nrequire(\"./core\");\n\nrequire(\"./flow\");\n\nrequire(\"./jsx\");\n\nrequire(\"./misc\");\n\nrequire(\"./experimental\");\n\nrequire(\"./typescript\");\n\nvar _utils = require(\"./utils\");\n\nvar _placeholders = require(\"./placeholders\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(0, _toFastProperties.default)(_utils.VISITOR_KEYS);\n(0, _toFastProperties.default)(_utils.ALIAS_KEYS);\n(0, _toFastProperties.default)(_utils.FLIPPED_ALIAS_KEYS);\n(0, _toFastProperties.default)(_utils.NODE_FIELDS);\n(0, _toFastProperties.default)(_utils.BUILDER_KEYS);\n(0, _toFastProperties.default)(_utils.DEPRECATED_KEYS);\n(0, _toFastProperties.default)(_placeholders.PLACEHOLDERS_ALIAS);\n(0, _toFastProperties.default)(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS);\nconst TYPES = Object.keys(_utils.VISITOR_KEYS).concat(Object.keys(_utils.FLIPPED_ALIAS_KEYS)).concat(Object.keys(_utils.DEPRECATED_KEYS));\nexports.TYPES = TYPES;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = builder;\n\nvar _clone = _interopRequireDefault(require(\"lodash/clone\"));\n\nvar _definitions = require(\"../definitions\");\n\nvar _validate = _interopRequireDefault(require(\"../validators/validate\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction builder(type, ...args) {\n  const keys = _definitions.BUILDER_KEYS[type];\n  const countArgs = args.length;\n\n  if (countArgs > keys.length) {\n    throw new Error(`${type}: Too many arguments passed. Received ${countArgs} but can receive no more than ${keys.length}`);\n  }\n\n  const node = {\n    type\n  };\n  let i = 0;\n  keys.forEach(key => {\n    const field = _definitions.NODE_FIELDS[type][key];\n    let arg;\n    if (i < countArgs) arg = args[i];\n    if (arg === undefined) arg = (0, _clone.default)(field.default);\n    node[key] = arg;\n    i++;\n  });\n\n  for (const key of Object.keys(node)) {\n    (0, _validate.default)(node, key, node[key]);\n  }\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ArrayExpression = exports.arrayExpression = arrayExpression;\nexports.AssignmentExpression = exports.assignmentExpression = assignmentExpression;\nexports.BinaryExpression = exports.binaryExpression = binaryExpression;\nexports.InterpreterDirective = exports.interpreterDirective = interpreterDirective;\nexports.Directive = exports.directive = directive;\nexports.DirectiveLiteral = exports.directiveLiteral = directiveLiteral;\nexports.BlockStatement = exports.blockStatement = blockStatement;\nexports.BreakStatement = exports.breakStatement = breakStatement;\nexports.CallExpression = exports.callExpression = callExpression;\nexports.CatchClause = exports.catchClause = catchClause;\nexports.ConditionalExpression = exports.conditionalExpression = conditionalExpression;\nexports.ContinueStatement = exports.continueStatement = continueStatement;\nexports.DebuggerStatement = exports.debuggerStatement = debuggerStatement;\nexports.DoWhileStatement = exports.doWhileStatement = doWhileStatement;\nexports.EmptyStatement = exports.emptyStatement = emptyStatement;\nexports.ExpressionStatement = exports.expressionStatement = expressionStatement;\nexports.File = exports.file = file;\nexports.ForInStatement = exports.forInStatement = forInStatement;\nexports.ForStatement = exports.forStatement = forStatement;\nexports.FunctionDeclaration = exports.functionDeclaration = functionDeclaration;\nexports.FunctionExpression = exports.functionExpression = functionExpression;\nexports.Identifier = exports.identifier = identifier;\nexports.IfStatement = exports.ifStatement = ifStatement;\nexports.LabeledStatement = exports.labeledStatement = labeledStatement;\nexports.StringLiteral = exports.stringLiteral = stringLiteral;\nexports.NumericLiteral = exports.numericLiteral = numericLiteral;\nexports.NullLiteral = exports.nullLiteral = nullLiteral;\nexports.BooleanLiteral = exports.booleanLiteral = booleanLiteral;\nexports.RegExpLiteral = exports.regExpLiteral = regExpLiteral;\nexports.LogicalExpression = exports.logicalExpression = logicalExpression;\nexports.MemberExpression = exports.memberExpression = memberExpression;\nexports.NewExpression = exports.newExpression = newExpression;\nexports.Program = exports.program = program;\nexports.ObjectExpression = exports.objectExpression = objectExpression;\nexports.ObjectMethod = exports.objectMethod = objectMethod;\nexports.ObjectProperty = exports.objectProperty = objectProperty;\nexports.RestElement = exports.restElement = restElement;\nexports.ReturnStatement = exports.returnStatement = returnStatement;\nexports.SequenceExpression = exports.sequenceExpression = sequenceExpression;\nexports.ParenthesizedExpression = exports.parenthesizedExpression = parenthesizedExpression;\nexports.SwitchCase = exports.switchCase = switchCase;\nexports.SwitchStatement = exports.switchStatement = switchStatement;\nexports.ThisExpression = exports.thisExpression = thisExpression;\nexports.ThrowStatement = exports.throwStatement = throwStatement;\nexports.TryStatement = exports.tryStatement = tryStatement;\nexports.UnaryExpression = exports.unaryExpression = unaryExpression;\nexports.UpdateExpression = exports.updateExpression = updateExpression;\nexports.VariableDeclaration = exports.variableDeclaration = variableDeclaration;\nexports.VariableDeclarator = exports.variableDeclarator = variableDeclarator;\nexports.WhileStatement = exports.whileStatement = whileStatement;\nexports.WithStatement = exports.withStatement = withStatement;\nexports.AssignmentPattern = exports.assignmentPattern = assignmentPattern;\nexports.ArrayPattern = exports.arrayPattern = arrayPattern;\nexports.ArrowFunctionExpression = exports.arrowFunctionExpression = arrowFunctionExpression;\nexports.ClassBody = exports.classBody = classBody;\nexports.ClassExpression = exports.classExpression = classExpression;\nexports.ClassDeclaration = exports.classDeclaration = classDeclaration;\nexports.ExportAllDeclaration = exports.exportAllDeclaration = exportAllDeclaration;\nexports.ExportDefaultDeclaration = exports.exportDefaultDeclaration = exportDefaultDeclaration;\nexports.ExportNamedDeclaration = exports.exportNamedDeclaration = exportNamedDeclaration;\nexports.ExportSpecifier = exports.exportSpecifier = exportSpecifier;\nexports.ForOfStatement = exports.forOfStatement = forOfStatement;\nexports.ImportDeclaration = exports.importDeclaration = importDeclaration;\nexports.ImportDefaultSpecifier = exports.importDefaultSpecifier = importDefaultSpecifier;\nexports.ImportNamespaceSpecifier = exports.importNamespaceSpecifier = importNamespaceSpecifier;\nexports.ImportSpecifier = exports.importSpecifier = importSpecifier;\nexports.MetaProperty = exports.metaProperty = metaProperty;\nexports.ClassMethod = exports.classMethod = classMethod;\nexports.ObjectPattern = exports.objectPattern = objectPattern;\nexports.SpreadElement = exports.spreadElement = spreadElement;\nexports.super = exports.Super = _super;\nexports.TaggedTemplateExpression = exports.taggedTemplateExpression = taggedTemplateExpression;\nexports.TemplateElement = exports.templateElement = templateElement;\nexports.TemplateLiteral = exports.templateLiteral = templateLiteral;\nexports.YieldExpression = exports.yieldExpression = yieldExpression;\nexports.AwaitExpression = exports.awaitExpression = awaitExpression;\nexports.import = exports.Import = _import;\nexports.BigIntLiteral = exports.bigIntLiteral = bigIntLiteral;\nexports.ExportNamespaceSpecifier = exports.exportNamespaceSpecifier = exportNamespaceSpecifier;\nexports.OptionalMemberExpression = exports.optionalMemberExpression = optionalMemberExpression;\nexports.OptionalCallExpression = exports.optionalCallExpression = optionalCallExpression;\nexports.AnyTypeAnnotation = exports.anyTypeAnnotation = anyTypeAnnotation;\nexports.ArrayTypeAnnotation = exports.arrayTypeAnnotation = arrayTypeAnnotation;\nexports.BooleanTypeAnnotation = exports.booleanTypeAnnotation = booleanTypeAnnotation;\nexports.BooleanLiteralTypeAnnotation = exports.booleanLiteralTypeAnnotation = booleanLiteralTypeAnnotation;\nexports.NullLiteralTypeAnnotation = exports.nullLiteralTypeAnnotation = nullLiteralTypeAnnotation;\nexports.ClassImplements = exports.classImplements = classImplements;\nexports.DeclareClass = exports.declareClass = declareClass;\nexports.DeclareFunction = exports.declareFunction = declareFunction;\nexports.DeclareInterface = exports.declareInterface = declareInterface;\nexports.DeclareModule = exports.declareModule = declareModule;\nexports.DeclareModuleExports = exports.declareModuleExports = declareModuleExports;\nexports.DeclareTypeAlias = exports.declareTypeAlias = declareTypeAlias;\nexports.DeclareOpaqueType = exports.declareOpaqueType = declareOpaqueType;\nexports.DeclareVariable = exports.declareVariable = declareVariable;\nexports.DeclareExportDeclaration = exports.declareExportDeclaration = declareExportDeclaration;\nexports.DeclareExportAllDeclaration = exports.declareExportAllDeclaration = declareExportAllDeclaration;\nexports.DeclaredPredicate = exports.declaredPredicate = declaredPredicate;\nexports.ExistsTypeAnnotation = exports.existsTypeAnnotation = existsTypeAnnotation;\nexports.FunctionTypeAnnotation = exports.functionTypeAnnotation = functionTypeAnnotation;\nexports.FunctionTypeParam = exports.functionTypeParam = functionTypeParam;\nexports.GenericTypeAnnotation = exports.genericTypeAnnotation = genericTypeAnnotation;\nexports.InferredPredicate = exports.inferredPredicate = inferredPredicate;\nexports.InterfaceExtends = exports.interfaceExtends = interfaceExtends;\nexports.InterfaceDeclaration = exports.interfaceDeclaration = interfaceDeclaration;\nexports.InterfaceTypeAnnotation = exports.interfaceTypeAnnotation = interfaceTypeAnnotation;\nexports.IntersectionTypeAnnotation = exports.intersectionTypeAnnotation = intersectionTypeAnnotation;\nexports.MixedTypeAnnotation = exports.mixedTypeAnnotation = mixedTypeAnnotation;\nexports.EmptyTypeAnnotation = exports.emptyTypeAnnotation = emptyTypeAnnotation;\nexports.NullableTypeAnnotation = exports.nullableTypeAnnotation = nullableTypeAnnotation;\nexports.NumberLiteralTypeAnnotation = exports.numberLiteralTypeAnnotation = numberLiteralTypeAnnotation;\nexports.NumberTypeAnnotation = exports.numberTypeAnnotation = numberTypeAnnotation;\nexports.ObjectTypeAnnotation = exports.objectTypeAnnotation = objectTypeAnnotation;\nexports.ObjectTypeInternalSlot = exports.objectTypeInternalSlot = objectTypeInternalSlot;\nexports.ObjectTypeCallProperty = exports.objectTypeCallProperty = objectTypeCallProperty;\nexports.ObjectTypeIndexer = exports.objectTypeIndexer = objectTypeIndexer;\nexports.ObjectTypeProperty = exports.objectTypeProperty = objectTypeProperty;\nexports.ObjectTypeSpreadProperty = exports.objectTypeSpreadProperty = objectTypeSpreadProperty;\nexports.OpaqueType = exports.opaqueType = opaqueType;\nexports.QualifiedTypeIdentifier = exports.qualifiedTypeIdentifier = qualifiedTypeIdentifier;\nexports.StringLiteralTypeAnnotation = exports.stringLiteralTypeAnnotation = stringLiteralTypeAnnotation;\nexports.StringTypeAnnotation = exports.stringTypeAnnotation = stringTypeAnnotation;\nexports.SymbolTypeAnnotation = exports.symbolTypeAnnotation = symbolTypeAnnotation;\nexports.ThisTypeAnnotation = exports.thisTypeAnnotation = thisTypeAnnotation;\nexports.TupleTypeAnnotation = exports.tupleTypeAnnotation = tupleTypeAnnotation;\nexports.TypeofTypeAnnotation = exports.typeofTypeAnnotation = typeofTypeAnnotation;\nexports.TypeAlias = exports.typeAlias = typeAlias;\nexports.TypeAnnotation = exports.typeAnnotation = typeAnnotation;\nexports.TypeCastExpression = exports.typeCastExpression = typeCastExpression;\nexports.TypeParameter = exports.typeParameter = typeParameter;\nexports.TypeParameterDeclaration = exports.typeParameterDeclaration = typeParameterDeclaration;\nexports.TypeParameterInstantiation = exports.typeParameterInstantiation = typeParameterInstantiation;\nexports.UnionTypeAnnotation = exports.unionTypeAnnotation = unionTypeAnnotation;\nexports.Variance = exports.variance = variance;\nexports.VoidTypeAnnotation = exports.voidTypeAnnotation = voidTypeAnnotation;\nexports.EnumDeclaration = exports.enumDeclaration = enumDeclaration;\nexports.EnumBooleanBody = exports.enumBooleanBody = enumBooleanBody;\nexports.EnumNumberBody = exports.enumNumberBody = enumNumberBody;\nexports.EnumStringBody = exports.enumStringBody = enumStringBody;\nexports.EnumSymbolBody = exports.enumSymbolBody = enumSymbolBody;\nexports.EnumBooleanMember = exports.enumBooleanMember = enumBooleanMember;\nexports.EnumNumberMember = exports.enumNumberMember = enumNumberMember;\nexports.EnumStringMember = exports.enumStringMember = enumStringMember;\nexports.EnumDefaultedMember = exports.enumDefaultedMember = enumDefaultedMember;\nexports.jSXAttribute = exports.JSXAttribute = exports.jsxAttribute = jsxAttribute;\nexports.jSXClosingElement = exports.JSXClosingElement = exports.jsxClosingElement = jsxClosingElement;\nexports.jSXElement = exports.JSXElement = exports.jsxElement = jsxElement;\nexports.jSXEmptyExpression = exports.JSXEmptyExpression = exports.jsxEmptyExpression = jsxEmptyExpression;\nexports.jSXExpressionContainer = exports.JSXExpressionContainer = exports.jsxExpressionContainer = jsxExpressionContainer;\nexports.jSXSpreadChild = exports.JSXSpreadChild = exports.jsxSpreadChild = jsxSpreadChild;\nexports.jSXIdentifier = exports.JSXIdentifier = exports.jsxIdentifier = jsxIdentifier;\nexports.jSXMemberExpression = exports.JSXMemberExpression = exports.jsxMemberExpression = jsxMemberExpression;\nexports.jSXNamespacedName = exports.JSXNamespacedName = exports.jsxNamespacedName = jsxNamespacedName;\nexports.jSXOpeningElement = exports.JSXOpeningElement = exports.jsxOpeningElement = jsxOpeningElement;\nexports.jSXSpreadAttribute = exports.JSXSpreadAttribute = exports.jsxSpreadAttribute = jsxSpreadAttribute;\nexports.jSXText = exports.JSXText = exports.jsxText = jsxText;\nexports.jSXFragment = exports.JSXFragment = exports.jsxFragment = jsxFragment;\nexports.jSXOpeningFragment = exports.JSXOpeningFragment = exports.jsxOpeningFragment = jsxOpeningFragment;\nexports.jSXClosingFragment = exports.JSXClosingFragment = exports.jsxClosingFragment = jsxClosingFragment;\nexports.Noop = exports.noop = noop;\nexports.Placeholder = exports.placeholder = placeholder;\nexports.V8IntrinsicIdentifier = exports.v8IntrinsicIdentifier = v8IntrinsicIdentifier;\nexports.ArgumentPlaceholder = exports.argumentPlaceholder = argumentPlaceholder;\nexports.BindExpression = exports.bindExpression = bindExpression;\nexports.ClassProperty = exports.classProperty = classProperty;\nexports.PipelineTopicExpression = exports.pipelineTopicExpression = pipelineTopicExpression;\nexports.PipelineBareFunction = exports.pipelineBareFunction = pipelineBareFunction;\nexports.PipelinePrimaryTopicReference = exports.pipelinePrimaryTopicReference = pipelinePrimaryTopicReference;\nexports.ClassPrivateProperty = exports.classPrivateProperty = classPrivateProperty;\nexports.ClassPrivateMethod = exports.classPrivateMethod = classPrivateMethod;\nexports.ImportAttribute = exports.importAttribute = importAttribute;\nexports.Decorator = exports.decorator = decorator;\nexports.DoExpression = exports.doExpression = doExpression;\nexports.ExportDefaultSpecifier = exports.exportDefaultSpecifier = exportDefaultSpecifier;\nexports.PrivateName = exports.privateName = privateName;\nexports.RecordExpression = exports.recordExpression = recordExpression;\nexports.TupleExpression = exports.tupleExpression = tupleExpression;\nexports.DecimalLiteral = exports.decimalLiteral = decimalLiteral;\nexports.StaticBlock = exports.staticBlock = staticBlock;\nexports.tSParameterProperty = exports.TSParameterProperty = exports.tsParameterProperty = tsParameterProperty;\nexports.tSDeclareFunction = exports.TSDeclareFunction = exports.tsDeclareFunction = tsDeclareFunction;\nexports.tSDeclareMethod = exports.TSDeclareMethod = exports.tsDeclareMethod = tsDeclareMethod;\nexports.tSQualifiedName = exports.TSQualifiedName = exports.tsQualifiedName = tsQualifiedName;\nexports.tSCallSignatureDeclaration = exports.TSCallSignatureDeclaration = exports.tsCallSignatureDeclaration = tsCallSignatureDeclaration;\nexports.tSConstructSignatureDeclaration = exports.TSConstructSignatureDeclaration = exports.tsConstructSignatureDeclaration = tsConstructSignatureDeclaration;\nexports.tSPropertySignature = exports.TSPropertySignature = exports.tsPropertySignature = tsPropertySignature;\nexports.tSMethodSignature = exports.TSMethodSignature = exports.tsMethodSignature = tsMethodSignature;\nexports.tSIndexSignature = exports.TSIndexSignature = exports.tsIndexSignature = tsIndexSignature;\nexports.tSAnyKeyword = exports.TSAnyKeyword = exports.tsAnyKeyword = tsAnyKeyword;\nexports.tSBooleanKeyword = exports.TSBooleanKeyword = exports.tsBooleanKeyword = tsBooleanKeyword;\nexports.tSBigIntKeyword = exports.TSBigIntKeyword = exports.tsBigIntKeyword = tsBigIntKeyword;\nexports.tSIntrinsicKeyword = exports.TSIntrinsicKeyword = exports.tsIntrinsicKeyword = tsIntrinsicKeyword;\nexports.tSNeverKeyword = exports.TSNeverKeyword = exports.tsNeverKeyword = tsNeverKeyword;\nexports.tSNullKeyword = exports.TSNullKeyword = exports.tsNullKeyword = tsNullKeyword;\nexports.tSNumberKeyword = exports.TSNumberKeyword = exports.tsNumberKeyword = tsNumberKeyword;\nexports.tSObjectKeyword = exports.TSObjectKeyword = exports.tsObjectKeyword = tsObjectKeyword;\nexports.tSStringKeyword = exports.TSStringKeyword = exports.tsStringKeyword = tsStringKeyword;\nexports.tSSymbolKeyword = exports.TSSymbolKeyword = exports.tsSymbolKeyword = tsSymbolKeyword;\nexports.tSUndefinedKeyword = exports.TSUndefinedKeyword = exports.tsUndefinedKeyword = tsUndefinedKeyword;\nexports.tSUnknownKeyword = exports.TSUnknownKeyword = exports.tsUnknownKeyword = tsUnknownKeyword;\nexports.tSVoidKeyword = exports.TSVoidKeyword = exports.tsVoidKeyword = tsVoidKeyword;\nexports.tSThisType = exports.TSThisType = exports.tsThisType = tsThisType;\nexports.tSFunctionType = exports.TSFunctionType = exports.tsFunctionType = tsFunctionType;\nexports.tSConstructorType = exports.TSConstructorType = exports.tsConstructorType = tsConstructorType;\nexports.tSTypeReference = exports.TSTypeReference = exports.tsTypeReference = tsTypeReference;\nexports.tSTypePredicate = exports.TSTypePredicate = exports.tsTypePredicate = tsTypePredicate;\nexports.tSTypeQuery = exports.TSTypeQuery = exports.tsTypeQuery = tsTypeQuery;\nexports.tSTypeLiteral = exports.TSTypeLiteral = exports.tsTypeLiteral = tsTypeLiteral;\nexports.tSArrayType = exports.TSArrayType = exports.tsArrayType = tsArrayType;\nexports.tSTupleType = exports.TSTupleType = exports.tsTupleType = tsTupleType;\nexports.tSOptionalType = exports.TSOptionalType = exports.tsOptionalType = tsOptionalType;\nexports.tSRestType = exports.TSRestType = exports.tsRestType = tsRestType;\nexports.tSNamedTupleMember = exports.TSNamedTupleMember = exports.tsNamedTupleMember = tsNamedTupleMember;\nexports.tSUnionType = exports.TSUnionType = exports.tsUnionType = tsUnionType;\nexports.tSIntersectionType = exports.TSIntersectionType = exports.tsIntersectionType = tsIntersectionType;\nexports.tSConditionalType = exports.TSConditionalType = exports.tsConditionalType = tsConditionalType;\nexports.tSInferType = exports.TSInferType = exports.tsInferType = tsInferType;\nexports.tSParenthesizedType = exports.TSParenthesizedType = exports.tsParenthesizedType = tsParenthesizedType;\nexports.tSTypeOperator = exports.TSTypeOperator = exports.tsTypeOperator = tsTypeOperator;\nexports.tSIndexedAccessType = exports.TSIndexedAccessType = exports.tsIndexedAccessType = tsIndexedAccessType;\nexports.tSMappedType = exports.TSMappedType = exports.tsMappedType = tsMappedType;\nexports.tSLiteralType = exports.TSLiteralType = exports.tsLiteralType = tsLiteralType;\nexports.tSExpressionWithTypeArguments = exports.TSExpressionWithTypeArguments = exports.tsExpressionWithTypeArguments = tsExpressionWithTypeArguments;\nexports.tSInterfaceDeclaration = exports.TSInterfaceDeclaration = exports.tsInterfaceDeclaration = tsInterfaceDeclaration;\nexports.tSInterfaceBody = exports.TSInterfaceBody = exports.tsInterfaceBody = tsInterfaceBody;\nexports.tSTypeAliasDeclaration = exports.TSTypeAliasDeclaration = exports.tsTypeAliasDeclaration = tsTypeAliasDeclaration;\nexports.tSAsExpression = exports.TSAsExpression = exports.tsAsExpression = tsAsExpression;\nexports.tSTypeAssertion = exports.TSTypeAssertion = exports.tsTypeAssertion = tsTypeAssertion;\nexports.tSEnumDeclaration = exports.TSEnumDeclaration = exports.tsEnumDeclaration = tsEnumDeclaration;\nexports.tSEnumMember = exports.TSEnumMember = exports.tsEnumMember = tsEnumMember;\nexports.tSModuleDeclaration = exports.TSModuleDeclaration = exports.tsModuleDeclaration = tsModuleDeclaration;\nexports.tSModuleBlock = exports.TSModuleBlock = exports.tsModuleBlock = tsModuleBlock;\nexports.tSImportType = exports.TSImportType = exports.tsImportType = tsImportType;\nexports.tSImportEqualsDeclaration = exports.TSImportEqualsDeclaration = exports.tsImportEqualsDeclaration = tsImportEqualsDeclaration;\nexports.tSExternalModuleReference = exports.TSExternalModuleReference = exports.tsExternalModuleReference = tsExternalModuleReference;\nexports.tSNonNullExpression = exports.TSNonNullExpression = exports.tsNonNullExpression = tsNonNullExpression;\nexports.tSExportAssignment = exports.TSExportAssignment = exports.tsExportAssignment = tsExportAssignment;\nexports.tSNamespaceExportDeclaration = exports.TSNamespaceExportDeclaration = exports.tsNamespaceExportDeclaration = tsNamespaceExportDeclaration;\nexports.tSTypeAnnotation = exports.TSTypeAnnotation = exports.tsTypeAnnotation = tsTypeAnnotation;\nexports.tSTypeParameterInstantiation = exports.TSTypeParameterInstantiation = exports.tsTypeParameterInstantiation = tsTypeParameterInstantiation;\nexports.tSTypeParameterDeclaration = exports.TSTypeParameterDeclaration = exports.tsTypeParameterDeclaration = tsTypeParameterDeclaration;\nexports.tSTypeParameter = exports.TSTypeParameter = exports.tsTypeParameter = tsTypeParameter;\nexports.numberLiteral = exports.NumberLiteral = NumberLiteral;\nexports.regexLiteral = exports.RegexLiteral = RegexLiteral;\nexports.restProperty = exports.RestProperty = RestProperty;\nexports.spreadProperty = exports.SpreadProperty = SpreadProperty;\n\nvar _builder = _interopRequireDefault(require(\"../builder\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction arrayExpression(...args) {\n  return (0, _builder.default)(\"ArrayExpression\", ...args);\n}\n\nfunction assignmentExpression(...args) {\n  return (0, _builder.default)(\"AssignmentExpression\", ...args);\n}\n\nfunction binaryExpression(...args) {\n  return (0, _builder.default)(\"BinaryExpression\", ...args);\n}\n\nfunction interpreterDirective(...args) {\n  return (0, _builder.default)(\"InterpreterDirective\", ...args);\n}\n\nfunction directive(...args) {\n  return (0, _builder.default)(\"Directive\", ...args);\n}\n\nfunction directiveLiteral(...args) {\n  return (0, _builder.default)(\"DirectiveLiteral\", ...args);\n}\n\nfunction blockStatement(...args) {\n  return (0, _builder.default)(\"BlockStatement\", ...args);\n}\n\nfunction breakStatement(...args) {\n  return (0, _builder.default)(\"BreakStatement\", ...args);\n}\n\nfunction callExpression(...args) {\n  return (0, _builder.default)(\"CallExpression\", ...args);\n}\n\nfunction catchClause(...args) {\n  return (0, _builder.default)(\"CatchClause\", ...args);\n}\n\nfunction conditionalExpression(...args) {\n  return (0, _builder.default)(\"ConditionalExpression\", ...args);\n}\n\nfunction continueStatement(...args) {\n  return (0, _builder.default)(\"ContinueStatement\", ...args);\n}\n\nfunction debuggerStatement(...args) {\n  return (0, _builder.default)(\"DebuggerStatement\", ...args);\n}\n\nfunction doWhileStatement(...args) {\n  return (0, _builder.default)(\"DoWhileStatement\", ...args);\n}\n\nfunction emptyStatement(...args) {\n  return (0, _builder.default)(\"EmptyStatement\", ...args);\n}\n\nfunction expressionStatement(...args) {\n  return (0, _builder.default)(\"ExpressionStatement\", ...args);\n}\n\nfunction file(...args) {\n  return (0, _builder.default)(\"File\", ...args);\n}\n\nfunction forInStatement(...args) {\n  return (0, _builder.default)(\"ForInStatement\", ...args);\n}\n\nfunction forStatement(...args) {\n  return (0, _builder.default)(\"ForStatement\", ...args);\n}\n\nfunction functionDeclaration(...args) {\n  return (0, _builder.default)(\"FunctionDeclaration\", ...args);\n}\n\nfunction functionExpression(...args) {\n  return (0, _builder.default)(\"FunctionExpression\", ...args);\n}\n\nfunction identifier(...args) {\n  return (0, _builder.default)(\"Identifier\", ...args);\n}\n\nfunction ifStatement(...args) {\n  return (0, _builder.default)(\"IfStatement\", ...args);\n}\n\nfunction labeledStatement(...args) {\n  return (0, _builder.default)(\"LabeledStatement\", ...args);\n}\n\nfunction stringLiteral(...args) {\n  return (0, _builder.default)(\"StringLiteral\", ...args);\n}\n\nfunction numericLiteral(...args) {\n  return (0, _builder.default)(\"NumericLiteral\", ...args);\n}\n\nfunction nullLiteral(...args) {\n  return (0, _builder.default)(\"NullLiteral\", ...args);\n}\n\nfunction booleanLiteral(...args) {\n  return (0, _builder.default)(\"BooleanLiteral\", ...args);\n}\n\nfunction regExpLiteral(...args) {\n  return (0, _builder.default)(\"RegExpLiteral\", ...args);\n}\n\nfunction logicalExpression(...args) {\n  return (0, _builder.default)(\"LogicalExpression\", ...args);\n}\n\nfunction memberExpression(...args) {\n  return (0, _builder.default)(\"MemberExpression\", ...args);\n}\n\nfunction newExpression(...args) {\n  return (0, _builder.default)(\"NewExpression\", ...args);\n}\n\nfunction program(...args) {\n  return (0, _builder.default)(\"Program\", ...args);\n}\n\nfunction objectExpression(...args) {\n  return (0, _builder.default)(\"ObjectExpression\", ...args);\n}\n\nfunction objectMethod(...args) {\n  return (0, _builder.default)(\"ObjectMethod\", ...args);\n}\n\nfunction objectProperty(...args) {\n  return (0, _builder.default)(\"ObjectProperty\", ...args);\n}\n\nfunction restElement(...args) {\n  return (0, _builder.default)(\"RestElement\", ...args);\n}\n\nfunction returnStatement(...args) {\n  return (0, _builder.default)(\"ReturnStatement\", ...args);\n}\n\nfunction sequenceExpression(...args) {\n  return (0, _builder.default)(\"SequenceExpression\", ...args);\n}\n\nfunction parenthesizedExpression(...args) {\n  return (0, _builder.default)(\"ParenthesizedExpression\", ...args);\n}\n\nfunction switchCase(...args) {\n  return (0, _builder.default)(\"SwitchCase\", ...args);\n}\n\nfunction switchStatement(...args) {\n  return (0, _builder.default)(\"SwitchStatement\", ...args);\n}\n\nfunction thisExpression(...args) {\n  return (0, _builder.default)(\"ThisExpression\", ...args);\n}\n\nfunction throwStatement(...args) {\n  return (0, _builder.default)(\"ThrowStatement\", ...args);\n}\n\nfunction tryStatement(...args) {\n  return (0, _builder.default)(\"TryStatement\", ...args);\n}\n\nfunction unaryExpression(...args) {\n  return (0, _builder.default)(\"UnaryExpression\", ...args);\n}\n\nfunction updateExpression(...args) {\n  return (0, _builder.default)(\"UpdateExpression\", ...args);\n}\n\nfunction variableDeclaration(...args) {\n  return (0, _builder.default)(\"VariableDeclaration\", ...args);\n}\n\nfunction variableDeclarator(...args) {\n  return (0, _builder.default)(\"VariableDeclarator\", ...args);\n}\n\nfunction whileStatement(...args) {\n  return (0, _builder.default)(\"WhileStatement\", ...args);\n}\n\nfunction withStatement(...args) {\n  return (0, _builder.default)(\"WithStatement\", ...args);\n}\n\nfunction assignmentPattern(...args) {\n  return (0, _builder.default)(\"AssignmentPattern\", ...args);\n}\n\nfunction arrayPattern(...args) {\n  return (0, _builder.default)(\"ArrayPattern\", ...args);\n}\n\nfunction arrowFunctionExpression(...args) {\n  return (0, _builder.default)(\"ArrowFunctionExpression\", ...args);\n}\n\nfunction classBody(...args) {\n  return (0, _builder.default)(\"ClassBody\", ...args);\n}\n\nfunction classExpression(...args) {\n  return (0, _builder.default)(\"ClassExpression\", ...args);\n}\n\nfunction classDeclaration(...args) {\n  return (0, _builder.default)(\"ClassDeclaration\", ...args);\n}\n\nfunction exportAllDeclaration(...args) {\n  return (0, _builder.default)(\"ExportAllDeclaration\", ...args);\n}\n\nfunction exportDefaultDeclaration(...args) {\n  return (0, _builder.default)(\"ExportDefaultDeclaration\", ...args);\n}\n\nfunction exportNamedDeclaration(...args) {\n  return (0, _builder.default)(\"ExportNamedDeclaration\", ...args);\n}\n\nfunction exportSpecifier(...args) {\n  return (0, _builder.default)(\"ExportSpecifier\", ...args);\n}\n\nfunction forOfStatement(...args) {\n  return (0, _builder.default)(\"ForOfStatement\", ...args);\n}\n\nfunction importDeclaration(...args) {\n  return (0, _builder.default)(\"ImportDeclaration\", ...args);\n}\n\nfunction importDefaultSpecifier(...args) {\n  return (0, _builder.default)(\"ImportDefaultSpecifier\", ...args);\n}\n\nfunction importNamespaceSpecifier(...args) {\n  return (0, _builder.default)(\"ImportNamespaceSpecifier\", ...args);\n}\n\nfunction importSpecifier(...args) {\n  return (0, _builder.default)(\"ImportSpecifier\", ...args);\n}\n\nfunction metaProperty(...args) {\n  return (0, _builder.default)(\"MetaProperty\", ...args);\n}\n\nfunction classMethod(...args) {\n  return (0, _builder.default)(\"ClassMethod\", ...args);\n}\n\nfunction objectPattern(...args) {\n  return (0, _builder.default)(\"ObjectPattern\", ...args);\n}\n\nfunction spreadElement(...args) {\n  return (0, _builder.default)(\"SpreadElement\", ...args);\n}\n\nfunction _super(...args) {\n  return (0, _builder.default)(\"Super\", ...args);\n}\n\nfunction taggedTemplateExpression(...args) {\n  return (0, _builder.default)(\"TaggedTemplateExpression\", ...args);\n}\n\nfunction templateElement(...args) {\n  return (0, _builder.default)(\"TemplateElement\", ...args);\n}\n\nfunction templateLiteral(...args) {\n  return (0, _builder.default)(\"TemplateLiteral\", ...args);\n}\n\nfunction yieldExpression(...args) {\n  return (0, _builder.default)(\"YieldExpression\", ...args);\n}\n\nfunction awaitExpression(...args) {\n  return (0, _builder.default)(\"AwaitExpression\", ...args);\n}\n\nfunction _import(...args) {\n  return (0, _builder.default)(\"Import\", ...args);\n}\n\nfunction bigIntLiteral(...args) {\n  return (0, _builder.default)(\"BigIntLiteral\", ...args);\n}\n\nfunction exportNamespaceSpecifier(...args) {\n  return (0, _builder.default)(\"ExportNamespaceSpecifier\", ...args);\n}\n\nfunction optionalMemberExpression(...args) {\n  return (0, _builder.default)(\"OptionalMemberExpression\", ...args);\n}\n\nfunction optionalCallExpression(...args) {\n  return (0, _builder.default)(\"OptionalCallExpression\", ...args);\n}\n\nfunction anyTypeAnnotation(...args) {\n  return (0, _builder.default)(\"AnyTypeAnnotation\", ...args);\n}\n\nfunction arrayTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ArrayTypeAnnotation\", ...args);\n}\n\nfunction booleanTypeAnnotation(...args) {\n  return (0, _builder.default)(\"BooleanTypeAnnotation\", ...args);\n}\n\nfunction booleanLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"BooleanLiteralTypeAnnotation\", ...args);\n}\n\nfunction nullLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NullLiteralTypeAnnotation\", ...args);\n}\n\nfunction classImplements(...args) {\n  return (0, _builder.default)(\"ClassImplements\", ...args);\n}\n\nfunction declareClass(...args) {\n  return (0, _builder.default)(\"DeclareClass\", ...args);\n}\n\nfunction declareFunction(...args) {\n  return (0, _builder.default)(\"DeclareFunction\", ...args);\n}\n\nfunction declareInterface(...args) {\n  return (0, _builder.default)(\"DeclareInterface\", ...args);\n}\n\nfunction declareModule(...args) {\n  return (0, _builder.default)(\"DeclareModule\", ...args);\n}\n\nfunction declareModuleExports(...args) {\n  return (0, _builder.default)(\"DeclareModuleExports\", ...args);\n}\n\nfunction declareTypeAlias(...args) {\n  return (0, _builder.default)(\"DeclareTypeAlias\", ...args);\n}\n\nfunction declareOpaqueType(...args) {\n  return (0, _builder.default)(\"DeclareOpaqueType\", ...args);\n}\n\nfunction declareVariable(...args) {\n  return (0, _builder.default)(\"DeclareVariable\", ...args);\n}\n\nfunction declareExportDeclaration(...args) {\n  return (0, _builder.default)(\"DeclareExportDeclaration\", ...args);\n}\n\nfunction declareExportAllDeclaration(...args) {\n  return (0, _builder.default)(\"DeclareExportAllDeclaration\", ...args);\n}\n\nfunction declaredPredicate(...args) {\n  return (0, _builder.default)(\"DeclaredPredicate\", ...args);\n}\n\nfunction existsTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ExistsTypeAnnotation\", ...args);\n}\n\nfunction functionTypeAnnotation(...args) {\n  return (0, _builder.default)(\"FunctionTypeAnnotation\", ...args);\n}\n\nfunction functionTypeParam(...args) {\n  return (0, _builder.default)(\"FunctionTypeParam\", ...args);\n}\n\nfunction genericTypeAnnotation(...args) {\n  return (0, _builder.default)(\"GenericTypeAnnotation\", ...args);\n}\n\nfunction inferredPredicate(...args) {\n  return (0, _builder.default)(\"InferredPredicate\", ...args);\n}\n\nfunction interfaceExtends(...args) {\n  return (0, _builder.default)(\"InterfaceExtends\", ...args);\n}\n\nfunction interfaceDeclaration(...args) {\n  return (0, _builder.default)(\"InterfaceDeclaration\", ...args);\n}\n\nfunction interfaceTypeAnnotation(...args) {\n  return (0, _builder.default)(\"InterfaceTypeAnnotation\", ...args);\n}\n\nfunction intersectionTypeAnnotation(...args) {\n  return (0, _builder.default)(\"IntersectionTypeAnnotation\", ...args);\n}\n\nfunction mixedTypeAnnotation(...args) {\n  return (0, _builder.default)(\"MixedTypeAnnotation\", ...args);\n}\n\nfunction emptyTypeAnnotation(...args) {\n  return (0, _builder.default)(\"EmptyTypeAnnotation\", ...args);\n}\n\nfunction nullableTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NullableTypeAnnotation\", ...args);\n}\n\nfunction numberLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NumberLiteralTypeAnnotation\", ...args);\n}\n\nfunction numberTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NumberTypeAnnotation\", ...args);\n}\n\nfunction objectTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ObjectTypeAnnotation\", ...args);\n}\n\nfunction objectTypeInternalSlot(...args) {\n  return (0, _builder.default)(\"ObjectTypeInternalSlot\", ...args);\n}\n\nfunction objectTypeCallProperty(...args) {\n  return (0, _builder.default)(\"ObjectTypeCallProperty\", ...args);\n}\n\nfunction objectTypeIndexer(...args) {\n  return (0, _builder.default)(\"ObjectTypeIndexer\", ...args);\n}\n\nfunction objectTypeProperty(...args) {\n  return (0, _builder.default)(\"ObjectTypeProperty\", ...args);\n}\n\nfunction objectTypeSpreadProperty(...args) {\n  return (0, _builder.default)(\"ObjectTypeSpreadProperty\", ...args);\n}\n\nfunction opaqueType(...args) {\n  return (0, _builder.default)(\"OpaqueType\", ...args);\n}\n\nfunction qualifiedTypeIdentifier(...args) {\n  return (0, _builder.default)(\"QualifiedTypeIdentifier\", ...args);\n}\n\nfunction stringLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"StringLiteralTypeAnnotation\", ...args);\n}\n\nfunction stringTypeAnnotation(...args) {\n  return (0, _builder.default)(\"StringTypeAnnotation\", ...args);\n}\n\nfunction symbolTypeAnnotation(...args) {\n  return (0, _builder.default)(\"SymbolTypeAnnotation\", ...args);\n}\n\nfunction thisTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ThisTypeAnnotation\", ...args);\n}\n\nfunction tupleTypeAnnotation(...args) {\n  return (0, _builder.default)(\"TupleTypeAnnotation\", ...args);\n}\n\nfunction typeofTypeAnnotation(...args) {\n  return (0, _builder.default)(\"TypeofTypeAnnotation\", ...args);\n}\n\nfunction typeAlias(...args) {\n  return (0, _builder.default)(\"TypeAlias\", ...args);\n}\n\nfunction typeAnnotation(...args) {\n  return (0, _builder.default)(\"TypeAnnotation\", ...args);\n}\n\nfunction typeCastExpression(...args) {\n  return (0, _builder.default)(\"TypeCastExpression\", ...args);\n}\n\nfunction typeParameter(...args) {\n  return (0, _builder.default)(\"TypeParameter\", ...args);\n}\n\nfunction typeParameterDeclaration(...args) {\n  return (0, _builder.default)(\"TypeParameterDeclaration\", ...args);\n}\n\nfunction typeParameterInstantiation(...args) {\n  return (0, _builder.default)(\"TypeParameterInstantiation\", ...args);\n}\n\nfunction unionTypeAnnotation(...args) {\n  return (0, _builder.default)(\"UnionTypeAnnotation\", ...args);\n}\n\nfunction variance(...args) {\n  return (0, _builder.default)(\"Variance\", ...args);\n}\n\nfunction voidTypeAnnotation(...args) {\n  return (0, _builder.default)(\"VoidTypeAnnotation\", ...args);\n}\n\nfunction enumDeclaration(...args) {\n  return (0, _builder.default)(\"EnumDeclaration\", ...args);\n}\n\nfunction enumBooleanBody(...args) {\n  return (0, _builder.default)(\"EnumBooleanBody\", ...args);\n}\n\nfunction enumNumberBody(...args) {\n  return (0, _builder.default)(\"EnumNumberBody\", ...args);\n}\n\nfunction enumStringBody(...args) {\n  return (0, _builder.default)(\"EnumStringBody\", ...args);\n}\n\nfunction enumSymbolBody(...args) {\n  return (0, _builder.default)(\"EnumSymbolBody\", ...args);\n}\n\nfunction enumBooleanMember(...args) {\n  return (0, _builder.default)(\"EnumBooleanMember\", ...args);\n}\n\nfunction enumNumberMember(...args) {\n  return (0, _builder.default)(\"EnumNumberMember\", ...args);\n}\n\nfunction enumStringMember(...args) {\n  return (0, _builder.default)(\"EnumStringMember\", ...args);\n}\n\nfunction enumDefaultedMember(...args) {\n  return (0, _builder.default)(\"EnumDefaultedMember\", ...args);\n}\n\nfunction jsxAttribute(...args) {\n  return (0, _builder.default)(\"JSXAttribute\", ...args);\n}\n\nfunction jsxClosingElement(...args) {\n  return (0, _builder.default)(\"JSXClosingElement\", ...args);\n}\n\nfunction jsxElement(...args) {\n  return (0, _builder.default)(\"JSXElement\", ...args);\n}\n\nfunction jsxEmptyExpression(...args) {\n  return (0, _builder.default)(\"JSXEmptyExpression\", ...args);\n}\n\nfunction jsxExpressionContainer(...args) {\n  return (0, _builder.default)(\"JSXExpressionContainer\", ...args);\n}\n\nfunction jsxSpreadChild(...args) {\n  return (0, _builder.default)(\"JSXSpreadChild\", ...args);\n}\n\nfunction jsxIdentifier(...args) {\n  return (0, _builder.default)(\"JSXIdentifier\", ...args);\n}\n\nfunction jsxMemberExpression(...args) {\n  return (0, _builder.default)(\"JSXMemberExpression\", ...args);\n}\n\nfunction jsxNamespacedName(...args) {\n  return (0, _builder.default)(\"JSXNamespacedName\", ...args);\n}\n\nfunction jsxOpeningElement(...args) {\n  return (0, _builder.default)(\"JSXOpeningElement\", ...args);\n}\n\nfunction jsxSpreadAttribute(...args) {\n  return (0, _builder.default)(\"JSXSpreadAttribute\", ...args);\n}\n\nfunction jsxText(...args) {\n  return (0, _builder.default)(\"JSXText\", ...args);\n}\n\nfunction jsxFragment(...args) {\n  return (0, _builder.default)(\"JSXFragment\", ...args);\n}\n\nfunction jsxOpeningFragment(...args) {\n  return (0, _builder.default)(\"JSXOpeningFragment\", ...args);\n}\n\nfunction jsxClosingFragment(...args) {\n  return (0, _builder.default)(\"JSXClosingFragment\", ...args);\n}\n\nfunction noop(...args) {\n  return (0, _builder.default)(\"Noop\", ...args);\n}\n\nfunction placeholder(...args) {\n  return (0, _builder.default)(\"Placeholder\", ...args);\n}\n\nfunction v8IntrinsicIdentifier(...args) {\n  return (0, _builder.default)(\"V8IntrinsicIdentifier\", ...args);\n}\n\nfunction argumentPlaceholder(...args) {\n  return (0, _builder.default)(\"ArgumentPlaceholder\", ...args);\n}\n\nfunction bindExpression(...args) {\n  return (0, _builder.default)(\"BindExpression\", ...args);\n}\n\nfunction classProperty(...args) {\n  return (0, _builder.default)(\"ClassProperty\", ...args);\n}\n\nfunction pipelineTopicExpression(...args) {\n  return (0, _builder.default)(\"PipelineTopicExpression\", ...args);\n}\n\nfunction pipelineBareFunction(...args) {\n  return (0, _builder.default)(\"PipelineBareFunction\", ...args);\n}\n\nfunction pipelinePrimaryTopicReference(...args) {\n  return (0, _builder.default)(\"PipelinePrimaryTopicReference\", ...args);\n}\n\nfunction classPrivateProperty(...args) {\n  return (0, _builder.default)(\"ClassPrivateProperty\", ...args);\n}\n\nfunction classPrivateMethod(...args) {\n  return (0, _builder.default)(\"ClassPrivateMethod\", ...args);\n}\n\nfunction importAttribute(...args) {\n  return (0, _builder.default)(\"ImportAttribute\", ...args);\n}\n\nfunction decorator(...args) {\n  return (0, _builder.default)(\"Decorator\", ...args);\n}\n\nfunction doExpression(...args) {\n  return (0, _builder.default)(\"DoExpression\", ...args);\n}\n\nfunction exportDefaultSpecifier(...args) {\n  return (0, _builder.default)(\"ExportDefaultSpecifier\", ...args);\n}\n\nfunction privateName(...args) {\n  return (0, _builder.default)(\"PrivateName\", ...args);\n}\n\nfunction recordExpression(...args) {\n  return (0, _builder.default)(\"RecordExpression\", ...args);\n}\n\nfunction tupleExpression(...args) {\n  return (0, _builder.default)(\"TupleExpression\", ...args);\n}\n\nfunction decimalLiteral(...args) {\n  return (0, _builder.default)(\"DecimalLiteral\", ...args);\n}\n\nfunction staticBlock(...args) {\n  return (0, _builder.default)(\"StaticBlock\", ...args);\n}\n\nfunction tsParameterProperty(...args) {\n  return (0, _builder.default)(\"TSParameterProperty\", ...args);\n}\n\nfunction tsDeclareFunction(...args) {\n  return (0, _builder.default)(\"TSDeclareFunction\", ...args);\n}\n\nfunction tsDeclareMethod(...args) {\n  return (0, _builder.default)(\"TSDeclareMethod\", ...args);\n}\n\nfunction tsQualifiedName(...args) {\n  return (0, _builder.default)(\"TSQualifiedName\", ...args);\n}\n\nfunction tsCallSignatureDeclaration(...args) {\n  return (0, _builder.default)(\"TSCallSignatureDeclaration\", ...args);\n}\n\nfunction tsConstructSignatureDeclaration(...args) {\n  return (0, _builder.default)(\"TSConstructSignatureDeclaration\", ...args);\n}\n\nfunction tsPropertySignature(...args) {\n  return (0, _builder.default)(\"TSPropertySignature\", ...args);\n}\n\nfunction tsMethodSignature(...args) {\n  return (0, _builder.default)(\"TSMethodSignature\", ...args);\n}\n\nfunction tsIndexSignature(...args) {\n  return (0, _builder.default)(\"TSIndexSignature\", ...args);\n}\n\nfunction tsAnyKeyword(...args) {\n  return (0, _builder.default)(\"TSAnyKeyword\", ...args);\n}\n\nfunction tsBooleanKeyword(...args) {\n  return (0, _builder.default)(\"TSBooleanKeyword\", ...args);\n}\n\nfunction tsBigIntKeyword(...args) {\n  return (0, _builder.default)(\"TSBigIntKeyword\", ...args);\n}\n\nfunction tsIntrinsicKeyword(...args) {\n  return (0, _builder.default)(\"TSIntrinsicKeyword\", ...args);\n}\n\nfunction tsNeverKeyword(...args) {\n  return (0, _builder.default)(\"TSNeverKeyword\", ...args);\n}\n\nfunction tsNullKeyword(...args) {\n  return (0, _builder.default)(\"TSNullKeyword\", ...args);\n}\n\nfunction tsNumberKeyword(...args) {\n  return (0, _builder.default)(\"TSNumberKeyword\", ...args);\n}\n\nfunction tsObjectKeyword(...args) {\n  return (0, _builder.default)(\"TSObjectKeyword\", ...args);\n}\n\nfunction tsStringKeyword(...args) {\n  return (0, _builder.default)(\"TSStringKeyword\", ...args);\n}\n\nfunction tsSymbolKeyword(...args) {\n  return (0, _builder.default)(\"TSSymbolKeyword\", ...args);\n}\n\nfunction tsUndefinedKeyword(...args) {\n  return (0, _builder.default)(\"TSUndefinedKeyword\", ...args);\n}\n\nfunction tsUnknownKeyword(...args) {\n  return (0, _builder.default)(\"TSUnknownKeyword\", ...args);\n}\n\nfunction tsVoidKeyword(...args) {\n  return (0, _builder.default)(\"TSVoidKeyword\", ...args);\n}\n\nfunction tsThisType(...args) {\n  return (0, _builder.default)(\"TSThisType\", ...args);\n}\n\nfunction tsFunctionType(...args) {\n  return (0, _builder.default)(\"TSFunctionType\", ...args);\n}\n\nfunction tsConstructorType(...args) {\n  return (0, _builder.default)(\"TSConstructorType\", ...args);\n}\n\nfunction tsTypeReference(...args) {\n  return (0, _builder.default)(\"TSTypeReference\", ...args);\n}\n\nfunction tsTypePredicate(...args) {\n  return (0, _builder.default)(\"TSTypePredicate\", ...args);\n}\n\nfunction tsTypeQuery(...args) {\n  return (0, _builder.default)(\"TSTypeQuery\", ...args);\n}\n\nfunction tsTypeLiteral(...args) {\n  return (0, _builder.default)(\"TSTypeLiteral\", ...args);\n}\n\nfunction tsArrayType(...args) {\n  return (0, _builder.default)(\"TSArrayType\", ...args);\n}\n\nfunction tsTupleType(...args) {\n  return (0, _builder.default)(\"TSTupleType\", ...args);\n}\n\nfunction tsOptionalType(...args) {\n  return (0, _builder.default)(\"TSOptionalType\", ...args);\n}\n\nfunction tsRestType(...args) {\n  return (0, _builder.default)(\"TSRestType\", ...args);\n}\n\nfunction tsNamedTupleMember(...args) {\n  return (0, _builder.default)(\"TSNamedTupleMember\", ...args);\n}\n\nfunction tsUnionType(...args) {\n  return (0, _builder.default)(\"TSUnionType\", ...args);\n}\n\nfunction tsIntersectionType(...args) {\n  return (0, _builder.default)(\"TSIntersectionType\", ...args);\n}\n\nfunction tsConditionalType(...args) {\n  return (0, _builder.default)(\"TSConditionalType\", ...args);\n}\n\nfunction tsInferType(...args) {\n  return (0, _builder.default)(\"TSInferType\", ...args);\n}\n\nfunction tsParenthesizedType(...args) {\n  return (0, _builder.default)(\"TSParenthesizedType\", ...args);\n}\n\nfunction tsTypeOperator(...args) {\n  return (0, _builder.default)(\"TSTypeOperator\", ...args);\n}\n\nfunction tsIndexedAccessType(...args) {\n  return (0, _builder.default)(\"TSIndexedAccessType\", ...args);\n}\n\nfunction tsMappedType(...args) {\n  return (0, _builder.default)(\"TSMappedType\", ...args);\n}\n\nfunction tsLiteralType(...args) {\n  return (0, _builder.default)(\"TSLiteralType\", ...args);\n}\n\nfunction tsExpressionWithTypeArguments(...args) {\n  return (0, _builder.default)(\"TSExpressionWithTypeArguments\", ...args);\n}\n\nfunction tsInterfaceDeclaration(...args) {\n  return (0, _builder.default)(\"TSInterfaceDeclaration\", ...args);\n}\n\nfunction tsInterfaceBody(...args) {\n  return (0, _builder.default)(\"TSInterfaceBody\", ...args);\n}\n\nfunction tsTypeAliasDeclaration(...args) {\n  return (0, _builder.default)(\"TSTypeAliasDeclaration\", ...args);\n}\n\nfunction tsAsExpression(...args) {\n  return (0, _builder.default)(\"TSAsExpression\", ...args);\n}\n\nfunction tsTypeAssertion(...args) {\n  return (0, _builder.default)(\"TSTypeAssertion\", ...args);\n}\n\nfunction tsEnumDeclaration(...args) {\n  return (0, _builder.default)(\"TSEnumDeclaration\", ...args);\n}\n\nfunction tsEnumMember(...args) {\n  return (0, _builder.default)(\"TSEnumMember\", ...args);\n}\n\nfunction tsModuleDeclaration(...args) {\n  return (0, _builder.default)(\"TSModuleDeclaration\", ...args);\n}\n\nfunction tsModuleBlock(...args) {\n  return (0, _builder.default)(\"TSModuleBlock\", ...args);\n}\n\nfunction tsImportType(...args) {\n  return (0, _builder.default)(\"TSImportType\", ...args);\n}\n\nfunction tsImportEqualsDeclaration(...args) {\n  return (0, _builder.default)(\"TSImportEqualsDeclaration\", ...args);\n}\n\nfunction tsExternalModuleReference(...args) {\n  return (0, _builder.default)(\"TSExternalModuleReference\", ...args);\n}\n\nfunction tsNonNullExpression(...args) {\n  return (0, _builder.default)(\"TSNonNullExpression\", ...args);\n}\n\nfunction tsExportAssignment(...args) {\n  return (0, _builder.default)(\"TSExportAssignment\", ...args);\n}\n\nfunction tsNamespaceExportDeclaration(...args) {\n  return (0, _builder.default)(\"TSNamespaceExportDeclaration\", ...args);\n}\n\nfunction tsTypeAnnotation(...args) {\n  return (0, _builder.default)(\"TSTypeAnnotation\", ...args);\n}\n\nfunction tsTypeParameterInstantiation(...args) {\n  return (0, _builder.default)(\"TSTypeParameterInstantiation\", ...args);\n}\n\nfunction tsTypeParameterDeclaration(...args) {\n  return (0, _builder.default)(\"TSTypeParameterDeclaration\", ...args);\n}\n\nfunction tsTypeParameter(...args) {\n  return (0, _builder.default)(\"TSTypeParameter\", ...args);\n}\n\nfunction NumberLiteral(...args) {\n  console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n  return (0, _builder.default)(\"NumberLiteral\", ...args);\n}\n\nfunction RegexLiteral(...args) {\n  console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n  return (0, _builder.default)(\"RegexLiteral\", ...args);\n}\n\nfunction RestProperty(...args) {\n  console.trace(\"The node type RestProperty has been renamed to RestElement\");\n  return (0, _builder.default)(\"RestProperty\", ...args);\n}\n\nfunction SpreadProperty(...args) {\n  console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n  return (0, _builder.default)(\"SpreadProperty\", ...args);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cleanJSXElementLiteralChild;\n\nvar _generated = require(\"../../builders/generated\");\n\nfunction cleanJSXElementLiteralChild(child, args) {\n  const lines = child.value.split(/\\r\\n|\\n|\\r/);\n  let lastNonEmptyLine = 0;\n\n  for (let i = 0; i < lines.length; i++) {\n    if (lines[i].match(/[^ \\t]/)) {\n      lastNonEmptyLine = i;\n    }\n  }\n\n  let str = \"\";\n\n  for (let i = 0; i < lines.length; i++) {\n    const line = lines[i];\n    const isFirstLine = i === 0;\n    const isLastLine = i === lines.length - 1;\n    const isLastNonEmptyLine = i === lastNonEmptyLine;\n    let trimmedLine = line.replace(/\\t/g, \" \");\n\n    if (!isFirstLine) {\n      trimmedLine = trimmedLine.replace(/^[ ]+/, \"\");\n    }\n\n    if (!isLastLine) {\n      trimmedLine = trimmedLine.replace(/[ ]+$/, \"\");\n    }\n\n    if (trimmedLine) {\n      if (!isLastNonEmptyLine) {\n        trimmedLine += \" \";\n      }\n\n      str += trimmedLine;\n    }\n  }\n\n  if (str) args.push((0, _generated.stringLiteral)(str));\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = buildChildren;\n\nvar _generated = require(\"../../validators/generated\");\n\nvar _cleanJSXElementLiteralChild = _interopRequireDefault(require(\"../../utils/react/cleanJSXElementLiteralChild\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction buildChildren(node) {\n  const elements = [];\n\n  for (let i = 0; i < node.children.length; i++) {\n    let child = node.children[i];\n\n    if ((0, _generated.isJSXText)(child)) {\n      (0, _cleanJSXElementLiteralChild.default)(child, elements);\n      continue;\n    }\n\n    if ((0, _generated.isJSXExpressionContainer)(child)) child = child.expression;\n    if ((0, _generated.isJSXEmptyExpression)(child)) continue;\n    elements.push(child);\n  }\n\n  return elements;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNode;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isNode(node) {\n  return !!(node && _definitions.VISITOR_KEYS[node.type]);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = assertNode;\n\nvar _isNode = _interopRequireDefault(require(\"../validators/isNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction assertNode(node) {\n  if (!(0, _isNode.default)(node)) {\n    var _node$type;\n\n    const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node);\n    throw new TypeError(`Not a valid node of type \"${type}\"`);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.assertArrayExpression = assertArrayExpression;\nexports.assertAssignmentExpression = assertAssignmentExpression;\nexports.assertBinaryExpression = assertBinaryExpression;\nexports.assertInterpreterDirective = assertInterpreterDirective;\nexports.assertDirective = assertDirective;\nexports.assertDirectiveLiteral = assertDirectiveLiteral;\nexports.assertBlockStatement = assertBlockStatement;\nexports.assertBreakStatement = assertBreakStatement;\nexports.assertCallExpression = assertCallExpression;\nexports.assertCatchClause = assertCatchClause;\nexports.assertConditionalExpression = assertConditionalExpression;\nexports.assertContinueStatement = assertContinueStatement;\nexports.assertDebuggerStatement = assertDebuggerStatement;\nexports.assertDoWhileStatement = assertDoWhileStatement;\nexports.assertEmptyStatement = assertEmptyStatement;\nexports.assertExpressionStatement = assertExpressionStatement;\nexports.assertFile = assertFile;\nexports.assertForInStatement = assertForInStatement;\nexports.assertForStatement = assertForStatement;\nexports.assertFunctionDeclaration = assertFunctionDeclaration;\nexports.assertFunctionExpression = assertFunctionExpression;\nexports.assertIdentifier = assertIdentifier;\nexports.assertIfStatement = assertIfStatement;\nexports.assertLabeledStatement = assertLabeledStatement;\nexports.assertStringLiteral = assertStringLiteral;\nexports.assertNumericLiteral = assertNumericLiteral;\nexports.assertNullLiteral = assertNullLiteral;\nexports.assertBooleanLiteral = assertBooleanLiteral;\nexports.assertRegExpLiteral = assertRegExpLiteral;\nexports.assertLogicalExpression = assertLogicalExpression;\nexports.assertMemberExpression = assertMemberExpression;\nexports.assertNewExpression = assertNewExpression;\nexports.assertProgram = assertProgram;\nexports.assertObjectExpression = assertObjectExpression;\nexports.assertObjectMethod = assertObjectMethod;\nexports.assertObjectProperty = assertObjectProperty;\nexports.assertRestElement = assertRestElement;\nexports.assertReturnStatement = assertReturnStatement;\nexports.assertSequenceExpression = assertSequenceExpression;\nexports.assertParenthesizedExpression = assertParenthesizedExpression;\nexports.assertSwitchCase = assertSwitchCase;\nexports.assertSwitchStatement = assertSwitchStatement;\nexports.assertThisExpression = assertThisExpression;\nexports.assertThrowStatement = assertThrowStatement;\nexports.assertTryStatement = assertTryStatement;\nexports.assertUnaryExpression = assertUnaryExpression;\nexports.assertUpdateExpression = assertUpdateExpression;\nexports.assertVariableDeclaration = assertVariableDeclaration;\nexports.assertVariableDeclarator = assertVariableDeclarator;\nexports.assertWhileStatement = assertWhileStatement;\nexports.assertWithStatement = assertWithStatement;\nexports.assertAssignmentPattern = assertAssignmentPattern;\nexports.assertArrayPattern = assertArrayPattern;\nexports.assertArrowFunctionExpression = assertArrowFunctionExpression;\nexports.assertClassBody = assertClassBody;\nexports.assertClassExpression = assertClassExpression;\nexports.assertClassDeclaration = assertClassDeclaration;\nexports.assertExportAllDeclaration = assertExportAllDeclaration;\nexports.assertExportDefaultDeclaration = assertExportDefaultDeclaration;\nexports.assertExportNamedDeclaration = assertExportNamedDeclaration;\nexports.assertExportSpecifier = assertExportSpecifier;\nexports.assertForOfStatement = assertForOfStatement;\nexports.assertImportDeclaration = assertImportDeclaration;\nexports.assertImportDefaultSpecifier = assertImportDefaultSpecifier;\nexports.assertImportNamespaceSpecifier = assertImportNamespaceSpecifier;\nexports.assertImportSpecifier = assertImportSpecifier;\nexports.assertMetaProperty = assertMetaProperty;\nexports.assertClassMethod = assertClassMethod;\nexports.assertObjectPattern = assertObjectPattern;\nexports.assertSpreadElement = assertSpreadElement;\nexports.assertSuper = assertSuper;\nexports.assertTaggedTemplateExpression = assertTaggedTemplateExpression;\nexports.assertTemplateElement = assertTemplateElement;\nexports.assertTemplateLiteral = assertTemplateLiteral;\nexports.assertYieldExpression = assertYieldExpression;\nexports.assertAwaitExpression = assertAwaitExpression;\nexports.assertImport = assertImport;\nexports.assertBigIntLiteral = assertBigIntLiteral;\nexports.assertExportNamespaceSpecifier = assertExportNamespaceSpecifier;\nexports.assertOptionalMemberExpression = assertOptionalMemberExpression;\nexports.assertOptionalCallExpression = assertOptionalCallExpression;\nexports.assertAnyTypeAnnotation = assertAnyTypeAnnotation;\nexports.assertArrayTypeAnnotation = assertArrayTypeAnnotation;\nexports.assertBooleanTypeAnnotation = assertBooleanTypeAnnotation;\nexports.assertBooleanLiteralTypeAnnotation = assertBooleanLiteralTypeAnnotation;\nexports.assertNullLiteralTypeAnnotation = assertNullLiteralTypeAnnotation;\nexports.assertClassImplements = assertClassImplements;\nexports.assertDeclareClass = assertDeclareClass;\nexports.assertDeclareFunction = assertDeclareFunction;\nexports.assertDeclareInterface = assertDeclareInterface;\nexports.assertDeclareModule = assertDeclareModule;\nexports.assertDeclareModuleExports = assertDeclareModuleExports;\nexports.assertDeclareTypeAlias = assertDeclareTypeAlias;\nexports.assertDeclareOpaqueType = assertDeclareOpaqueType;\nexports.assertDeclareVariable = assertDeclareVariable;\nexports.assertDeclareExportDeclaration = assertDeclareExportDeclaration;\nexports.assertDeclareExportAllDeclaration = assertDeclareExportAllDeclaration;\nexports.assertDeclaredPredicate = assertDeclaredPredicate;\nexports.assertExistsTypeAnnotation = assertExistsTypeAnnotation;\nexports.assertFunctionTypeAnnotation = assertFunctionTypeAnnotation;\nexports.assertFunctionTypeParam = assertFunctionTypeParam;\nexports.assertGenericTypeAnnotation = assertGenericTypeAnnotation;\nexports.assertInferredPredicate = assertInferredPredicate;\nexports.assertInterfaceExtends = assertInterfaceExtends;\nexports.assertInterfaceDeclaration = assertInterfaceDeclaration;\nexports.assertInterfaceTypeAnnotation = assertInterfaceTypeAnnotation;\nexports.assertIntersectionTypeAnnotation = assertIntersectionTypeAnnotation;\nexports.assertMixedTypeAnnotation = assertMixedTypeAnnotation;\nexports.assertEmptyTypeAnnotation = assertEmptyTypeAnnotation;\nexports.assertNullableTypeAnnotation = assertNullableTypeAnnotation;\nexports.assertNumberLiteralTypeAnnotation = assertNumberLiteralTypeAnnotation;\nexports.assertNumberTypeAnnotation = assertNumberTypeAnnotation;\nexports.assertObjectTypeAnnotation = assertObjectTypeAnnotation;\nexports.assertObjectTypeInternalSlot = assertObjectTypeInternalSlot;\nexports.assertObjectTypeCallProperty = assertObjectTypeCallProperty;\nexports.assertObjectTypeIndexer = assertObjectTypeIndexer;\nexports.assertObjectTypeProperty = assertObjectTypeProperty;\nexports.assertObjectTypeSpreadProperty = assertObjectTypeSpreadProperty;\nexports.assertOpaqueType = assertOpaqueType;\nexports.assertQualifiedTypeIdentifier = assertQualifiedTypeIdentifier;\nexports.assertStringLiteralTypeAnnotation = assertStringLiteralTypeAnnotation;\nexports.assertStringTypeAnnotation = assertStringTypeAnnotation;\nexports.assertSymbolTypeAnnotation = assertSymbolTypeAnnotation;\nexports.assertThisTypeAnnotation = assertThisTypeAnnotation;\nexports.assertTupleTypeAnnotation = assertTupleTypeAnnotation;\nexports.assertTypeofTypeAnnotation = assertTypeofTypeAnnotation;\nexports.assertTypeAlias = assertTypeAlias;\nexports.assertTypeAnnotation = assertTypeAnnotation;\nexports.assertTypeCastExpression = assertTypeCastExpression;\nexports.assertTypeParameter = assertTypeParameter;\nexports.assertTypeParameterDeclaration = assertTypeParameterDeclaration;\nexports.assertTypeParameterInstantiation = assertTypeParameterInstantiation;\nexports.assertUnionTypeAnnotation = assertUnionTypeAnnotation;\nexports.assertVariance = assertVariance;\nexports.assertVoidTypeAnnotation = assertVoidTypeAnnotation;\nexports.assertEnumDeclaration = assertEnumDeclaration;\nexports.assertEnumBooleanBody = assertEnumBooleanBody;\nexports.assertEnumNumberBody = assertEnumNumberBody;\nexports.assertEnumStringBody = assertEnumStringBody;\nexports.assertEnumSymbolBody = assertEnumSymbolBody;\nexports.assertEnumBooleanMember = assertEnumBooleanMember;\nexports.assertEnumNumberMember = assertEnumNumberMember;\nexports.assertEnumStringMember = assertEnumStringMember;\nexports.assertEnumDefaultedMember = assertEnumDefaultedMember;\nexports.assertJSXAttribute = assertJSXAttribute;\nexports.assertJSXClosingElement = assertJSXClosingElement;\nexports.assertJSXElement = assertJSXElement;\nexports.assertJSXEmptyExpression = assertJSXEmptyExpression;\nexports.assertJSXExpressionContainer = assertJSXExpressionContainer;\nexports.assertJSXSpreadChild = assertJSXSpreadChild;\nexports.assertJSXIdentifier = assertJSXIdentifier;\nexports.assertJSXMemberExpression = assertJSXMemberExpression;\nexports.assertJSXNamespacedName = assertJSXNamespacedName;\nexports.assertJSXOpeningElement = assertJSXOpeningElement;\nexports.assertJSXSpreadAttribute = assertJSXSpreadAttribute;\nexports.assertJSXText = assertJSXText;\nexports.assertJSXFragment = assertJSXFragment;\nexports.assertJSXOpeningFragment = assertJSXOpeningFragment;\nexports.assertJSXClosingFragment = assertJSXClosingFragment;\nexports.assertNoop = assertNoop;\nexports.assertPlaceholder = assertPlaceholder;\nexports.assertV8IntrinsicIdentifier = assertV8IntrinsicIdentifier;\nexports.assertArgumentPlaceholder = assertArgumentPlaceholder;\nexports.assertBindExpression = assertBindExpression;\nexports.assertClassProperty = assertClassProperty;\nexports.assertPipelineTopicExpression = assertPipelineTopicExpression;\nexports.assertPipelineBareFunction = assertPipelineBareFunction;\nexports.assertPipelinePrimaryTopicReference = assertPipelinePrimaryTopicReference;\nexports.assertClassPrivateProperty = assertClassPrivateProperty;\nexports.assertClassPrivateMethod = assertClassPrivateMethod;\nexports.assertImportAttribute = assertImportAttribute;\nexports.assertDecorator = assertDecorator;\nexports.assertDoExpression = assertDoExpression;\nexports.assertExportDefaultSpecifier = assertExportDefaultSpecifier;\nexports.assertPrivateName = assertPrivateName;\nexports.assertRecordExpression = assertRecordExpression;\nexports.assertTupleExpression = assertTupleExpression;\nexports.assertDecimalLiteral = assertDecimalLiteral;\nexports.assertStaticBlock = assertStaticBlock;\nexports.assertTSParameterProperty = assertTSParameterProperty;\nexports.assertTSDeclareFunction = assertTSDeclareFunction;\nexports.assertTSDeclareMethod = assertTSDeclareMethod;\nexports.assertTSQualifiedName = assertTSQualifiedName;\nexports.assertTSCallSignatureDeclaration = assertTSCallSignatureDeclaration;\nexports.assertTSConstructSignatureDeclaration = assertTSConstructSignatureDeclaration;\nexports.assertTSPropertySignature = assertTSPropertySignature;\nexports.assertTSMethodSignature = assertTSMethodSignature;\nexports.assertTSIndexSignature = assertTSIndexSignature;\nexports.assertTSAnyKeyword = assertTSAnyKeyword;\nexports.assertTSBooleanKeyword = assertTSBooleanKeyword;\nexports.assertTSBigIntKeyword = assertTSBigIntKeyword;\nexports.assertTSIntrinsicKeyword = assertTSIntrinsicKeyword;\nexports.assertTSNeverKeyword = assertTSNeverKeyword;\nexports.assertTSNullKeyword = assertTSNullKeyword;\nexports.assertTSNumberKeyword = assertTSNumberKeyword;\nexports.assertTSObjectKeyword = assertTSObjectKeyword;\nexports.assertTSStringKeyword = assertTSStringKeyword;\nexports.assertTSSymbolKeyword = assertTSSymbolKeyword;\nexports.assertTSUndefinedKeyword = assertTSUndefinedKeyword;\nexports.assertTSUnknownKeyword = assertTSUnknownKeyword;\nexports.assertTSVoidKeyword = assertTSVoidKeyword;\nexports.assertTSThisType = assertTSThisType;\nexports.assertTSFunctionType = assertTSFunctionType;\nexports.assertTSConstructorType = assertTSConstructorType;\nexports.assertTSTypeReference = assertTSTypeReference;\nexports.assertTSTypePredicate = assertTSTypePredicate;\nexports.assertTSTypeQuery = assertTSTypeQuery;\nexports.assertTSTypeLiteral = assertTSTypeLiteral;\nexports.assertTSArrayType = assertTSArrayType;\nexports.assertTSTupleType = assertTSTupleType;\nexports.assertTSOptionalType = assertTSOptionalType;\nexports.assertTSRestType = assertTSRestType;\nexports.assertTSNamedTupleMember = assertTSNamedTupleMember;\nexports.assertTSUnionType = assertTSUnionType;\nexports.assertTSIntersectionType = assertTSIntersectionType;\nexports.assertTSConditionalType = assertTSConditionalType;\nexports.assertTSInferType = assertTSInferType;\nexports.assertTSParenthesizedType = assertTSParenthesizedType;\nexports.assertTSTypeOperator = assertTSTypeOperator;\nexports.assertTSIndexedAccessType = assertTSIndexedAccessType;\nexports.assertTSMappedType = assertTSMappedType;\nexports.assertTSLiteralType = assertTSLiteralType;\nexports.assertTSExpressionWithTypeArguments = assertTSExpressionWithTypeArguments;\nexports.assertTSInterfaceDeclaration = assertTSInterfaceDeclaration;\nexports.assertTSInterfaceBody = assertTSInterfaceBody;\nexports.assertTSTypeAliasDeclaration = assertTSTypeAliasDeclaration;\nexports.assertTSAsExpression = assertTSAsExpression;\nexports.assertTSTypeAssertion = assertTSTypeAssertion;\nexports.assertTSEnumDeclaration = assertTSEnumDeclaration;\nexports.assertTSEnumMember = assertTSEnumMember;\nexports.assertTSModuleDeclaration = assertTSModuleDeclaration;\nexports.assertTSModuleBlock = assertTSModuleBlock;\nexports.assertTSImportType = assertTSImportType;\nexports.assertTSImportEqualsDeclaration = assertTSImportEqualsDeclaration;\nexports.assertTSExternalModuleReference = assertTSExternalModuleReference;\nexports.assertTSNonNullExpression = assertTSNonNullExpression;\nexports.assertTSExportAssignment = assertTSExportAssignment;\nexports.assertTSNamespaceExportDeclaration = assertTSNamespaceExportDeclaration;\nexports.assertTSTypeAnnotation = assertTSTypeAnnotation;\nexports.assertTSTypeParameterInstantiation = assertTSTypeParameterInstantiation;\nexports.assertTSTypeParameterDeclaration = assertTSTypeParameterDeclaration;\nexports.assertTSTypeParameter = assertTSTypeParameter;\nexports.assertExpression = assertExpression;\nexports.assertBinary = assertBinary;\nexports.assertScopable = assertScopable;\nexports.assertBlockParent = assertBlockParent;\nexports.assertBlock = assertBlock;\nexports.assertStatement = assertStatement;\nexports.assertTerminatorless = assertTerminatorless;\nexports.assertCompletionStatement = assertCompletionStatement;\nexports.assertConditional = assertConditional;\nexports.assertLoop = assertLoop;\nexports.assertWhile = assertWhile;\nexports.assertExpressionWrapper = assertExpressionWrapper;\nexports.assertFor = assertFor;\nexports.assertForXStatement = assertForXStatement;\nexports.assertFunction = assertFunction;\nexports.assertFunctionParent = assertFunctionParent;\nexports.assertPureish = assertPureish;\nexports.assertDeclaration = assertDeclaration;\nexports.assertPatternLike = assertPatternLike;\nexports.assertLVal = assertLVal;\nexports.assertTSEntityName = assertTSEntityName;\nexports.assertLiteral = assertLiteral;\nexports.assertImmutable = assertImmutable;\nexports.assertUserWhitespacable = assertUserWhitespacable;\nexports.assertMethod = assertMethod;\nexports.assertObjectMember = assertObjectMember;\nexports.assertProperty = assertProperty;\nexports.assertUnaryLike = assertUnaryLike;\nexports.assertPattern = assertPattern;\nexports.assertClass = assertClass;\nexports.assertModuleDeclaration = assertModuleDeclaration;\nexports.assertExportDeclaration = assertExportDeclaration;\nexports.assertModuleSpecifier = assertModuleSpecifier;\nexports.assertFlow = assertFlow;\nexports.assertFlowType = assertFlowType;\nexports.assertFlowBaseAnnotation = assertFlowBaseAnnotation;\nexports.assertFlowDeclaration = assertFlowDeclaration;\nexports.assertFlowPredicate = assertFlowPredicate;\nexports.assertEnumBody = assertEnumBody;\nexports.assertEnumMember = assertEnumMember;\nexports.assertJSX = assertJSX;\nexports.assertPrivate = assertPrivate;\nexports.assertTSTypeElement = assertTSTypeElement;\nexports.assertTSType = assertTSType;\nexports.assertTSBaseType = assertTSBaseType;\nexports.assertNumberLiteral = assertNumberLiteral;\nexports.assertRegexLiteral = assertRegexLiteral;\nexports.assertRestProperty = assertRestProperty;\nexports.assertSpreadProperty = assertSpreadProperty;\n\nvar _is = _interopRequireDefault(require(\"../../validators/is\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction assert(type, node, opts) {\n  if (!(0, _is.default)(type, node, opts)) {\n    throw new Error(`Expected type \"${type}\" with option ${JSON.stringify(opts)}, ` + `but instead got \"${node.type}\".`);\n  }\n}\n\nfunction assertArrayExpression(node, opts = {}) {\n  assert(\"ArrayExpression\", node, opts);\n}\n\nfunction assertAssignmentExpression(node, opts = {}) {\n  assert(\"AssignmentExpression\", node, opts);\n}\n\nfunction assertBinaryExpression(node, opts = {}) {\n  assert(\"BinaryExpression\", node, opts);\n}\n\nfunction assertInterpreterDirective(node, opts = {}) {\n  assert(\"InterpreterDirective\", node, opts);\n}\n\nfunction assertDirective(node, opts = {}) {\n  assert(\"Directive\", node, opts);\n}\n\nfunction assertDirectiveLiteral(node, opts = {}) {\n  assert(\"DirectiveLiteral\", node, opts);\n}\n\nfunction assertBlockStatement(node, opts = {}) {\n  assert(\"BlockStatement\", node, opts);\n}\n\nfunction assertBreakStatement(node, opts = {}) {\n  assert(\"BreakStatement\", node, opts);\n}\n\nfunction assertCallExpression(node, opts = {}) {\n  assert(\"CallExpression\", node, opts);\n}\n\nfunction assertCatchClause(node, opts = {}) {\n  assert(\"CatchClause\", node, opts);\n}\n\nfunction assertConditionalExpression(node, opts = {}) {\n  assert(\"ConditionalExpression\", node, opts);\n}\n\nfunction assertContinueStatement(node, opts = {}) {\n  assert(\"ContinueStatement\", node, opts);\n}\n\nfunction assertDebuggerStatement(node, opts = {}) {\n  assert(\"DebuggerStatement\", node, opts);\n}\n\nfunction assertDoWhileStatement(node, opts = {}) {\n  assert(\"DoWhileStatement\", node, opts);\n}\n\nfunction assertEmptyStatement(node, opts = {}) {\n  assert(\"EmptyStatement\", node, opts);\n}\n\nfunction assertExpressionStatement(node, opts = {}) {\n  assert(\"ExpressionStatement\", node, opts);\n}\n\nfunction assertFile(node, opts = {}) {\n  assert(\"File\", node, opts);\n}\n\nfunction assertForInStatement(node, opts = {}) {\n  assert(\"ForInStatement\", node, opts);\n}\n\nfunction assertForStatement(node, opts = {}) {\n  assert(\"ForStatement\", node, opts);\n}\n\nfunction assertFunctionDeclaration(node, opts = {}) {\n  assert(\"FunctionDeclaration\", node, opts);\n}\n\nfunction assertFunctionExpression(node, opts = {}) {\n  assert(\"FunctionExpression\", node, opts);\n}\n\nfunction assertIdentifier(node, opts = {}) {\n  assert(\"Identifier\", node, opts);\n}\n\nfunction assertIfStatement(node, opts = {}) {\n  assert(\"IfStatement\", node, opts);\n}\n\nfunction assertLabeledStatement(node, opts = {}) {\n  assert(\"LabeledStatement\", node, opts);\n}\n\nfunction assertStringLiteral(node, opts = {}) {\n  assert(\"StringLiteral\", node, opts);\n}\n\nfunction assertNumericLiteral(node, opts = {}) {\n  assert(\"NumericLiteral\", node, opts);\n}\n\nfunction assertNullLiteral(node, opts = {}) {\n  assert(\"NullLiteral\", node, opts);\n}\n\nfunction assertBooleanLiteral(node, opts = {}) {\n  assert(\"BooleanLiteral\", node, opts);\n}\n\nfunction assertRegExpLiteral(node, opts = {}) {\n  assert(\"RegExpLiteral\", node, opts);\n}\n\nfunction assertLogicalExpression(node, opts = {}) {\n  assert(\"LogicalExpression\", node, opts);\n}\n\nfunction assertMemberExpression(node, opts = {}) {\n  assert(\"MemberExpression\", node, opts);\n}\n\nfunction assertNewExpression(node, opts = {}) {\n  assert(\"NewExpression\", node, opts);\n}\n\nfunction assertProgram(node, opts = {}) {\n  assert(\"Program\", node, opts);\n}\n\nfunction assertObjectExpression(node, opts = {}) {\n  assert(\"ObjectExpression\", node, opts);\n}\n\nfunction assertObjectMethod(node, opts = {}) {\n  assert(\"ObjectMethod\", node, opts);\n}\n\nfunction assertObjectProperty(node, opts = {}) {\n  assert(\"ObjectProperty\", node, opts);\n}\n\nfunction assertRestElement(node, opts = {}) {\n  assert(\"RestElement\", node, opts);\n}\n\nfunction assertReturnStatement(node, opts = {}) {\n  assert(\"ReturnStatement\", node, opts);\n}\n\nfunction assertSequenceExpression(node, opts = {}) {\n  assert(\"SequenceExpression\", node, opts);\n}\n\nfunction assertParenthesizedExpression(node, opts = {}) {\n  assert(\"ParenthesizedExpression\", node, opts);\n}\n\nfunction assertSwitchCase(node, opts = {}) {\n  assert(\"SwitchCase\", node, opts);\n}\n\nfunction assertSwitchStatement(node, opts = {}) {\n  assert(\"SwitchStatement\", node, opts);\n}\n\nfunction assertThisExpression(node, opts = {}) {\n  assert(\"ThisExpression\", node, opts);\n}\n\nfunction assertThrowStatement(node, opts = {}) {\n  assert(\"ThrowStatement\", node, opts);\n}\n\nfunction assertTryStatement(node, opts = {}) {\n  assert(\"TryStatement\", node, opts);\n}\n\nfunction assertUnaryExpression(node, opts = {}) {\n  assert(\"UnaryExpression\", node, opts);\n}\n\nfunction assertUpdateExpression(node, opts = {}) {\n  assert(\"UpdateExpression\", node, opts);\n}\n\nfunction assertVariableDeclaration(node, opts = {}) {\n  assert(\"VariableDeclaration\", node, opts);\n}\n\nfunction assertVariableDeclarator(node, opts = {}) {\n  assert(\"VariableDeclarator\", node, opts);\n}\n\nfunction assertWhileStatement(node, opts = {}) {\n  assert(\"WhileStatement\", node, opts);\n}\n\nfunction assertWithStatement(node, opts = {}) {\n  assert(\"WithStatement\", node, opts);\n}\n\nfunction assertAssignmentPattern(node, opts = {}) {\n  assert(\"AssignmentPattern\", node, opts);\n}\n\nfunction assertArrayPattern(node, opts = {}) {\n  assert(\"ArrayPattern\", node, opts);\n}\n\nfunction assertArrowFunctionExpression(node, opts = {}) {\n  assert(\"ArrowFunctionExpression\", node, opts);\n}\n\nfunction assertClassBody(node, opts = {}) {\n  assert(\"ClassBody\", node, opts);\n}\n\nfunction assertClassExpression(node, opts = {}) {\n  assert(\"ClassExpression\", node, opts);\n}\n\nfunction assertClassDeclaration(node, opts = {}) {\n  assert(\"ClassDeclaration\", node, opts);\n}\n\nfunction assertExportAllDeclaration(node, opts = {}) {\n  assert(\"ExportAllDeclaration\", node, opts);\n}\n\nfunction assertExportDefaultDeclaration(node, opts = {}) {\n  assert(\"ExportDefaultDeclaration\", node, opts);\n}\n\nfunction assertExportNamedDeclaration(node, opts = {}) {\n  assert(\"ExportNamedDeclaration\", node, opts);\n}\n\nfunction assertExportSpecifier(node, opts = {}) {\n  assert(\"ExportSpecifier\", node, opts);\n}\n\nfunction assertForOfStatement(node, opts = {}) {\n  assert(\"ForOfStatement\", node, opts);\n}\n\nfunction assertImportDeclaration(node, opts = {}) {\n  assert(\"ImportDeclaration\", node, opts);\n}\n\nfunction assertImportDefaultSpecifier(node, opts = {}) {\n  assert(\"ImportDefaultSpecifier\", node, opts);\n}\n\nfunction assertImportNamespaceSpecifier(node, opts = {}) {\n  assert(\"ImportNamespaceSpecifier\", node, opts);\n}\n\nfunction assertImportSpecifier(node, opts = {}) {\n  assert(\"ImportSpecifier\", node, opts);\n}\n\nfunction assertMetaProperty(node, opts = {}) {\n  assert(\"MetaProperty\", node, opts);\n}\n\nfunction assertClassMethod(node, opts = {}) {\n  assert(\"ClassMethod\", node, opts);\n}\n\nfunction assertObjectPattern(node, opts = {}) {\n  assert(\"ObjectPattern\", node, opts);\n}\n\nfunction assertSpreadElement(node, opts = {}) {\n  assert(\"SpreadElement\", node, opts);\n}\n\nfunction assertSuper(node, opts = {}) {\n  assert(\"Super\", node, opts);\n}\n\nfunction assertTaggedTemplateExpression(node, opts = {}) {\n  assert(\"TaggedTemplateExpression\", node, opts);\n}\n\nfunction assertTemplateElement(node, opts = {}) {\n  assert(\"TemplateElement\", node, opts);\n}\n\nfunction assertTemplateLiteral(node, opts = {}) {\n  assert(\"TemplateLiteral\", node, opts);\n}\n\nfunction assertYieldExpression(node, opts = {}) {\n  assert(\"YieldExpression\", node, opts);\n}\n\nfunction assertAwaitExpression(node, opts = {}) {\n  assert(\"AwaitExpression\", node, opts);\n}\n\nfunction assertImport(node, opts = {}) {\n  assert(\"Import\", node, opts);\n}\n\nfunction assertBigIntLiteral(node, opts = {}) {\n  assert(\"BigIntLiteral\", node, opts);\n}\n\nfunction assertExportNamespaceSpecifier(node, opts = {}) {\n  assert(\"ExportNamespaceSpecifier\", node, opts);\n}\n\nfunction assertOptionalMemberExpression(node, opts = {}) {\n  assert(\"OptionalMemberExpression\", node, opts);\n}\n\nfunction assertOptionalCallExpression(node, opts = {}) {\n  assert(\"OptionalCallExpression\", node, opts);\n}\n\nfunction assertAnyTypeAnnotation(node, opts = {}) {\n  assert(\"AnyTypeAnnotation\", node, opts);\n}\n\nfunction assertArrayTypeAnnotation(node, opts = {}) {\n  assert(\"ArrayTypeAnnotation\", node, opts);\n}\n\nfunction assertBooleanTypeAnnotation(node, opts = {}) {\n  assert(\"BooleanTypeAnnotation\", node, opts);\n}\n\nfunction assertBooleanLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"BooleanLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertNullLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"NullLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertClassImplements(node, opts = {}) {\n  assert(\"ClassImplements\", node, opts);\n}\n\nfunction assertDeclareClass(node, opts = {}) {\n  assert(\"DeclareClass\", node, opts);\n}\n\nfunction assertDeclareFunction(node, opts = {}) {\n  assert(\"DeclareFunction\", node, opts);\n}\n\nfunction assertDeclareInterface(node, opts = {}) {\n  assert(\"DeclareInterface\", node, opts);\n}\n\nfunction assertDeclareModule(node, opts = {}) {\n  assert(\"DeclareModule\", node, opts);\n}\n\nfunction assertDeclareModuleExports(node, opts = {}) {\n  assert(\"DeclareModuleExports\", node, opts);\n}\n\nfunction assertDeclareTypeAlias(node, opts = {}) {\n  assert(\"DeclareTypeAlias\", node, opts);\n}\n\nfunction assertDeclareOpaqueType(node, opts = {}) {\n  assert(\"DeclareOpaqueType\", node, opts);\n}\n\nfunction assertDeclareVariable(node, opts = {}) {\n  assert(\"DeclareVariable\", node, opts);\n}\n\nfunction assertDeclareExportDeclaration(node, opts = {}) {\n  assert(\"DeclareExportDeclaration\", node, opts);\n}\n\nfunction assertDeclareExportAllDeclaration(node, opts = {}) {\n  assert(\"DeclareExportAllDeclaration\", node, opts);\n}\n\nfunction assertDeclaredPredicate(node, opts = {}) {\n  assert(\"DeclaredPredicate\", node, opts);\n}\n\nfunction assertExistsTypeAnnotation(node, opts = {}) {\n  assert(\"ExistsTypeAnnotation\", node, opts);\n}\n\nfunction assertFunctionTypeAnnotation(node, opts = {}) {\n  assert(\"FunctionTypeAnnotation\", node, opts);\n}\n\nfunction assertFunctionTypeParam(node, opts = {}) {\n  assert(\"FunctionTypeParam\", node, opts);\n}\n\nfunction assertGenericTypeAnnotation(node, opts = {}) {\n  assert(\"GenericTypeAnnotation\", node, opts);\n}\n\nfunction assertInferredPredicate(node, opts = {}) {\n  assert(\"InferredPredicate\", node, opts);\n}\n\nfunction assertInterfaceExtends(node, opts = {}) {\n  assert(\"InterfaceExtends\", node, opts);\n}\n\nfunction assertInterfaceDeclaration(node, opts = {}) {\n  assert(\"InterfaceDeclaration\", node, opts);\n}\n\nfunction assertInterfaceTypeAnnotation(node, opts = {}) {\n  assert(\"InterfaceTypeAnnotation\", node, opts);\n}\n\nfunction assertIntersectionTypeAnnotation(node, opts = {}) {\n  assert(\"IntersectionTypeAnnotation\", node, opts);\n}\n\nfunction assertMixedTypeAnnotation(node, opts = {}) {\n  assert(\"MixedTypeAnnotation\", node, opts);\n}\n\nfunction assertEmptyTypeAnnotation(node, opts = {}) {\n  assert(\"EmptyTypeAnnotation\", node, opts);\n}\n\nfunction assertNullableTypeAnnotation(node, opts = {}) {\n  assert(\"NullableTypeAnnotation\", node, opts);\n}\n\nfunction assertNumberLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"NumberLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertNumberTypeAnnotation(node, opts = {}) {\n  assert(\"NumberTypeAnnotation\", node, opts);\n}\n\nfunction assertObjectTypeAnnotation(node, opts = {}) {\n  assert(\"ObjectTypeAnnotation\", node, opts);\n}\n\nfunction assertObjectTypeInternalSlot(node, opts = {}) {\n  assert(\"ObjectTypeInternalSlot\", node, opts);\n}\n\nfunction assertObjectTypeCallProperty(node, opts = {}) {\n  assert(\"ObjectTypeCallProperty\", node, opts);\n}\n\nfunction assertObjectTypeIndexer(node, opts = {}) {\n  assert(\"ObjectTypeIndexer\", node, opts);\n}\n\nfunction assertObjectTypeProperty(node, opts = {}) {\n  assert(\"ObjectTypeProperty\", node, opts);\n}\n\nfunction assertObjectTypeSpreadProperty(node, opts = {}) {\n  assert(\"ObjectTypeSpreadProperty\", node, opts);\n}\n\nfunction assertOpaqueType(node, opts = {}) {\n  assert(\"OpaqueType\", node, opts);\n}\n\nfunction assertQualifiedTypeIdentifier(node, opts = {}) {\n  assert(\"QualifiedTypeIdentifier\", node, opts);\n}\n\nfunction assertStringLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"StringLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertStringTypeAnnotation(node, opts = {}) {\n  assert(\"StringTypeAnnotation\", node, opts);\n}\n\nfunction assertSymbolTypeAnnotation(node, opts = {}) {\n  assert(\"SymbolTypeAnnotation\", node, opts);\n}\n\nfunction assertThisTypeAnnotation(node, opts = {}) {\n  assert(\"ThisTypeAnnotation\", node, opts);\n}\n\nfunction assertTupleTypeAnnotation(node, opts = {}) {\n  assert(\"TupleTypeAnnotation\", node, opts);\n}\n\nfunction assertTypeofTypeAnnotation(node, opts = {}) {\n  assert(\"TypeofTypeAnnotation\", node, opts);\n}\n\nfunction assertTypeAlias(node, opts = {}) {\n  assert(\"TypeAlias\", node, opts);\n}\n\nfunction assertTypeAnnotation(node, opts = {}) {\n  assert(\"TypeAnnotation\", node, opts);\n}\n\nfunction assertTypeCastExpression(node, opts = {}) {\n  assert(\"TypeCastExpression\", node, opts);\n}\n\nfunction assertTypeParameter(node, opts = {}) {\n  assert(\"TypeParameter\", node, opts);\n}\n\nfunction assertTypeParameterDeclaration(node, opts = {}) {\n  assert(\"TypeParameterDeclaration\", node, opts);\n}\n\nfunction assertTypeParameterInstantiation(node, opts = {}) {\n  assert(\"TypeParameterInstantiation\", node, opts);\n}\n\nfunction assertUnionTypeAnnotation(node, opts = {}) {\n  assert(\"UnionTypeAnnotation\", node, opts);\n}\n\nfunction assertVariance(node, opts = {}) {\n  assert(\"Variance\", node, opts);\n}\n\nfunction assertVoidTypeAnnotation(node, opts = {}) {\n  assert(\"VoidTypeAnnotation\", node, opts);\n}\n\nfunction assertEnumDeclaration(node, opts = {}) {\n  assert(\"EnumDeclaration\", node, opts);\n}\n\nfunction assertEnumBooleanBody(node, opts = {}) {\n  assert(\"EnumBooleanBody\", node, opts);\n}\n\nfunction assertEnumNumberBody(node, opts = {}) {\n  assert(\"EnumNumberBody\", node, opts);\n}\n\nfunction assertEnumStringBody(node, opts = {}) {\n  assert(\"EnumStringBody\", node, opts);\n}\n\nfunction assertEnumSymbolBody(node, opts = {}) {\n  assert(\"EnumSymbolBody\", node, opts);\n}\n\nfunction assertEnumBooleanMember(node, opts = {}) {\n  assert(\"EnumBooleanMember\", node, opts);\n}\n\nfunction assertEnumNumberMember(node, opts = {}) {\n  assert(\"EnumNumberMember\", node, opts);\n}\n\nfunction assertEnumStringMember(node, opts = {}) {\n  assert(\"EnumStringMember\", node, opts);\n}\n\nfunction assertEnumDefaultedMember(node, opts = {}) {\n  assert(\"EnumDefaultedMember\", node, opts);\n}\n\nfunction assertJSXAttribute(node, opts = {}) {\n  assert(\"JSXAttribute\", node, opts);\n}\n\nfunction assertJSXClosingElement(node, opts = {}) {\n  assert(\"JSXClosingElement\", node, opts);\n}\n\nfunction assertJSXElement(node, opts = {}) {\n  assert(\"JSXElement\", node, opts);\n}\n\nfunction assertJSXEmptyExpression(node, opts = {}) {\n  assert(\"JSXEmptyExpression\", node, opts);\n}\n\nfunction assertJSXExpressionContainer(node, opts = {}) {\n  assert(\"JSXExpressionContainer\", node, opts);\n}\n\nfunction assertJSXSpreadChild(node, opts = {}) {\n  assert(\"JSXSpreadChild\", node, opts);\n}\n\nfunction assertJSXIdentifier(node, opts = {}) {\n  assert(\"JSXIdentifier\", node, opts);\n}\n\nfunction assertJSXMemberExpression(node, opts = {}) {\n  assert(\"JSXMemberExpression\", node, opts);\n}\n\nfunction assertJSXNamespacedName(node, opts = {}) {\n  assert(\"JSXNamespacedName\", node, opts);\n}\n\nfunction assertJSXOpeningElement(node, opts = {}) {\n  assert(\"JSXOpeningElement\", node, opts);\n}\n\nfunction assertJSXSpreadAttribute(node, opts = {}) {\n  assert(\"JSXSpreadAttribute\", node, opts);\n}\n\nfunction assertJSXText(node, opts = {}) {\n  assert(\"JSXText\", node, opts);\n}\n\nfunction assertJSXFragment(node, opts = {}) {\n  assert(\"JSXFragment\", node, opts);\n}\n\nfunction assertJSXOpeningFragment(node, opts = {}) {\n  assert(\"JSXOpeningFragment\", node, opts);\n}\n\nfunction assertJSXClosingFragment(node, opts = {}) {\n  assert(\"JSXClosingFragment\", node, opts);\n}\n\nfunction assertNoop(node, opts = {}) {\n  assert(\"Noop\", node, opts);\n}\n\nfunction assertPlaceholder(node, opts = {}) {\n  assert(\"Placeholder\", node, opts);\n}\n\nfunction assertV8IntrinsicIdentifier(node, opts = {}) {\n  assert(\"V8IntrinsicIdentifier\", node, opts);\n}\n\nfunction assertArgumentPlaceholder(node, opts = {}) {\n  assert(\"ArgumentPlaceholder\", node, opts);\n}\n\nfunction assertBindExpression(node, opts = {}) {\n  assert(\"BindExpression\", node, opts);\n}\n\nfunction assertClassProperty(node, opts = {}) {\n  assert(\"ClassProperty\", node, opts);\n}\n\nfunction assertPipelineTopicExpression(node, opts = {}) {\n  assert(\"PipelineTopicExpression\", node, opts);\n}\n\nfunction assertPipelineBareFunction(node, opts = {}) {\n  assert(\"PipelineBareFunction\", node, opts);\n}\n\nfunction assertPipelinePrimaryTopicReference(node, opts = {}) {\n  assert(\"PipelinePrimaryTopicReference\", node, opts);\n}\n\nfunction assertClassPrivateProperty(node, opts = {}) {\n  assert(\"ClassPrivateProperty\", node, opts);\n}\n\nfunction assertClassPrivateMethod(node, opts = {}) {\n  assert(\"ClassPrivateMethod\", node, opts);\n}\n\nfunction assertImportAttribute(node, opts = {}) {\n  assert(\"ImportAttribute\", node, opts);\n}\n\nfunction assertDecorator(node, opts = {}) {\n  assert(\"Decorator\", node, opts);\n}\n\nfunction assertDoExpression(node, opts = {}) {\n  assert(\"DoExpression\", node, opts);\n}\n\nfunction assertExportDefaultSpecifier(node, opts = {}) {\n  assert(\"ExportDefaultSpecifier\", node, opts);\n}\n\nfunction assertPrivateName(node, opts = {}) {\n  assert(\"PrivateName\", node, opts);\n}\n\nfunction assertRecordExpression(node, opts = {}) {\n  assert(\"RecordExpression\", node, opts);\n}\n\nfunction assertTupleExpression(node, opts = {}) {\n  assert(\"TupleExpression\", node, opts);\n}\n\nfunction assertDecimalLiteral(node, opts = {}) {\n  assert(\"DecimalLiteral\", node, opts);\n}\n\nfunction assertStaticBlock(node, opts = {}) {\n  assert(\"StaticBlock\", node, opts);\n}\n\nfunction assertTSParameterProperty(node, opts = {}) {\n  assert(\"TSParameterProperty\", node, opts);\n}\n\nfunction assertTSDeclareFunction(node, opts = {}) {\n  assert(\"TSDeclareFunction\", node, opts);\n}\n\nfunction assertTSDeclareMethod(node, opts = {}) {\n  assert(\"TSDeclareMethod\", node, opts);\n}\n\nfunction assertTSQualifiedName(node, opts = {}) {\n  assert(\"TSQualifiedName\", node, opts);\n}\n\nfunction assertTSCallSignatureDeclaration(node, opts = {}) {\n  assert(\"TSCallSignatureDeclaration\", node, opts);\n}\n\nfunction assertTSConstructSignatureDeclaration(node, opts = {}) {\n  assert(\"TSConstructSignatureDeclaration\", node, opts);\n}\n\nfunction assertTSPropertySignature(node, opts = {}) {\n  assert(\"TSPropertySignature\", node, opts);\n}\n\nfunction assertTSMethodSignature(node, opts = {}) {\n  assert(\"TSMethodSignature\", node, opts);\n}\n\nfunction assertTSIndexSignature(node, opts = {}) {\n  assert(\"TSIndexSignature\", node, opts);\n}\n\nfunction assertTSAnyKeyword(node, opts = {}) {\n  assert(\"TSAnyKeyword\", node, opts);\n}\n\nfunction assertTSBooleanKeyword(node, opts = {}) {\n  assert(\"TSBooleanKeyword\", node, opts);\n}\n\nfunction assertTSBigIntKeyword(node, opts = {}) {\n  assert(\"TSBigIntKeyword\", node, opts);\n}\n\nfunction assertTSIntrinsicKeyword(node, opts = {}) {\n  assert(\"TSIntrinsicKeyword\", node, opts);\n}\n\nfunction assertTSNeverKeyword(node, opts = {}) {\n  assert(\"TSNeverKeyword\", node, opts);\n}\n\nfunction assertTSNullKeyword(node, opts = {}) {\n  assert(\"TSNullKeyword\", node, opts);\n}\n\nfunction assertTSNumberKeyword(node, opts = {}) {\n  assert(\"TSNumberKeyword\", node, opts);\n}\n\nfunction assertTSObjectKeyword(node, opts = {}) {\n  assert(\"TSObjectKeyword\", node, opts);\n}\n\nfunction assertTSStringKeyword(node, opts = {}) {\n  assert(\"TSStringKeyword\", node, opts);\n}\n\nfunction assertTSSymbolKeyword(node, opts = {}) {\n  assert(\"TSSymbolKeyword\", node, opts);\n}\n\nfunction assertTSUndefinedKeyword(node, opts = {}) {\n  assert(\"TSUndefinedKeyword\", node, opts);\n}\n\nfunction assertTSUnknownKeyword(node, opts = {}) {\n  assert(\"TSUnknownKeyword\", node, opts);\n}\n\nfunction assertTSVoidKeyword(node, opts = {}) {\n  assert(\"TSVoidKeyword\", node, opts);\n}\n\nfunction assertTSThisType(node, opts = {}) {\n  assert(\"TSThisType\", node, opts);\n}\n\nfunction assertTSFunctionType(node, opts = {}) {\n  assert(\"TSFunctionType\", node, opts);\n}\n\nfunction assertTSConstructorType(node, opts = {}) {\n  assert(\"TSConstructorType\", node, opts);\n}\n\nfunction assertTSTypeReference(node, opts = {}) {\n  assert(\"TSTypeReference\", node, opts);\n}\n\nfunction assertTSTypePredicate(node, opts = {}) {\n  assert(\"TSTypePredicate\", node, opts);\n}\n\nfunction assertTSTypeQuery(node, opts = {}) {\n  assert(\"TSTypeQuery\", node, opts);\n}\n\nfunction assertTSTypeLiteral(node, opts = {}) {\n  assert(\"TSTypeLiteral\", node, opts);\n}\n\nfunction assertTSArrayType(node, opts = {}) {\n  assert(\"TSArrayType\", node, opts);\n}\n\nfunction assertTSTupleType(node, opts = {}) {\n  assert(\"TSTupleType\", node, opts);\n}\n\nfunction assertTSOptionalType(node, opts = {}) {\n  assert(\"TSOptionalType\", node, opts);\n}\n\nfunction assertTSRestType(node, opts = {}) {\n  assert(\"TSRestType\", node, opts);\n}\n\nfunction assertTSNamedTupleMember(node, opts = {}) {\n  assert(\"TSNamedTupleMember\", node, opts);\n}\n\nfunction assertTSUnionType(node, opts = {}) {\n  assert(\"TSUnionType\", node, opts);\n}\n\nfunction assertTSIntersectionType(node, opts = {}) {\n  assert(\"TSIntersectionType\", node, opts);\n}\n\nfunction assertTSConditionalType(node, opts = {}) {\n  assert(\"TSConditionalType\", node, opts);\n}\n\nfunction assertTSInferType(node, opts = {}) {\n  assert(\"TSInferType\", node, opts);\n}\n\nfunction assertTSParenthesizedType(node, opts = {}) {\n  assert(\"TSParenthesizedType\", node, opts);\n}\n\nfunction assertTSTypeOperator(node, opts = {}) {\n  assert(\"TSTypeOperator\", node, opts);\n}\n\nfunction assertTSIndexedAccessType(node, opts = {}) {\n  assert(\"TSIndexedAccessType\", node, opts);\n}\n\nfunction assertTSMappedType(node, opts = {}) {\n  assert(\"TSMappedType\", node, opts);\n}\n\nfunction assertTSLiteralType(node, opts = {}) {\n  assert(\"TSLiteralType\", node, opts);\n}\n\nfunction assertTSExpressionWithTypeArguments(node, opts = {}) {\n  assert(\"TSExpressionWithTypeArguments\", node, opts);\n}\n\nfunction assertTSInterfaceDeclaration(node, opts = {}) {\n  assert(\"TSInterfaceDeclaration\", node, opts);\n}\n\nfunction assertTSInterfaceBody(node, opts = {}) {\n  assert(\"TSInterfaceBody\", node, opts);\n}\n\nfunction assertTSTypeAliasDeclaration(node, opts = {}) {\n  assert(\"TSTypeAliasDeclaration\", node, opts);\n}\n\nfunction assertTSAsExpression(node, opts = {}) {\n  assert(\"TSAsExpression\", node, opts);\n}\n\nfunction assertTSTypeAssertion(node, opts = {}) {\n  assert(\"TSTypeAssertion\", node, opts);\n}\n\nfunction assertTSEnumDeclaration(node, opts = {}) {\n  assert(\"TSEnumDeclaration\", node, opts);\n}\n\nfunction assertTSEnumMember(node, opts = {}) {\n  assert(\"TSEnumMember\", node, opts);\n}\n\nfunction assertTSModuleDeclaration(node, opts = {}) {\n  assert(\"TSModuleDeclaration\", node, opts);\n}\n\nfunction assertTSModuleBlock(node, opts = {}) {\n  assert(\"TSModuleBlock\", node, opts);\n}\n\nfunction assertTSImportType(node, opts = {}) {\n  assert(\"TSImportType\", node, opts);\n}\n\nfunction assertTSImportEqualsDeclaration(node, opts = {}) {\n  assert(\"TSImportEqualsDeclaration\", node, opts);\n}\n\nfunction assertTSExternalModuleReference(node, opts = {}) {\n  assert(\"TSExternalModuleReference\", node, opts);\n}\n\nfunction assertTSNonNullExpression(node, opts = {}) {\n  assert(\"TSNonNullExpression\", node, opts);\n}\n\nfunction assertTSExportAssignment(node, opts = {}) {\n  assert(\"TSExportAssignment\", node, opts);\n}\n\nfunction assertTSNamespaceExportDeclaration(node, opts = {}) {\n  assert(\"TSNamespaceExportDeclaration\", node, opts);\n}\n\nfunction assertTSTypeAnnotation(node, opts = {}) {\n  assert(\"TSTypeAnnotation\", node, opts);\n}\n\nfunction assertTSTypeParameterInstantiation(node, opts = {}) {\n  assert(\"TSTypeParameterInstantiation\", node, opts);\n}\n\nfunction assertTSTypeParameterDeclaration(node, opts = {}) {\n  assert(\"TSTypeParameterDeclaration\", node, opts);\n}\n\nfunction assertTSTypeParameter(node, opts = {}) {\n  assert(\"TSTypeParameter\", node, opts);\n}\n\nfunction assertExpression(node, opts = {}) {\n  assert(\"Expression\", node, opts);\n}\n\nfunction assertBinary(node, opts = {}) {\n  assert(\"Binary\", node, opts);\n}\n\nfunction assertScopable(node, opts = {}) {\n  assert(\"Scopable\", node, opts);\n}\n\nfunction assertBlockParent(node, opts = {}) {\n  assert(\"BlockParent\", node, opts);\n}\n\nfunction assertBlock(node, opts = {}) {\n  assert(\"Block\", node, opts);\n}\n\nfunction assertStatement(node, opts = {}) {\n  assert(\"Statement\", node, opts);\n}\n\nfunction assertTerminatorless(node, opts = {}) {\n  assert(\"Terminatorless\", node, opts);\n}\n\nfunction assertCompletionStatement(node, opts = {}) {\n  assert(\"CompletionStatement\", node, opts);\n}\n\nfunction assertConditional(node, opts = {}) {\n  assert(\"Conditional\", node, opts);\n}\n\nfunction assertLoop(node, opts = {}) {\n  assert(\"Loop\", node, opts);\n}\n\nfunction assertWhile(node, opts = {}) {\n  assert(\"While\", node, opts);\n}\n\nfunction assertExpressionWrapper(node, opts = {}) {\n  assert(\"ExpressionWrapper\", node, opts);\n}\n\nfunction assertFor(node, opts = {}) {\n  assert(\"For\", node, opts);\n}\n\nfunction assertForXStatement(node, opts = {}) {\n  assert(\"ForXStatement\", node, opts);\n}\n\nfunction assertFunction(node, opts = {}) {\n  assert(\"Function\", node, opts);\n}\n\nfunction assertFunctionParent(node, opts = {}) {\n  assert(\"FunctionParent\", node, opts);\n}\n\nfunction assertPureish(node, opts = {}) {\n  assert(\"Pureish\", node, opts);\n}\n\nfunction assertDeclaration(node, opts = {}) {\n  assert(\"Declaration\", node, opts);\n}\n\nfunction assertPatternLike(node, opts = {}) {\n  assert(\"PatternLike\", node, opts);\n}\n\nfunction assertLVal(node, opts = {}) {\n  assert(\"LVal\", node, opts);\n}\n\nfunction assertTSEntityName(node, opts = {}) {\n  assert(\"TSEntityName\", node, opts);\n}\n\nfunction assertLiteral(node, opts = {}) {\n  assert(\"Literal\", node, opts);\n}\n\nfunction assertImmutable(node, opts = {}) {\n  assert(\"Immutable\", node, opts);\n}\n\nfunction assertUserWhitespacable(node, opts = {}) {\n  assert(\"UserWhitespacable\", node, opts);\n}\n\nfunction assertMethod(node, opts = {}) {\n  assert(\"Method\", node, opts);\n}\n\nfunction assertObjectMember(node, opts = {}) {\n  assert(\"ObjectMember\", node, opts);\n}\n\nfunction assertProperty(node, opts = {}) {\n  assert(\"Property\", node, opts);\n}\n\nfunction assertUnaryLike(node, opts = {}) {\n  assert(\"UnaryLike\", node, opts);\n}\n\nfunction assertPattern(node, opts = {}) {\n  assert(\"Pattern\", node, opts);\n}\n\nfunction assertClass(node, opts = {}) {\n  assert(\"Class\", node, opts);\n}\n\nfunction assertModuleDeclaration(node, opts = {}) {\n  assert(\"ModuleDeclaration\", node, opts);\n}\n\nfunction assertExportDeclaration(node, opts = {}) {\n  assert(\"ExportDeclaration\", node, opts);\n}\n\nfunction assertModuleSpecifier(node, opts = {}) {\n  assert(\"ModuleSpecifier\", node, opts);\n}\n\nfunction assertFlow(node, opts = {}) {\n  assert(\"Flow\", node, opts);\n}\n\nfunction assertFlowType(node, opts = {}) {\n  assert(\"FlowType\", node, opts);\n}\n\nfunction assertFlowBaseAnnotation(node, opts = {}) {\n  assert(\"FlowBaseAnnotation\", node, opts);\n}\n\nfunction assertFlowDeclaration(node, opts = {}) {\n  assert(\"FlowDeclaration\", node, opts);\n}\n\nfunction assertFlowPredicate(node, opts = {}) {\n  assert(\"FlowPredicate\", node, opts);\n}\n\nfunction assertEnumBody(node, opts = {}) {\n  assert(\"EnumBody\", node, opts);\n}\n\nfunction assertEnumMember(node, opts = {}) {\n  assert(\"EnumMember\", node, opts);\n}\n\nfunction assertJSX(node, opts = {}) {\n  assert(\"JSX\", node, opts);\n}\n\nfunction assertPrivate(node, opts = {}) {\n  assert(\"Private\", node, opts);\n}\n\nfunction assertTSTypeElement(node, opts = {}) {\n  assert(\"TSTypeElement\", node, opts);\n}\n\nfunction assertTSType(node, opts = {}) {\n  assert(\"TSType\", node, opts);\n}\n\nfunction assertTSBaseType(node, opts = {}) {\n  assert(\"TSBaseType\", node, opts);\n}\n\nfunction assertNumberLiteral(node, opts) {\n  console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n  assert(\"NumberLiteral\", node, opts);\n}\n\nfunction assertRegexLiteral(node, opts) {\n  console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n  assert(\"RegexLiteral\", node, opts);\n}\n\nfunction assertRestProperty(node, opts) {\n  console.trace(\"The node type RestProperty has been renamed to RestElement\");\n  assert(\"RestProperty\", node, opts);\n}\n\nfunction assertSpreadProperty(node, opts) {\n  console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n  assert(\"SpreadProperty\", node, opts);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createTypeAnnotationBasedOnTypeof;\n\nvar _generated = require(\"../generated\");\n\nfunction createTypeAnnotationBasedOnTypeof(type) {\n  if (type === \"string\") {\n    return (0, _generated.stringTypeAnnotation)();\n  } else if (type === \"number\") {\n    return (0, _generated.numberTypeAnnotation)();\n  } else if (type === \"undefined\") {\n    return (0, _generated.voidTypeAnnotation)();\n  } else if (type === \"boolean\") {\n    return (0, _generated.booleanTypeAnnotation)();\n  } else if (type === \"function\") {\n    return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)(\"Function\"));\n  } else if (type === \"object\") {\n    return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)(\"Object\"));\n  } else if (type === \"symbol\") {\n    return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)(\"Symbol\"));\n  } else {\n    throw new Error(\"Invalid typeof value\");\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeTypeDuplicates;\n\nvar _generated = require(\"../../validators/generated\");\n\nfunction removeTypeDuplicates(nodes) {\n  const generics = {};\n  const bases = {};\n  const typeGroups = [];\n  const types = [];\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (!node) continue;\n\n    if (types.indexOf(node) >= 0) {\n      continue;\n    }\n\n    if ((0, _generated.isAnyTypeAnnotation)(node)) {\n      return [node];\n    }\n\n    if ((0, _generated.isFlowBaseAnnotation)(node)) {\n      bases[node.type] = node;\n      continue;\n    }\n\n    if ((0, _generated.isUnionTypeAnnotation)(node)) {\n      if (typeGroups.indexOf(node.types) < 0) {\n        nodes = nodes.concat(node.types);\n        typeGroups.push(node.types);\n      }\n\n      continue;\n    }\n\n    if ((0, _generated.isGenericTypeAnnotation)(node)) {\n      const name = node.id.name;\n\n      if (generics[name]) {\n        let existing = generics[name];\n\n        if (existing.typeParameters) {\n          if (node.typeParameters) {\n            existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));\n          }\n        } else {\n          existing = node.typeParameters;\n        }\n      } else {\n        generics[name] = node;\n      }\n\n      continue;\n    }\n\n    types.push(node);\n  }\n\n  for (const type of Object.keys(bases)) {\n    types.push(bases[type]);\n  }\n\n  for (const name of Object.keys(generics)) {\n    types.push(generics[name]);\n  }\n\n  return types;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createFlowUnionType;\n\nvar _generated = require(\"../generated\");\n\nvar _removeTypeDuplicates = _interopRequireDefault(require(\"../../modifications/flow/removeTypeDuplicates\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createFlowUnionType(types) {\n  const flattened = (0, _removeTypeDuplicates.default)(types);\n\n  if (flattened.length === 1) {\n    return flattened[0];\n  } else {\n    return (0, _generated.unionTypeAnnotation)(flattened);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeTypeDuplicates;\n\nvar _generated = require(\"../../validators/generated\");\n\nfunction removeTypeDuplicates(nodes) {\n  const generics = {};\n  const bases = {};\n  const typeGroups = [];\n  const types = [];\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (!node) continue;\n\n    if (types.indexOf(node) >= 0) {\n      continue;\n    }\n\n    if ((0, _generated.isTSAnyKeyword)(node.type)) {\n      return [node];\n    }\n\n    if ((0, _generated.isTSBaseType)(node)) {\n      bases[node.type] = node;\n      continue;\n    }\n\n    if ((0, _generated.isTSUnionType)(node)) {\n      if (typeGroups.indexOf(node.types) < 0) {\n        nodes = nodes.concat(node.types);\n        typeGroups.push(node.types);\n      }\n\n      continue;\n    }\n\n    types.push(node);\n  }\n\n  for (const type of Object.keys(bases)) {\n    types.push(bases[type]);\n  }\n\n  for (const name of Object.keys(generics)) {\n    types.push(generics[name]);\n  }\n\n  return types;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createTSUnionType;\n\nvar _generated = require(\"../generated\");\n\nvar _removeTypeDuplicates = _interopRequireDefault(require(\"../../modifications/typescript/removeTypeDuplicates\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createTSUnionType(typeAnnotations) {\n  const types = typeAnnotations.map(type => type.typeAnnotations);\n  const flattened = (0, _removeTypeDuplicates.default)(types);\n\n  if (flattened.length === 1) {\n    return flattened[0];\n  } else {\n    return (0, _generated.tsUnionType)(flattened);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneNode;\n\nvar _definitions = require(\"../definitions\");\n\nconst has = Function.call.bind(Object.prototype.hasOwnProperty);\n\nfunction cloneIfNode(obj, deep, withoutLoc) {\n  if (obj && typeof obj.type === \"string\") {\n    return cloneNode(obj, deep, withoutLoc);\n  }\n\n  return obj;\n}\n\nfunction cloneIfNodeOrArray(obj, deep, withoutLoc) {\n  if (Array.isArray(obj)) {\n    return obj.map(node => cloneIfNode(node, deep, withoutLoc));\n  }\n\n  return cloneIfNode(obj, deep, withoutLoc);\n}\n\nfunction cloneNode(node, deep = true, withoutLoc = false) {\n  if (!node) return node;\n  const {\n    type\n  } = node;\n  const newNode = {\n    type\n  };\n\n  if (type === \"Identifier\") {\n    newNode.name = node.name;\n\n    if (has(node, \"optional\") && typeof node.optional === \"boolean\") {\n      newNode.optional = node.optional;\n    }\n\n    if (has(node, \"typeAnnotation\")) {\n      newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc) : node.typeAnnotation;\n    }\n  } else if (!has(_definitions.NODE_FIELDS, type)) {\n    throw new Error(`Unknown node type: \"${type}\"`);\n  } else {\n    for (const field of Object.keys(_definitions.NODE_FIELDS[type])) {\n      if (has(node, field)) {\n        if (deep) {\n          newNode[field] = type === \"File\" && field === \"comments\" ? maybeCloneComments(node.comments, deep, withoutLoc) : cloneIfNodeOrArray(node[field], true, withoutLoc);\n        } else {\n          newNode[field] = node[field];\n        }\n      }\n    }\n  }\n\n  if (has(node, \"loc\")) {\n    if (withoutLoc) {\n      newNode.loc = null;\n    } else {\n      newNode.loc = node.loc;\n    }\n  }\n\n  if (has(node, \"leadingComments\")) {\n    newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc);\n  }\n\n  if (has(node, \"innerComments\")) {\n    newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc);\n  }\n\n  if (has(node, \"trailingComments\")) {\n    newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc);\n  }\n\n  if (has(node, \"extra\")) {\n    newNode.extra = Object.assign({}, node.extra);\n  }\n\n  return newNode;\n}\n\nfunction cloneCommentsWithoutLoc(comments) {\n  return comments.map(({\n    type,\n    value\n  }) => ({\n    type,\n    value,\n    loc: null\n  }));\n}\n\nfunction maybeCloneComments(comments, deep, withoutLoc) {\n  return deep && withoutLoc ? cloneCommentsWithoutLoc(comments) : comments;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = clone;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction clone(node) {\n  return (0, _cloneNode.default)(node, false);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneDeep;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneDeep(node) {\n  return (0, _cloneNode.default)(node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneDeepWithoutLoc;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneDeepWithoutLoc(node) {\n  return (0, _cloneNode.default)(node, true, true);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneWithoutLoc;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneWithoutLoc(node) {\n  return (0, _cloneNode.default)(node, false, true);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addComments;\n\nfunction addComments(node, type, comments) {\n  if (!comments || !node) return node;\n  const key = `${type}Comments`;\n\n  if (node[key]) {\n    if (type === \"leading\") {\n      node[key] = comments.concat(node[key]);\n    } else {\n      node[key] = node[key].concat(comments);\n    }\n  } else {\n    node[key] = comments;\n  }\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addComment;\n\nvar _addComments = _interopRequireDefault(require(\"./addComments\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction addComment(node, type, content, line) {\n  return (0, _addComments.default)(node, type, [{\n    type: line ? \"CommentLine\" : \"CommentBlock\",\n    value: content\n  }]);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inherit;\n\nfunction inherit(key, child, parent) {\n  if (child && parent) {\n    child[key] = Array.from(new Set([].concat(child[key], parent[key]).filter(Boolean)));\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritInnerComments;\n\nvar _inherit = _interopRequireDefault(require(\"../utils/inherit\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritInnerComments(child, parent) {\n  (0, _inherit.default)(\"innerComments\", child, parent);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritLeadingComments;\n\nvar _inherit = _interopRequireDefault(require(\"../utils/inherit\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritLeadingComments(child, parent) {\n  (0, _inherit.default)(\"leadingComments\", child, parent);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritTrailingComments;\n\nvar _inherit = _interopRequireDefault(require(\"../utils/inherit\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritTrailingComments(child, parent) {\n  (0, _inherit.default)(\"trailingComments\", child, parent);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritsComments;\n\nvar _inheritTrailingComments = _interopRequireDefault(require(\"./inheritTrailingComments\"));\n\nvar _inheritLeadingComments = _interopRequireDefault(require(\"./inheritLeadingComments\"));\n\nvar _inheritInnerComments = _interopRequireDefault(require(\"./inheritInnerComments\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritsComments(child, parent) {\n  (0, _inheritTrailingComments.default)(child, parent);\n  (0, _inheritLeadingComments.default)(child, parent);\n  (0, _inheritInnerComments.default)(child, parent);\n  return child;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeComments;\n\nvar _constants = require(\"../constants\");\n\nfunction removeComments(node) {\n  _constants.COMMENT_KEYS.forEach(key => {\n    node[key] = null;\n  });\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TSBASETYPE_TYPES = exports.TSTYPE_TYPES = exports.TSTYPEELEMENT_TYPES = exports.PRIVATE_TYPES = exports.JSX_TYPES = exports.ENUMMEMBER_TYPES = exports.ENUMBODY_TYPES = exports.FLOWPREDICATE_TYPES = exports.FLOWDECLARATION_TYPES = exports.FLOWBASEANNOTATION_TYPES = exports.FLOWTYPE_TYPES = exports.FLOW_TYPES = exports.MODULESPECIFIER_TYPES = exports.EXPORTDECLARATION_TYPES = exports.MODULEDECLARATION_TYPES = exports.CLASS_TYPES = exports.PATTERN_TYPES = exports.UNARYLIKE_TYPES = exports.PROPERTY_TYPES = exports.OBJECTMEMBER_TYPES = exports.METHOD_TYPES = exports.USERWHITESPACABLE_TYPES = exports.IMMUTABLE_TYPES = exports.LITERAL_TYPES = exports.TSENTITYNAME_TYPES = exports.LVAL_TYPES = exports.PATTERNLIKE_TYPES = exports.DECLARATION_TYPES = exports.PUREISH_TYPES = exports.FUNCTIONPARENT_TYPES = exports.FUNCTION_TYPES = exports.FORXSTATEMENT_TYPES = exports.FOR_TYPES = exports.EXPRESSIONWRAPPER_TYPES = exports.WHILE_TYPES = exports.LOOP_TYPES = exports.CONDITIONAL_TYPES = exports.COMPLETIONSTATEMENT_TYPES = exports.TERMINATORLESS_TYPES = exports.STATEMENT_TYPES = exports.BLOCK_TYPES = exports.BLOCKPARENT_TYPES = exports.SCOPABLE_TYPES = exports.BINARY_TYPES = exports.EXPRESSION_TYPES = void 0;\n\nvar _definitions = require(\"../../definitions\");\n\nconst EXPRESSION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Expression\"];\nexports.EXPRESSION_TYPES = EXPRESSION_TYPES;\nconst BINARY_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Binary\"];\nexports.BINARY_TYPES = BINARY_TYPES;\nconst SCOPABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Scopable\"];\nexports.SCOPABLE_TYPES = SCOPABLE_TYPES;\nconst BLOCKPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"BlockParent\"];\nexports.BLOCKPARENT_TYPES = BLOCKPARENT_TYPES;\nconst BLOCK_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Block\"];\nexports.BLOCK_TYPES = BLOCK_TYPES;\nconst STATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Statement\"];\nexports.STATEMENT_TYPES = STATEMENT_TYPES;\nconst TERMINATORLESS_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Terminatorless\"];\nexports.TERMINATORLESS_TYPES = TERMINATORLESS_TYPES;\nconst COMPLETIONSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"CompletionStatement\"];\nexports.COMPLETIONSTATEMENT_TYPES = COMPLETIONSTATEMENT_TYPES;\nconst CONDITIONAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Conditional\"];\nexports.CONDITIONAL_TYPES = CONDITIONAL_TYPES;\nconst LOOP_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Loop\"];\nexports.LOOP_TYPES = LOOP_TYPES;\nconst WHILE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"While\"];\nexports.WHILE_TYPES = WHILE_TYPES;\nconst EXPRESSIONWRAPPER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ExpressionWrapper\"];\nexports.EXPRESSIONWRAPPER_TYPES = EXPRESSIONWRAPPER_TYPES;\nconst FOR_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"For\"];\nexports.FOR_TYPES = FOR_TYPES;\nconst FORXSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ForXStatement\"];\nexports.FORXSTATEMENT_TYPES = FORXSTATEMENT_TYPES;\nconst FUNCTION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Function\"];\nexports.FUNCTION_TYPES = FUNCTION_TYPES;\nconst FUNCTIONPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FunctionParent\"];\nexports.FUNCTIONPARENT_TYPES = FUNCTIONPARENT_TYPES;\nconst PUREISH_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Pureish\"];\nexports.PUREISH_TYPES = PUREISH_TYPES;\nconst DECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Declaration\"];\nexports.DECLARATION_TYPES = DECLARATION_TYPES;\nconst PATTERNLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"PatternLike\"];\nexports.PATTERNLIKE_TYPES = PATTERNLIKE_TYPES;\nconst LVAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"LVal\"];\nexports.LVAL_TYPES = LVAL_TYPES;\nconst TSENTITYNAME_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSEntityName\"];\nexports.TSENTITYNAME_TYPES = TSENTITYNAME_TYPES;\nconst LITERAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Literal\"];\nexports.LITERAL_TYPES = LITERAL_TYPES;\nconst IMMUTABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Immutable\"];\nexports.IMMUTABLE_TYPES = IMMUTABLE_TYPES;\nconst USERWHITESPACABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"UserWhitespacable\"];\nexports.USERWHITESPACABLE_TYPES = USERWHITESPACABLE_TYPES;\nconst METHOD_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Method\"];\nexports.METHOD_TYPES = METHOD_TYPES;\nconst OBJECTMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ObjectMember\"];\nexports.OBJECTMEMBER_TYPES = OBJECTMEMBER_TYPES;\nconst PROPERTY_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Property\"];\nexports.PROPERTY_TYPES = PROPERTY_TYPES;\nconst UNARYLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"UnaryLike\"];\nexports.UNARYLIKE_TYPES = UNARYLIKE_TYPES;\nconst PATTERN_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Pattern\"];\nexports.PATTERN_TYPES = PATTERN_TYPES;\nconst CLASS_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Class\"];\nexports.CLASS_TYPES = CLASS_TYPES;\nconst MODULEDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ModuleDeclaration\"];\nexports.MODULEDECLARATION_TYPES = MODULEDECLARATION_TYPES;\nconst EXPORTDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ExportDeclaration\"];\nexports.EXPORTDECLARATION_TYPES = EXPORTDECLARATION_TYPES;\nconst MODULESPECIFIER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ModuleSpecifier\"];\nexports.MODULESPECIFIER_TYPES = MODULESPECIFIER_TYPES;\nconst FLOW_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Flow\"];\nexports.FLOW_TYPES = FLOW_TYPES;\nconst FLOWTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowType\"];\nexports.FLOWTYPE_TYPES = FLOWTYPE_TYPES;\nconst FLOWBASEANNOTATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowBaseAnnotation\"];\nexports.FLOWBASEANNOTATION_TYPES = FLOWBASEANNOTATION_TYPES;\nconst FLOWDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowDeclaration\"];\nexports.FLOWDECLARATION_TYPES = FLOWDECLARATION_TYPES;\nconst FLOWPREDICATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowPredicate\"];\nexports.FLOWPREDICATE_TYPES = FLOWPREDICATE_TYPES;\nconst ENUMBODY_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"EnumBody\"];\nexports.ENUMBODY_TYPES = ENUMBODY_TYPES;\nconst ENUMMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"EnumMember\"];\nexports.ENUMMEMBER_TYPES = ENUMMEMBER_TYPES;\nconst JSX_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"JSX\"];\nexports.JSX_TYPES = JSX_TYPES;\nconst PRIVATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Private\"];\nexports.PRIVATE_TYPES = PRIVATE_TYPES;\nconst TSTYPEELEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSTypeElement\"];\nexports.TSTYPEELEMENT_TYPES = TSTYPEELEMENT_TYPES;\nconst TSTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSType\"];\nexports.TSTYPE_TYPES = TSTYPE_TYPES;\nconst TSBASETYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSBaseType\"];\nexports.TSBASETYPE_TYPES = TSBASETYPE_TYPES;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toBlock;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toBlock(node, parent) {\n  if ((0, _generated.isBlockStatement)(node)) {\n    return node;\n  }\n\n  let blockNodes = [];\n\n  if ((0, _generated.isEmptyStatement)(node)) {\n    blockNodes = [];\n  } else {\n    if (!(0, _generated.isStatement)(node)) {\n      if ((0, _generated.isFunction)(parent)) {\n        node = (0, _generated2.returnStatement)(node);\n      } else {\n        node = (0, _generated2.expressionStatement)(node);\n      }\n    }\n\n    blockNodes = [node];\n  }\n\n  return (0, _generated2.blockStatement)(blockNodes);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = ensureBlock;\n\nvar _toBlock = _interopRequireDefault(require(\"./toBlock\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ensureBlock(node, key = \"body\") {\n  return node[key] = (0, _toBlock.default)(node[key], node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toIdentifier;\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"../validators/isValidIdentifier\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toIdentifier(name) {\n  name = name + \"\";\n  name = name.replace(/[^a-zA-Z0-9$_]/g, \"-\");\n  name = name.replace(/^[-0-9]+/, \"\");\n  name = name.replace(/[-\\s]+(.)?/g, function (match, c) {\n    return c ? c.toUpperCase() : \"\";\n  });\n\n  if (!(0, _isValidIdentifier.default)(name)) {\n    name = `_${name}`;\n  }\n\n  return name || \"_\";\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toBindingIdentifierName;\n\nvar _toIdentifier = _interopRequireDefault(require(\"./toIdentifier\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toBindingIdentifierName(name) {\n  name = (0, _toIdentifier.default)(name);\n  if (name === \"eval\" || name === \"arguments\") name = \"_\" + name;\n  return name;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toComputedKey;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toComputedKey(node, key = node.key || node.property) {\n  if (!node.computed && (0, _generated.isIdentifier)(key)) key = (0, _generated2.stringLiteral)(key.name);\n  return key;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toExpression;\n\nvar _generated = require(\"../validators/generated\");\n\nfunction toExpression(node) {\n  if ((0, _generated.isExpressionStatement)(node)) {\n    node = node.expression;\n  }\n\n  if ((0, _generated.isExpression)(node)) {\n    return node;\n  }\n\n  if ((0, _generated.isClass)(node)) {\n    node.type = \"ClassExpression\";\n  } else if ((0, _generated.isFunction)(node)) {\n    node.type = \"FunctionExpression\";\n  }\n\n  if (!(0, _generated.isExpression)(node)) {\n    throw new Error(`cannot turn ${node.type} to an expression`);\n  }\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = traverseFast;\n\nvar _definitions = require(\"../definitions\");\n\nfunction traverseFast(node, enter, opts) {\n  if (!node) return;\n  const keys = _definitions.VISITOR_KEYS[node.type];\n  if (!keys) return;\n  opts = opts || {};\n  enter(node, opts);\n\n  for (const key of keys) {\n    const subNode = node[key];\n\n    if (Array.isArray(subNode)) {\n      for (const node of subNode) {\n        traverseFast(node, enter, opts);\n      }\n    } else {\n      traverseFast(subNode, enter, opts);\n    }\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeProperties;\n\nvar _constants = require(\"../constants\");\n\nconst CLEAR_KEYS = [\"tokens\", \"start\", \"end\", \"loc\", \"raw\", \"rawValue\"];\n\nconst CLEAR_KEYS_PLUS_COMMENTS = _constants.COMMENT_KEYS.concat([\"comments\"]).concat(CLEAR_KEYS);\n\nfunction removeProperties(node, opts = {}) {\n  const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;\n\n  for (const key of map) {\n    if (node[key] != null) node[key] = undefined;\n  }\n\n  for (const key of Object.keys(node)) {\n    if (key[0] === \"_\" && node[key] != null) node[key] = undefined;\n  }\n\n  const symbols = Object.getOwnPropertySymbols(node);\n\n  for (const sym of symbols) {\n    node[sym] = null;\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removePropertiesDeep;\n\nvar _traverseFast = _interopRequireDefault(require(\"../traverse/traverseFast\"));\n\nvar _removeProperties = _interopRequireDefault(require(\"./removeProperties\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction removePropertiesDeep(tree, opts) {\n  (0, _traverseFast.default)(tree, _removeProperties.default, opts);\n  return tree;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toKeyAlias;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _cloneNode = _interopRequireDefault(require(\"../clone/cloneNode\"));\n\nvar _removePropertiesDeep = _interopRequireDefault(require(\"../modifications/removePropertiesDeep\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toKeyAlias(node, key = node.key) {\n  let alias;\n\n  if (node.kind === \"method\") {\n    return toKeyAlias.increment() + \"\";\n  } else if ((0, _generated.isIdentifier)(key)) {\n    alias = key.name;\n  } else if ((0, _generated.isStringLiteral)(key)) {\n    alias = JSON.stringify(key.value);\n  } else {\n    alias = JSON.stringify((0, _removePropertiesDeep.default)((0, _cloneNode.default)(key)));\n  }\n\n  if (node.computed) {\n    alias = `[${alias}]`;\n  }\n\n  if (node.static) {\n    alias = `static:${alias}`;\n  }\n\n  return alias;\n}\n\ntoKeyAlias.uid = 0;\n\ntoKeyAlias.increment = function () {\n  if (toKeyAlias.uid >= Number.MAX_SAFE_INTEGER) {\n    return toKeyAlias.uid = 0;\n  } else {\n    return toKeyAlias.uid++;\n  }\n};", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getBindingIdentifiers;\n\nvar _generated = require(\"../validators/generated\");\n\nfunction getBindingIdentifiers(node, duplicates, outerOnly) {\n  let search = [].concat(node);\n  const ids = Object.create(null);\n\n  while (search.length) {\n    const id = search.shift();\n    if (!id) continue;\n    const keys = getBindingIdentifiers.keys[id.type];\n\n    if ((0, _generated.isIdentifier)(id)) {\n      if (duplicates) {\n        const _ids = ids[id.name] = ids[id.name] || [];\n\n        _ids.push(id);\n      } else {\n        ids[id.name] = id;\n      }\n\n      continue;\n    }\n\n    if ((0, _generated.isExportDeclaration)(id)) {\n      if ((0, _generated.isDeclaration)(id.declaration)) {\n        search.push(id.declaration);\n      }\n\n      continue;\n    }\n\n    if (outerOnly) {\n      if ((0, _generated.isFunctionDeclaration)(id)) {\n        search.push(id.id);\n        continue;\n      }\n\n      if ((0, _generated.isFunctionExpression)(id)) {\n        continue;\n      }\n    }\n\n    if (keys) {\n      for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n\n        if (id[key]) {\n          search = search.concat(id[key]);\n        }\n      }\n    }\n  }\n\n  return ids;\n}\n\ngetBindingIdentifiers.keys = {\n  DeclareClass: [\"id\"],\n  DeclareFunction: [\"id\"],\n  DeclareModule: [\"id\"],\n  DeclareVariable: [\"id\"],\n  DeclareInterface: [\"id\"],\n  DeclareTypeAlias: [\"id\"],\n  DeclareOpaqueType: [\"id\"],\n  InterfaceDeclaration: [\"id\"],\n  TypeAlias: [\"id\"],\n  OpaqueType: [\"id\"],\n  CatchClause: [\"param\"],\n  LabeledStatement: [\"label\"],\n  UnaryExpression: [\"argument\"],\n  AssignmentExpression: [\"left\"],\n  ImportSpecifier: [\"local\"],\n  ImportNamespaceSpecifier: [\"local\"],\n  ImportDefaultSpecifier: [\"local\"],\n  ImportDeclaration: [\"specifiers\"],\n  ExportSpecifier: [\"exported\"],\n  ExportNamespaceSpecifier: [\"exported\"],\n  ExportDefaultSpecifier: [\"exported\"],\n  FunctionDeclaration: [\"id\", \"params\"],\n  FunctionExpression: [\"id\", \"params\"],\n  ArrowFunctionExpression: [\"params\"],\n  ObjectMethod: [\"params\"],\n  ClassMethod: [\"params\"],\n  ForInStatement: [\"left\"],\n  ForOfStatement: [\"left\"],\n  ClassDeclaration: [\"id\"],\n  ClassExpression: [\"id\"],\n  RestElement: [\"argument\"],\n  UpdateExpression: [\"argument\"],\n  ObjectProperty: [\"value\"],\n  AssignmentPattern: [\"left\"],\n  ArrayPattern: [\"elements\"],\n  ObjectPattern: [\"properties\"],\n  VariableDeclaration: [\"declarations\"],\n  VariableDeclarator: [\"id\"]\n};", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = gatherSequenceExpressions;\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"../retrievers/getBindingIdentifiers\"));\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nvar _cloneNode = _interopRequireDefault(require(\"../clone/cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction gatherSequenceExpressions(nodes, scope, declars) {\n  const exprs = [];\n  let ensureLastUndefined = true;\n\n  for (const node of nodes) {\n    if (!(0, _generated.isEmptyStatement)(node)) {\n      ensureLastUndefined = false;\n    }\n\n    if ((0, _generated.isExpression)(node)) {\n      exprs.push(node);\n    } else if ((0, _generated.isExpressionStatement)(node)) {\n      exprs.push(node.expression);\n    } else if ((0, _generated.isVariableDeclaration)(node)) {\n      if (node.kind !== \"var\") return;\n\n      for (const declar of node.declarations) {\n        const bindings = (0, _getBindingIdentifiers.default)(declar);\n\n        for (const key of Object.keys(bindings)) {\n          declars.push({\n            kind: node.kind,\n            id: (0, _cloneNode.default)(bindings[key])\n          });\n        }\n\n        if (declar.init) {\n          exprs.push((0, _generated2.assignmentExpression)(\"=\", declar.id, declar.init));\n        }\n      }\n\n      ensureLastUndefined = true;\n    } else if ((0, _generated.isIfStatement)(node)) {\n      const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode();\n      const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode();\n      if (!consequent || !alternate) return;\n      exprs.push((0, _generated2.conditionalExpression)(node.test, consequent, alternate));\n    } else if ((0, _generated.isBlockStatement)(node)) {\n      const body = gatherSequenceExpressions(node.body, scope, declars);\n      if (!body) return;\n      exprs.push(body);\n    } else if ((0, _generated.isEmptyStatement)(node)) {\n      if (nodes.indexOf(node) === 0) {\n        ensureLastUndefined = true;\n      }\n    } else {\n      return;\n    }\n  }\n\n  if (ensureLastUndefined) {\n    exprs.push(scope.buildUndefinedNode());\n  }\n\n  if (exprs.length === 1) {\n    return exprs[0];\n  } else {\n    return (0, _generated2.sequenceExpression)(exprs);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toSequenceExpression;\n\nvar _gatherSequenceExpressions = _interopRequireDefault(require(\"./gatherSequenceExpressions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toSequenceExpression(nodes, scope) {\n  if (!(nodes == null ? void 0 : nodes.length)) return;\n  const declars = [];\n  const result = (0, _gatherSequenceExpressions.default)(nodes, scope, declars);\n  if (!result) return;\n\n  for (const declar of declars) {\n    scope.push(declar);\n  }\n\n  return result;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toStatement;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toStatement(node, ignore) {\n  if ((0, _generated.isStatement)(node)) {\n    return node;\n  }\n\n  let mustHaveId = false;\n  let newType;\n\n  if ((0, _generated.isClass)(node)) {\n    mustHaveId = true;\n    newType = \"ClassDeclaration\";\n  } else if ((0, _generated.isFunction)(node)) {\n    mustHaveId = true;\n    newType = \"FunctionDeclaration\";\n  } else if ((0, _generated.isAssignmentExpression)(node)) {\n    return (0, _generated2.expressionStatement)(node);\n  }\n\n  if (mustHaveId && !node.id) {\n    newType = false;\n  }\n\n  if (!newType) {\n    if (ignore) {\n      return false;\n    } else {\n      throw new Error(`cannot turn ${node.type} to a statement`);\n    }\n  }\n\n  node.type = newType;\n  return node;\n}", "var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n  return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n", "var baseIsRegExp = require('./_baseIsRegExp'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = valueToNode;\n\nvar _isPlainObject = _interopRequireDefault(require(\"lodash/isPlainObject\"));\n\nvar _isRegExp = _interopRequireDefault(require(\"lodash/isRegExp\"));\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"../validators/isValidIdentifier\"));\n\nvar _generated = require(\"../builders/generated\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction valueToNode(value) {\n  if (value === undefined) {\n    return (0, _generated.identifier)(\"undefined\");\n  }\n\n  if (value === true || value === false) {\n    return (0, _generated.booleanLiteral)(value);\n  }\n\n  if (value === null) {\n    return (0, _generated.nullLiteral)();\n  }\n\n  if (typeof value === \"string\") {\n    return (0, _generated.stringLiteral)(value);\n  }\n\n  if (typeof value === \"number\") {\n    let result;\n\n    if (Number.isFinite(value)) {\n      result = (0, _generated.numericLiteral)(Math.abs(value));\n    } else {\n      let numerator;\n\n      if (Number.isNaN(value)) {\n        numerator = (0, _generated.numericLiteral)(0);\n      } else {\n        numerator = (0, _generated.numericLiteral)(1);\n      }\n\n      result = (0, _generated.binaryExpression)(\"/\", numerator, (0, _generated.numericLiteral)(0));\n    }\n\n    if (value < 0 || Object.is(value, -0)) {\n      result = (0, _generated.unaryExpression)(\"-\", result);\n    }\n\n    return result;\n  }\n\n  if ((0, _isRegExp.default)(value)) {\n    const pattern = value.source;\n    const flags = value.toString().match(/\\/([a-z]+|)$/)[1];\n    return (0, _generated.regExpLiteral)(pattern, flags);\n  }\n\n  if (Array.isArray(value)) {\n    return (0, _generated.arrayExpression)(value.map(valueToNode));\n  }\n\n  if ((0, _isPlainObject.default)(value)) {\n    const props = [];\n\n    for (const key of Object.keys(value)) {\n      let nodeKey;\n\n      if ((0, _isValidIdentifier.default)(key)) {\n        nodeKey = (0, _generated.identifier)(key);\n      } else {\n        nodeKey = (0, _generated.stringLiteral)(key);\n      }\n\n      props.push((0, _generated.objectProperty)(nodeKey, valueToNode(value[key])));\n    }\n\n    return (0, _generated.objectExpression)(props);\n  }\n\n  throw new Error(\"don't know how to turn this value into a node\");\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = appendToMemberExpression;\n\nvar _generated = require(\"../builders/generated\");\n\nfunction appendToMemberExpression(member, append, computed = false) {\n  member.object = (0, _generated.memberExpression)(member.object, member.property, member.computed);\n  member.property = append;\n  member.computed = !!computed;\n  return member;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inherits;\n\nvar _constants = require(\"../constants\");\n\nvar _inheritsComments = _interopRequireDefault(require(\"../comments/inheritsComments\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inherits(child, parent) {\n  if (!child || !parent) return child;\n\n  for (const key of _constants.INHERIT_KEYS.optional) {\n    if (child[key] == null) {\n      child[key] = parent[key];\n    }\n  }\n\n  for (const key of Object.keys(parent)) {\n    if (key[0] === \"_\" && key !== \"__clone\") child[key] = parent[key];\n  }\n\n  for (const key of _constants.INHERIT_KEYS.force) {\n    child[key] = parent[key];\n  }\n\n  (0, _inheritsComments.default)(child, parent);\n  return child;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prependToMemberExpression;\n\nvar _generated = require(\"../builders/generated\");\n\nfunction prependToMemberExpression(member, prepend) {\n  member.object = (0, _generated.memberExpression)(prepend, member.object);\n  return member;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getOuterBindingIdentifiers;\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"./getBindingIdentifiers\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getOuterBindingIdentifiers(node, duplicates) {\n  return (0, _getBindingIdentifiers.default)(node, duplicates, true);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = traverse;\n\nvar _definitions = require(\"../definitions\");\n\nfunction traverse(node, handlers, state) {\n  if (typeof handlers === \"function\") {\n    handlers = {\n      enter: handlers\n    };\n  }\n\n  const {\n    enter,\n    exit\n  } = handlers;\n  traverseSimpleImpl(node, enter, exit, state, []);\n}\n\nfunction traverseSimpleImpl(node, enter, exit, state, ancestors) {\n  const keys = _definitions.VISITOR_KEYS[node.type];\n  if (!keys) return;\n  if (enter) enter(node, ancestors, state);\n\n  for (const key of keys) {\n    const subNode = node[key];\n\n    if (Array.isArray(subNode)) {\n      for (let i = 0; i < subNode.length; i++) {\n        const child = subNode[i];\n        if (!child) continue;\n        ancestors.push({\n          node,\n          key,\n          index: i\n        });\n        traverseSimpleImpl(child, enter, exit, state, ancestors);\n        ancestors.pop();\n      }\n    } else if (subNode) {\n      ancestors.push({\n        node,\n        key\n      });\n      traverseSimpleImpl(subNode, enter, exit, state, ancestors);\n      ancestors.pop();\n    }\n  }\n\n  if (exit) exit(node, ancestors, state);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBinding;\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"../retrievers/getBindingIdentifiers\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isBinding(node, parent, grandparent) {\n  if (grandparent && node.type === \"Identifier\" && parent.type === \"ObjectProperty\" && grandparent.type === \"ObjectExpression\") {\n    return false;\n  }\n\n  const keys = _getBindingIdentifiers.default.keys[parent.type];\n\n  if (keys) {\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      const val = parent[key];\n\n      if (Array.isArray(val)) {\n        if (val.indexOf(node) >= 0) return true;\n      } else {\n        if (val === node) return true;\n      }\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLet;\n\nvar _generated = require(\"./generated\");\n\nvar _constants = require(\"../constants\");\n\nfunction isLet(node) {\n  return (0, _generated.isVariableDeclaration)(node) && (node.kind !== \"var\" || node[_constants.BLOCK_SCOPED_SYMBOL]);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBlockScoped;\n\nvar _generated = require(\"./generated\");\n\nvar _isLet = _interopRequireDefault(require(\"./isLet\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isBlockScoped(node) {\n  return (0, _generated.isFunctionDeclaration)(node) || (0, _generated.isClassDeclaration)(node) || (0, _isLet.default)(node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isImmutable;\n\nvar _isType = _interopRequireDefault(require(\"./isType\"));\n\nvar _generated = require(\"./generated\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isImmutable(node) {\n  if ((0, _isType.default)(node.type, \"Immutable\")) return true;\n\n  if ((0, _generated.isIdentifier)(node)) {\n    if (node.name === \"undefined\") {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNodesEquivalent;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isNodesEquivalent(a, b) {\n  if (typeof a !== \"object\" || typeof b !== \"object\" || a == null || b == null) {\n    return a === b;\n  }\n\n  if (a.type !== b.type) {\n    return false;\n  }\n\n  const fields = Object.keys(_definitions.NODE_FIELDS[a.type] || a.type);\n  const visitorKeys = _definitions.VISITOR_KEYS[a.type];\n\n  for (const field of fields) {\n    if (typeof a[field] !== typeof b[field]) {\n      return false;\n    }\n\n    if (a[field] == null && b[field] == null) {\n      continue;\n    } else if (a[field] == null || b[field] == null) {\n      return false;\n    }\n\n    if (Array.isArray(a[field])) {\n      if (!Array.isArray(b[field])) {\n        return false;\n      }\n\n      if (a[field].length !== b[field].length) {\n        return false;\n      }\n\n      for (let i = 0; i < a[field].length; i++) {\n        if (!isNodesEquivalent(a[field][i], b[field][i])) {\n          return false;\n        }\n      }\n\n      continue;\n    }\n\n    if (typeof a[field] === \"object\" && !(visitorKeys == null ? void 0 : visitorKeys.includes(field))) {\n      for (const key of Object.keys(a[field])) {\n        if (a[field][key] !== b[field][key]) {\n          return false;\n        }\n      }\n\n      continue;\n    }\n\n    if (!isNodesEquivalent(a[field], b[field])) {\n      return false;\n    }\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isReferenced;\n\nfunction isReferenced(node, parent, grandparent) {\n  switch (parent.type) {\n    case \"MemberExpression\":\n    case \"JSXMemberExpression\":\n    case \"OptionalMemberExpression\":\n      if (parent.property === node) {\n        return !!parent.computed;\n      }\n\n      return parent.object === node;\n\n    case \"VariableDeclarator\":\n      return parent.init === node;\n\n    case \"ArrowFunctionExpression\":\n      return parent.body === node;\n\n    case \"ExportSpecifier\":\n      if (parent.source) {\n        return false;\n      }\n\n      return parent.local === node;\n\n    case \"PrivateName\":\n      return false;\n\n    case \"ClassMethod\":\n    case \"ClassPrivateMethod\":\n    case \"ObjectMethod\":\n      if (parent.params.includes(node)) {\n        return false;\n      }\n\n    case \"ObjectProperty\":\n    case \"ClassProperty\":\n    case \"ClassPrivateProperty\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n\n      if (parent.value === node) {\n        return !grandparent || grandparent.type !== \"ObjectPattern\";\n      }\n\n      return true;\n\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n      return parent.superClass === node;\n\n    case \"AssignmentExpression\":\n      return parent.right === node;\n\n    case \"AssignmentPattern\":\n      return parent.right === node;\n\n    case \"LabeledStatement\":\n      return false;\n\n    case \"CatchClause\":\n      return false;\n\n    case \"RestElement\":\n      return false;\n\n    case \"BreakStatement\":\n    case \"ContinueStatement\":\n      return false;\n\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n      return false;\n\n    case \"ExportNamespaceSpecifier\":\n    case \"ExportDefaultSpecifier\":\n      return false;\n\n    case \"ImportDefaultSpecifier\":\n    case \"ImportNamespaceSpecifier\":\n    case \"ImportSpecifier\":\n      return false;\n\n    case \"JSXAttribute\":\n      return false;\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n      return false;\n\n    case \"MetaProperty\":\n      return false;\n\n    case \"ObjectTypeProperty\":\n      return parent.key !== node;\n\n    case \"TSEnumMember\":\n      return parent.id !== node;\n\n    case \"TSPropertySignature\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n\n      return true;\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isScope;\n\nvar _generated = require(\"./generated\");\n\nfunction isScope(node, parent) {\n  if ((0, _generated.isBlockStatement)(node) && ((0, _generated.isFunction)(parent) || (0, _generated.isCatchClause)(parent))) {\n    return false;\n  }\n\n  if ((0, _generated.isPattern)(node) && ((0, _generated.isFunction)(parent) || (0, _generated.isCatchClause)(parent))) {\n    return true;\n  }\n\n  return (0, _generated.isScopable)(node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSpecifierDefault;\n\nvar _generated = require(\"./generated\");\n\nfunction isSpecifierDefault(specifier) {\n  return (0, _generated.isImportDefaultSpecifier)(specifier) || (0, _generated.isIdentifier)(specifier.imported || specifier.exported, {\n    name: \"default\"\n  });\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isValidES3Identifier;\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"./isValidIdentifier\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst 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\"]);\n\nfunction isValidES3Identifier(name) {\n  return (0, _isValidIdentifier.default)(name) && !RESERVED_WORDS_ES3_ONLY.has(name);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isVar;\n\nvar _generated = require(\"./generated\");\n\nvar _constants = require(\"../constants\");\n\nfunction isVar(node) {\n  return (0, _generated.isVariableDeclaration)(node, {\n    kind: \"var\"\n  }) && !node[_constants.BLOCK_SCOPED_SYMBOL];\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar _exportNames = {\n  react: true,\n  assertNode: true,\n  createTypeAnnotationBasedOnTypeof: true,\n  createUnionTypeAnnotation: true,\n  createFlowUnionType: true,\n  createTSUnionType: true,\n  cloneNode: true,\n  clone: true,\n  cloneDeep: true,\n  cloneDeepWithoutLoc: true,\n  cloneWithoutLoc: true,\n  addComment: true,\n  addComments: true,\n  inheritInnerComments: true,\n  inheritLeadingComments: true,\n  inheritsComments: true,\n  inheritTrailingComments: true,\n  removeComments: true,\n  ensureBlock: true,\n  toBindingIdentifierName: true,\n  toBlock: true,\n  toComputedKey: true,\n  toExpression: true,\n  toIdentifier: true,\n  toKeyAlias: true,\n  toSequenceExpression: true,\n  toStatement: true,\n  valueToNode: true,\n  appendToMemberExpression: true,\n  inherits: true,\n  prependToMemberExpression: true,\n  removeProperties: true,\n  removePropertiesDeep: true,\n  removeTypeDuplicates: true,\n  getBindingIdentifiers: true,\n  getOuterBindingIdentifiers: true,\n  traverse: true,\n  traverseFast: true,\n  shallowEqual: true,\n  is: true,\n  isBinding: true,\n  isBlockScoped: true,\n  isImmutable: true,\n  isLet: true,\n  isNode: true,\n  isNodesEquivalent: true,\n  isPlaceholderType: true,\n  isReferenced: true,\n  isScope: true,\n  isSpecifierDefault: true,\n  isType: true,\n  isValidES3Identifier: true,\n  isValidIdentifier: true,\n  isVar: true,\n  matchesPattern: true,\n  validate: true,\n  buildMatchMemberExpression: true\n};\nObject.defineProperty(exports, \"assertNode\", {\n  enumerable: true,\n  get: function () {\n    return _assertNode.default;\n  }\n});\nObject.defineProperty(exports, \"createTypeAnnotationBasedOnTypeof\", {\n  enumerable: true,\n  get: function () {\n    return _createTypeAnnotationBasedOnTypeof.default;\n  }\n});\nObject.defineProperty(exports, \"createUnionTypeAnnotation\", {\n  enumerable: true,\n  get: function () {\n    return _createFlowUnionType.default;\n  }\n});\nObject.defineProperty(exports, \"createFlowUnionType\", {\n  enumerable: true,\n  get: function () {\n    return _createFlowUnionType.default;\n  }\n});\nObject.defineProperty(exports, \"createTSUnionType\", {\n  enumerable: true,\n  get: function () {\n    return _createTSUnionType.default;\n  }\n});\nObject.defineProperty(exports, \"cloneNode\", {\n  enumerable: true,\n  get: function () {\n    return _cloneNode.default;\n  }\n});\nObject.defineProperty(exports, \"clone\", {\n  enumerable: true,\n  get: function () {\n    return _clone.default;\n  }\n});\nObject.defineProperty(exports, \"cloneDeep\", {\n  enumerable: true,\n  get: function () {\n    return _cloneDeep.default;\n  }\n});\nObject.defineProperty(exports, \"cloneDeepWithoutLoc\", {\n  enumerable: true,\n  get: function () {\n    return _cloneDeepWithoutLoc.default;\n  }\n});\nObject.defineProperty(exports, \"cloneWithoutLoc\", {\n  enumerable: true,\n  get: function () {\n    return _cloneWithoutLoc.default;\n  }\n});\nObject.defineProperty(exports, \"addComment\", {\n  enumerable: true,\n  get: function () {\n    return _addComment.default;\n  }\n});\nObject.defineProperty(exports, \"addComments\", {\n  enumerable: true,\n  get: function () {\n    return _addComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritInnerComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritInnerComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritLeadingComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritLeadingComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritsComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritsComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritTrailingComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritTrailingComments.default;\n  }\n});\nObject.defineProperty(exports, \"removeComments\", {\n  enumerable: true,\n  get: function () {\n    return _removeComments.default;\n  }\n});\nObject.defineProperty(exports, \"ensureBlock\", {\n  enumerable: true,\n  get: function () {\n    return _ensureBlock.default;\n  }\n});\nObject.defineProperty(exports, \"toBindingIdentifierName\", {\n  enumerable: true,\n  get: function () {\n    return _toBindingIdentifierName.default;\n  }\n});\nObject.defineProperty(exports, \"toBlock\", {\n  enumerable: true,\n  get: function () {\n    return _toBlock.default;\n  }\n});\nObject.defineProperty(exports, \"toComputedKey\", {\n  enumerable: true,\n  get: function () {\n    return _toComputedKey.default;\n  }\n});\nObject.defineProperty(exports, \"toExpression\", {\n  enumerable: true,\n  get: function () {\n    return _toExpression.default;\n  }\n});\nObject.defineProperty(exports, \"toIdentifier\", {\n  enumerable: true,\n  get: function () {\n    return _toIdentifier.default;\n  }\n});\nObject.defineProperty(exports, \"toKeyAlias\", {\n  enumerable: true,\n  get: function () {\n    return _toKeyAlias.default;\n  }\n});\nObject.defineProperty(exports, \"toSequenceExpression\", {\n  enumerable: true,\n  get: function () {\n    return _toSequenceExpression.default;\n  }\n});\nObject.defineProperty(exports, \"toStatement\", {\n  enumerable: true,\n  get: function () {\n    return _toStatement.default;\n  }\n});\nObject.defineProperty(exports, \"valueToNode\", {\n  enumerable: true,\n  get: function () {\n    return _valueToNode.default;\n  }\n});\nObject.defineProperty(exports, \"appendToMemberExpression\", {\n  enumerable: true,\n  get: function () {\n    return _appendToMemberExpression.default;\n  }\n});\nObject.defineProperty(exports, \"inherits\", {\n  enumerable: true,\n  get: function () {\n    return _inherits.default;\n  }\n});\nObject.defineProperty(exports, \"prependToMemberExpression\", {\n  enumerable: true,\n  get: function () {\n    return _prependToMemberExpression.default;\n  }\n});\nObject.defineProperty(exports, \"removeProperties\", {\n  enumerable: true,\n  get: function () {\n    return _removeProperties.default;\n  }\n});\nObject.defineProperty(exports, \"removePropertiesDeep\", {\n  enumerable: true,\n  get: function () {\n    return _removePropertiesDeep.default;\n  }\n});\nObject.defineProperty(exports, \"removeTypeDuplicates\", {\n  enumerable: true,\n  get: function () {\n    return _removeTypeDuplicates.default;\n  }\n});\nObject.defineProperty(exports, \"getBindingIdentifiers\", {\n  enumerable: true,\n  get: function () {\n    return _getBindingIdentifiers.default;\n  }\n});\nObject.defineProperty(exports, \"getOuterBindingIdentifiers\", {\n  enumerable: true,\n  get: function () {\n    return _getOuterBindingIdentifiers.default;\n  }\n});\nObject.defineProperty(exports, \"traverse\", {\n  enumerable: true,\n  get: function () {\n    return _traverse.default;\n  }\n});\nObject.defineProperty(exports, \"traverseFast\", {\n  enumerable: true,\n  get: function () {\n    return _traverseFast.default;\n  }\n});\nObject.defineProperty(exports, \"shallowEqual\", {\n  enumerable: true,\n  get: function () {\n    return _shallowEqual.default;\n  }\n});\nObject.defineProperty(exports, \"is\", {\n  enumerable: true,\n  get: function () {\n    return _is.default;\n  }\n});\nObject.defineProperty(exports, \"isBinding\", {\n  enumerable: true,\n  get: function () {\n    return _isBinding.default;\n  }\n});\nObject.defineProperty(exports, \"isBlockScoped\", {\n  enumerable: true,\n  get: function () {\n    return _isBlockScoped.default;\n  }\n});\nObject.defineProperty(exports, \"isImmutable\", {\n  enumerable: true,\n  get: function () {\n    return _isImmutable.default;\n  }\n});\nObject.defineProperty(exports, \"isLet\", {\n  enumerable: true,\n  get: function () {\n    return _isLet.default;\n  }\n});\nObject.defineProperty(exports, \"isNode\", {\n  enumerable: true,\n  get: function () {\n    return _isNode.default;\n  }\n});\nObject.defineProperty(exports, \"isNodesEquivalent\", {\n  enumerable: true,\n  get: function () {\n    return _isNodesEquivalent.default;\n  }\n});\nObject.defineProperty(exports, \"isPlaceholderType\", {\n  enumerable: true,\n  get: function () {\n    return _isPlaceholderType.default;\n  }\n});\nObject.defineProperty(exports, \"isReferenced\", {\n  enumerable: true,\n  get: function () {\n    return _isReferenced.default;\n  }\n});\nObject.defineProperty(exports, \"isScope\", {\n  enumerable: true,\n  get: function () {\n    return _isScope.default;\n  }\n});\nObject.defineProperty(exports, \"isSpecifierDefault\", {\n  enumerable: true,\n  get: function () {\n    return _isSpecifierDefault.default;\n  }\n});\nObject.defineProperty(exports, \"isType\", {\n  enumerable: true,\n  get: function () {\n    return _isType.default;\n  }\n});\nObject.defineProperty(exports, \"isValidES3Identifier\", {\n  enumerable: true,\n  get: function () {\n    return _isValidES3Identifier.default;\n  }\n});\nObject.defineProperty(exports, \"isValidIdentifier\", {\n  enumerable: true,\n  get: function () {\n    return _isValidIdentifier.default;\n  }\n});\nObject.defineProperty(exports, \"isVar\", {\n  enumerable: true,\n  get: function () {\n    return _isVar.default;\n  }\n});\nObject.defineProperty(exports, \"matchesPattern\", {\n  enumerable: true,\n  get: function () {\n    return _matchesPattern.default;\n  }\n});\nObject.defineProperty(exports, \"validate\", {\n  enumerable: true,\n  get: function () {\n    return _validate.default;\n  }\n});\nObject.defineProperty(exports, \"buildMatchMemberExpression\", {\n  enumerable: true,\n  get: function () {\n    return _buildMatchMemberExpression.default;\n  }\n});\nexports.react = void 0;\n\nvar _isReactComponent = _interopRequireDefault(require(\"./validators/react/isReactComponent\"));\n\nvar _isCompatTag = _interopRequireDefault(require(\"./validators/react/isCompatTag\"));\n\nvar _buildChildren = _interopRequireDefault(require(\"./builders/react/buildChildren\"));\n\nvar _assertNode = _interopRequireDefault(require(\"./asserts/assertNode\"));\n\nvar _generated = require(\"./asserts/generated\");\n\nObject.keys(_generated).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated[key];\n    }\n  });\n});\n\nvar _createTypeAnnotationBasedOnTypeof = _interopRequireDefault(require(\"./builders/flow/createTypeAnnotationBasedOnTypeof\"));\n\nvar _createFlowUnionType = _interopRequireDefault(require(\"./builders/flow/createFlowUnionType\"));\n\nvar _createTSUnionType = _interopRequireDefault(require(\"./builders/typescript/createTSUnionType\"));\n\nvar _generated2 = require(\"./builders/generated\");\n\nObject.keys(_generated2).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated2[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated2[key];\n    }\n  });\n});\n\nvar _cloneNode = _interopRequireDefault(require(\"./clone/cloneNode\"));\n\nvar _clone = _interopRequireDefault(require(\"./clone/clone\"));\n\nvar _cloneDeep = _interopRequireDefault(require(\"./clone/cloneDeep\"));\n\nvar _cloneDeepWithoutLoc = _interopRequireDefault(require(\"./clone/cloneDeepWithoutLoc\"));\n\nvar _cloneWithoutLoc = _interopRequireDefault(require(\"./clone/cloneWithoutLoc\"));\n\nvar _addComment = _interopRequireDefault(require(\"./comments/addComment\"));\n\nvar _addComments = _interopRequireDefault(require(\"./comments/addComments\"));\n\nvar _inheritInnerComments = _interopRequireDefault(require(\"./comments/inheritInnerComments\"));\n\nvar _inheritLeadingComments = _interopRequireDefault(require(\"./comments/inheritLeadingComments\"));\n\nvar _inheritsComments = _interopRequireDefault(require(\"./comments/inheritsComments\"));\n\nvar _inheritTrailingComments = _interopRequireDefault(require(\"./comments/inheritTrailingComments\"));\n\nvar _removeComments = _interopRequireDefault(require(\"./comments/removeComments\"));\n\nvar _generated3 = require(\"./constants/generated\");\n\nObject.keys(_generated3).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated3[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated3[key];\n    }\n  });\n});\n\nvar _constants = require(\"./constants\");\n\nObject.keys(_constants).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _constants[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _constants[key];\n    }\n  });\n});\n\nvar _ensureBlock = _interopRequireDefault(require(\"./converters/ensureBlock\"));\n\nvar _toBindingIdentifierName = _interopRequireDefault(require(\"./converters/toBindingIdentifierName\"));\n\nvar _toBlock = _interopRequireDefault(require(\"./converters/toBlock\"));\n\nvar _toComputedKey = _interopRequireDefault(require(\"./converters/toComputedKey\"));\n\nvar _toExpression = _interopRequireDefault(require(\"./converters/toExpression\"));\n\nvar _toIdentifier = _interopRequireDefault(require(\"./converters/toIdentifier\"));\n\nvar _toKeyAlias = _interopRequireDefault(require(\"./converters/toKeyAlias\"));\n\nvar _toSequenceExpression = _interopRequireDefault(require(\"./converters/toSequenceExpression\"));\n\nvar _toStatement = _interopRequireDefault(require(\"./converters/toStatement\"));\n\nvar _valueToNode = _interopRequireDefault(require(\"./converters/valueToNode\"));\n\nvar _definitions = require(\"./definitions\");\n\nObject.keys(_definitions).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _definitions[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _definitions[key];\n    }\n  });\n});\n\nvar _appendToMemberExpression = _interopRequireDefault(require(\"./modifications/appendToMemberExpression\"));\n\nvar _inherits = _interopRequireDefault(require(\"./modifications/inherits\"));\n\nvar _prependToMemberExpression = _interopRequireDefault(require(\"./modifications/prependToMemberExpression\"));\n\nvar _removeProperties = _interopRequireDefault(require(\"./modifications/removeProperties\"));\n\nvar _removePropertiesDeep = _interopRequireDefault(require(\"./modifications/removePropertiesDeep\"));\n\nvar _removeTypeDuplicates = _interopRequireDefault(require(\"./modifications/flow/removeTypeDuplicates\"));\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"./retrievers/getBindingIdentifiers\"));\n\nvar _getOuterBindingIdentifiers = _interopRequireDefault(require(\"./retrievers/getOuterBindingIdentifiers\"));\n\nvar _traverse = _interopRequireDefault(require(\"./traverse/traverse\"));\n\nvar _traverseFast = _interopRequireDefault(require(\"./traverse/traverseFast\"));\n\nvar _shallowEqual = _interopRequireDefault(require(\"./utils/shallowEqual\"));\n\nvar _is = _interopRequireDefault(require(\"./validators/is\"));\n\nvar _isBinding = _interopRequireDefault(require(\"./validators/isBinding\"));\n\nvar _isBlockScoped = _interopRequireDefault(require(\"./validators/isBlockScoped\"));\n\nvar _isImmutable = _interopRequireDefault(require(\"./validators/isImmutable\"));\n\nvar _isLet = _interopRequireDefault(require(\"./validators/isLet\"));\n\nvar _isNode = _interopRequireDefault(require(\"./validators/isNode\"));\n\nvar _isNodesEquivalent = _interopRequireDefault(require(\"./validators/isNodesEquivalent\"));\n\nvar _isPlaceholderType = _interopRequireDefault(require(\"./validators/isPlaceholderType\"));\n\nvar _isReferenced = _interopRequireDefault(require(\"./validators/isReferenced\"));\n\nvar _isScope = _interopRequireDefault(require(\"./validators/isScope\"));\n\nvar _isSpecifierDefault = _interopRequireDefault(require(\"./validators/isSpecifierDefault\"));\n\nvar _isType = _interopRequireDefault(require(\"./validators/isType\"));\n\nvar _isValidES3Identifier = _interopRequireDefault(require(\"./validators/isValidES3Identifier\"));\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"./validators/isValidIdentifier\"));\n\nvar _isVar = _interopRequireDefault(require(\"./validators/isVar\"));\n\nvar _matchesPattern = _interopRequireDefault(require(\"./validators/matchesPattern\"));\n\nvar _validate = _interopRequireDefault(require(\"./validators/validate\"));\n\nvar _buildMatchMemberExpression = _interopRequireDefault(require(\"./validators/buildMatchMemberExpression\"));\n\nvar _generated4 = require(\"./validators/generated\");\n\nObject.keys(_generated4).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated4[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated4[key];\n    }\n  });\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst react = {\n  isReactComponent: _isReactComponent.default,\n  isCompatTag: _isCompatTag.default,\n  buildChildren: _buildChildren.default\n};\nexports.react = react;", "var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __markAsModule = (target) => __defProp(target, \"__esModule\", { value: true });\nvar __require = typeof require !== \"undefined\" ? require : (x) => {\n  throw new Error('Dynamic require of \"' + x + '\" is not supported');\n};\nvar __commonJS = (cb, mod) => function __require2() {\n  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n  __markAsModule(target);\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __reExport = (target, module2, desc) => {\n  if (module2 && typeof module2 === \"object\" || typeof module2 === \"function\") {\n    for (let key of __getOwnPropNames(module2))\n      if (!__hasOwnProp.call(target, key) && key !== \"default\")\n        __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });\n  }\n  return target;\n};\nvar __toModule = (module2) => {\n  return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, \"default\", module2 && module2.__esModule && \"default\" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);\n};\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\n\n// node_modules/js-message/Message.js\nvar require_Message = __commonJS({\n  \"node_modules/js-message/Message.js\"(exports, module2) {\n    function Message3() {\n      Object.defineProperties(this, {\n        data: {\n          enumerable: true,\n          get: getData,\n          set: setData\n        },\n        type: {\n          enumerable: true,\n          get: getType,\n          set: setType\n        },\n        load: {\n          enumerable: true,\n          writable: false,\n          value: parse\n        },\n        JSON: {\n          enumerable: true,\n          get: getJSON\n        }\n      });\n      var type = \"\";\n      var data = {};\n      function getType() {\n        return type;\n      }\n      function getData() {\n        return data;\n      }\n      function getJSON() {\n        return JSON.stringify({\n          type,\n          data\n        });\n      }\n      function setType(value) {\n        type = value;\n      }\n      function setData(value) {\n        data = value;\n      }\n      function parse(message) {\n        try {\n          var message = JSON.parse(message);\n          type = message.type;\n          data = message.data;\n        } catch (err) {\n          var badMessage = message;\n          type = \"error\", data = {\n            message: \"Invalid JSON response format\",\n            err,\n            response: badMessage\n          };\n        }\n      }\n    }\n    module2.exports = Message3;\n  }\n});\n\n// node_modules/js-queue/queue.js\nvar require_queue = __commonJS({\n  \"node_modules/js-queue/queue.js\"(exports, module2) {\n    function Queue2(asStack) {\n      Object.defineProperties(this, {\n        add: {\n          enumerable: true,\n          writable: false,\n          value: addToQueue\n        },\n        next: {\n          enumerable: true,\n          writable: false,\n          value: run\n        },\n        clear: {\n          enumerable: true,\n          writable: false,\n          value: clearQueue\n        },\n        contents: {\n          enumerable: false,\n          get: getQueue,\n          set: setQueue\n        },\n        autoRun: {\n          enumerable: true,\n          writable: true,\n          value: true\n        },\n        stop: {\n          enumerable: true,\n          writable: true,\n          value: false\n        }\n      });\n      var queue = [];\n      var running = false;\n      var stop = false;\n      function clearQueue() {\n        queue = [];\n        return queue;\n      }\n      function getQueue() {\n        return queue;\n      }\n      function setQueue(val) {\n        queue = val;\n        return queue;\n      }\n      function addToQueue() {\n        for (var i in arguments) {\n          queue.push(arguments[i]);\n        }\n        if (!running && !this.stop && this.autoRun) {\n          this.next();\n        }\n      }\n      function run() {\n        running = true;\n        if (queue.length < 1 || this.stop) {\n          running = false;\n          return;\n        }\n        queue.shift().bind(this)();\n      }\n    }\n    module2.exports = Queue2;\n  }\n});\n\n// node-ipc.js\n__export(exports, {\n  IPCModule: () => IPCModule,\n  default: () => singleton\n});\n\n// entities/Defaults.js\nvar import_os = __toModule(require(\"os\"));\nvar Defaults = class {\n  constructor() {\n    __publicField(this, \"appspace\", \"app.\");\n    __publicField(this, \"socketRoot\", \"/tmp/\");\n    __publicField(this, \"id\", import_os.default.hostname());\n    __publicField(this, \"encoding\", \"utf8\");\n    __publicField(this, \"rawBuffer\", false);\n    __publicField(this, \"sync\", false);\n    __publicField(this, \"unlink\", true);\n    __publicField(this, \"delimiter\", \"\\f\");\n    __publicField(this, \"silent\", false);\n    __publicField(this, \"logDepth\", 5);\n    __publicField(this, \"logInColor\", true);\n    __publicField(this, \"logger\", console.log.bind(console));\n    __publicField(this, \"maxConnections\", 100);\n    __publicField(this, \"retry\", 500);\n    __publicField(this, \"maxRetries\", Infinity);\n    __publicField(this, \"stopRetrying\", false);\n    __publicField(this, \"IPType\", getIPType());\n    __publicField(this, \"tls\", false);\n    __publicField(this, \"networkHost\", this.IPType == \"IPv6\" ? \"::1\" : \"127.0.0.1\");\n    __publicField(this, \"networkPort\", 8e3);\n    __publicField(this, \"readableAll\", false);\n    __publicField(this, \"writableAll\", false);\n    __publicField(this, \"interface\", {\n      localAddress: false,\n      localPort: false,\n      family: false,\n      hints: false,\n      lookup: false\n    });\n  }\n};\nfunction getIPType() {\n  const networkInterfaces = import_os.default.networkInterfaces();\n  let IPType = \"\";\n  if (networkInterfaces && Array.isArray(networkInterfaces) && networkInterfaces.length > 0) {\n    IPType = networkInterfaces[Object.keys(networkInterfaces)[0]][0].family;\n  }\n  return IPType;\n}\n\n// dao/client.js\nvar import_net = __toModule(require(\"net\"));\nvar import_tls = __toModule(require(\"tls\"));\n\n// entities/EventParser.js\nvar Parser = class {\n  constructor(config) {\n    if (!config) {\n      config = new Defaults();\n    }\n    this.delimiter = config.delimiter;\n  }\n  format(message) {\n    if (!message.data && message.data !== false && message.data !== 0) {\n      message.data = {};\n    }\n    if (message.data[\"_maxListeners\"]) {\n      message.data = {};\n    }\n    message = message.JSON + this.delimiter;\n    return message;\n  }\n  parse(data) {\n    let events = data.split(this.delimiter);\n    events.pop();\n    return events;\n  }\n};\n\n// dao/client.js\nvar import_js_message = __toModule(require_Message());\nvar import_fs = __toModule(require(\"fs\"));\nvar import_js_queue = __toModule(require_queue());\n\n// node_modules/strong-type/index.js\nvar Fake = class {\n};\nvar FakeCore = class {\n};\nvar Is = class {\n  constructor(strict = true) {\n    this.strict = strict;\n  }\n  throw(valueType, expectedType) {\n    let err = new TypeError();\n    err.message = `expected type of ${valueType} to be ${expectedType}`;\n    if (!this.strict) {\n      return false;\n    }\n    throw err;\n  }\n  typeCheck(value, type) {\n    if (typeof value === type) {\n      return true;\n    }\n    return this.throw(typeof value, type);\n  }\n  instanceCheck(value = new Fake(), constructor = FakeCore) {\n    if (value instanceof constructor) {\n      return true;\n    }\n    return this.throw(typeof value, constructor.name);\n  }\n  symbolStringCheck(value, type) {\n    if (Object.prototype.toString.call(value) == `[object ${type}]`) {\n      return true;\n    }\n    return this.throw(Object.prototype.toString.call(value), `[object ${type}]`);\n  }\n  compare(value, targetValue, typeName) {\n    if (value == targetValue) {\n      return true;\n    }\n    return this.throw(typeof value, typeName);\n  }\n  defined(value) {\n    const weakIs = new Is(false);\n    if (weakIs.undefined(value)) {\n      return this.throw(\"undefined\", \"defined\");\n    }\n    return true;\n  }\n  any(value) {\n    return this.defined(value);\n  }\n  exists(value) {\n    return this.defined(value);\n  }\n  union(value, typesString) {\n    const types = typesString.split(\"|\");\n    const weakIs = new Is(false);\n    let pass = false;\n    let type = \"undefined\";\n    for (type of types) {\n      try {\n        if (weakIs[type](value)) {\n          pass = true;\n          break;\n        }\n      } catch (err) {\n        return this.throw(type, \"a method available on strong-type\");\n      }\n    }\n    if (pass) {\n      return this[type](value);\n    }\n    return this.throw(typeof value, types.join(\"|\"));\n  }\n  finite(value) {\n    if (isFinite(value)) {\n      return true;\n    }\n    return this.throw(typeof value, \"finite\");\n  }\n  NaN(value) {\n    if (!this.number(value)) {\n      return this.number(value);\n    }\n    if (isNaN(value)) {\n      return true;\n    }\n    return this.throw(typeof value, \"NaN\");\n  }\n  null(value) {\n    return this.compare(value, null, \"null\");\n  }\n  array(value) {\n    return this.instanceCheck(value, Array);\n  }\n  boolean(value) {\n    return this.typeCheck(value, \"boolean\");\n  }\n  bigInt(value) {\n    return this.typeCheck(value, \"bigint\");\n  }\n  date(value) {\n    return this.instanceCheck(value, Date);\n  }\n  generator(value) {\n    return this.symbolStringCheck(value, \"Generator\");\n  }\n  asyncGenerator(value) {\n    return this.symbolStringCheck(value, \"AsyncGenerator\");\n  }\n  globalThis(value) {\n    return this.compare(value, globalThis, \"explicitly globalThis, not window, global nor self\");\n  }\n  infinity(value) {\n    return this.compare(value, Infinity, \"Infinity\");\n  }\n  map(value) {\n    return this.instanceCheck(value, Map);\n  }\n  weakMap(value) {\n    return this.instanceCheck(value, WeakMap);\n  }\n  number(value) {\n    return this.typeCheck(value, \"number\");\n  }\n  object(value) {\n    return this.typeCheck(value, \"object\");\n  }\n  promise(value) {\n    return this.instanceCheck(value, Promise);\n  }\n  regExp(value) {\n    return this.instanceCheck(value, RegExp);\n  }\n  undefined(value) {\n    return this.typeCheck(value, \"undefined\");\n  }\n  set(value) {\n    return this.instanceCheck(value, Set);\n  }\n  weakSet(value) {\n    return this.instanceCheck(value, WeakSet);\n  }\n  string(value) {\n    return this.typeCheck(value, \"string\");\n  }\n  symbol(value) {\n    return this.typeCheck(value, \"symbol\");\n  }\n  function(value) {\n    return this.typeCheck(value, \"function\");\n  }\n  asyncFunction(value) {\n    return this.symbolStringCheck(value, \"AsyncFunction\");\n  }\n  generatorFunction(value) {\n    return this.symbolStringCheck(value, \"GeneratorFunction\");\n  }\n  asyncGeneratorFunction(value) {\n    return this.symbolStringCheck(value, \"AsyncGeneratorFunction\");\n  }\n  error(value) {\n    return this.instanceCheck(value, Error);\n  }\n  evalError(value) {\n    return this.instanceCheck(value, EvalError);\n  }\n  rangeError(value) {\n    return this.instanceCheck(value, RangeError);\n  }\n  referenceError(value) {\n    return this.instanceCheck(value, ReferenceError);\n  }\n  syntaxError(value) {\n    return this.instanceCheck(value, SyntaxError);\n  }\n  typeError(value) {\n    return this.instanceCheck(value, TypeError);\n  }\n  URIError(value) {\n    return this.instanceCheck(value, URIError);\n  }\n  bigInt64Array(value) {\n    return this.instanceCheck(value, BigInt64Array);\n  }\n  bigUint64Array(value) {\n    return this.instanceCheck(value, BigUint64Array);\n  }\n  float32Array(value) {\n    return this.instanceCheck(value, Float32Array);\n  }\n  float64Array(value) {\n    return this.instanceCheck(value, Float64Array);\n  }\n  int8Array(value) {\n    return this.instanceCheck(value, Int8Array);\n  }\n  int16Array(value) {\n    return this.instanceCheck(value, Int16Array);\n  }\n  int32Array(value) {\n    return this.instanceCheck(value, Int32Array);\n  }\n  uint8Array(value) {\n    return this.instanceCheck(value, Uint8Array);\n  }\n  uint8ClampedArray(value) {\n    return this.instanceCheck(value, Uint8ClampedArray);\n  }\n  uint16Array(value) {\n    return this.instanceCheck(value, Uint16Array);\n  }\n  uint32Array(value) {\n    return this.instanceCheck(value, Uint32Array);\n  }\n  arrayBuffer(value) {\n    return this.instanceCheck(value, ArrayBuffer);\n  }\n  dataView(value) {\n    return this.instanceCheck(value, DataView);\n  }\n  sharedArrayBuffer(value) {\n    return this.instanceCheck(value, function() {\n      try {\n        return SharedArrayBuffer;\n      } catch (e) {\n        return Fake;\n      }\n    }());\n  }\n  intlDateTimeFormat(value) {\n    return this.instanceCheck(value, Intl.DateTimeFormat);\n  }\n  intlCollator(value) {\n    return this.instanceCheck(value, Intl.Collator);\n  }\n  intlDisplayNames(value) {\n    return this.instanceCheck(value, Intl.DisplayNames);\n  }\n  intlListFormat(value) {\n    return this.instanceCheck(value, Intl.ListFormat);\n  }\n  intlLocale(value) {\n    return this.instanceCheck(value, Intl.Locale);\n  }\n  intlNumberFormat(value) {\n    return this.instanceCheck(value, Intl.NumberFormat);\n  }\n  intlPluralRules(value) {\n    return this.instanceCheck(value, Intl.PluralRules);\n  }\n  intlRelativeTimeFormat(value) {\n    return this.instanceCheck(value, Intl.RelativeTimeFormat);\n  }\n  intlRelativeTimeFormat(value) {\n    return this.instanceCheck(value, Intl.RelativeTimeFormat);\n  }\n  finalizationRegistry(value) {\n    return this.instanceCheck(value, FinalizationRegistry);\n  }\n  weakRef(value) {\n    return this.instanceCheck(value, WeakRef);\n  }\n};\n\n// node_modules/event-pubsub/index.js\nvar is = new Is();\nvar _handleOnce, _all, _once, _events;\nvar EventPubSub = class {\n  constructor() {\n    __privateAdd(this, _handleOnce, (type, handlers, ...args) => {\n      is.string(type);\n      is.array(handlers);\n      const deleteOnceHandled = [];\n      for (let handler of handlers) {\n        handler(...args);\n        if (handler[__privateGet(this, _once)]) {\n          deleteOnceHandled.push(handler);\n        }\n      }\n      for (let handler of deleteOnceHandled) {\n        this.off(type, handler);\n      }\n    });\n    __privateAdd(this, _all, Symbol.for(\"event-pubsub-all\"));\n    __privateAdd(this, _once, Symbol.for(\"event-pubsub-once\"));\n    __privateAdd(this, _events, {});\n  }\n  on(type, handler, once = false) {\n    is.string(type);\n    is.function(handler);\n    is.boolean(once);\n    if (type == \"*\") {\n      type = __privateGet(this, _all);\n    }\n    if (!__privateGet(this, _events)[type]) {\n      __privateGet(this, _events)[type] = [];\n    }\n    handler[__privateGet(this, _once)] = once;\n    __privateGet(this, _events)[type].push(handler);\n    return this;\n  }\n  once(type, handler) {\n    return this.on(type, handler, true);\n  }\n  off(type = \"*\", handler = \"*\") {\n    is.string(type);\n    if (type == __privateGet(this, _all).toString() || type == \"*\") {\n      type = __privateGet(this, _all);\n    }\n    if (!__privateGet(this, _events)[type]) {\n      return this;\n    }\n    if (handler == \"*\") {\n      delete __privateGet(this, _events)[type];\n      return this;\n    }\n    is.function(handler);\n    const handlers = __privateGet(this, _events)[type];\n    while (handlers.includes(handler)) {\n      handlers.splice(handlers.indexOf(handler), 1);\n    }\n    if (handlers.length < 1) {\n      delete __privateGet(this, _events)[type];\n    }\n    return this;\n  }\n  emit(type, ...args) {\n    is.string(type);\n    const globalHandlers = __privateGet(this, _events)[__privateGet(this, _all)] || [];\n    __privateGet(this, _handleOnce).call(this, __privateGet(this, _all).toString(), globalHandlers, type, ...args);\n    if (!__privateGet(this, _events)[type]) {\n      return this;\n    }\n    const handlers = __privateGet(this, _events)[type];\n    __privateGet(this, _handleOnce).call(this, type, handlers, ...args);\n    return this;\n  }\n  reset() {\n    this.off(__privateGet(this, _all).toString());\n    for (let type in __privateGet(this, _events)) {\n      this.off(type);\n    }\n    return this;\n  }\n  get list() {\n    return Object.assign({}, __privateGet(this, _events));\n  }\n};\n_handleOnce = new WeakMap();\n_all = new WeakMap();\n_once = new WeakMap();\n_events = new WeakMap();\n\n// dao/client.js\nvar eventParser = new Parser();\nvar Client = class extends EventPubSub {\n  constructor(config, log2) {\n    super();\n    __publicField(this, \"Client\", Client);\n    __publicField(this, \"queue\", new import_js_queue.default());\n    __publicField(this, \"socket\", false);\n    __publicField(this, \"connect\", connect);\n    __publicField(this, \"emit\", emit);\n    __publicField(this, \"retriesRemaining\", 0);\n    __publicField(this, \"explicitlyDisconnected\", false);\n    this.config = config;\n    this.log = log2;\n    this.publish = super.emit;\n    config.maxRetries ? this.retriesRemaining = config.maxRetries : 0;\n    eventParser = new Parser(this.config);\n  }\n};\nfunction emit(type, data) {\n  this.log(\"dispatching event to \", this.id, this.path, \" : \", type, \",\", data);\n  let message = new import_js_message.default();\n  message.type = type;\n  message.data = data;\n  if (this.config.rawBuffer) {\n    message = Buffer.from(type, this.config.encoding);\n  } else {\n    message = eventParser.format(message);\n  }\n  if (!this.config.sync) {\n    this.socket.write(message);\n    return;\n  }\n  this.queue.add(syncEmit.bind(this, message));\n}\nfunction syncEmit(message) {\n  this.log(\"dispatching event to \", this.id, this.path, \" : \", message);\n  this.socket.write(message);\n}\nfunction connect() {\n  let client = this;\n  client.log(\"requested connection to \", client.id, client.path);\n  if (!this.path) {\n    client.log(\"\\n\\n######\\nerror: \", client.id, \" client has not specified socket path it wishes to connect to.\");\n    return;\n  }\n  const options = {};\n  if (!client.port) {\n    client.log(\"Connecting client on Unix Socket :\", client.path);\n    options.path = client.path;\n    if (process.platform === \"win32\" && !client.path.startsWith(\"\\\\\\\\.\\\\pipe\\\\\")) {\n      options.path = options.path.replace(/^\\//, \"\");\n      options.path = options.path.replace(/\\//g, \"-\");\n      options.path = `\\\\\\\\.\\\\pipe\\\\${options.path}`;\n    }\n    client.socket = import_net.default.connect(options);\n  } else {\n    options.host = client.path;\n    options.port = client.port;\n    if (client.config.interface.localAddress) {\n      options.localAddress = client.config.interface.localAddress;\n    }\n    if (client.config.interface.localPort) {\n      options.localPort = client.config.interface.localPort;\n    }\n    if (client.config.interface.family) {\n      options.family = client.config.interface.family;\n    }\n    if (client.config.interface.hints) {\n      options.hints = client.config.interface.hints;\n    }\n    if (client.config.interface.lookup) {\n      options.lookup = client.config.interface.lookup;\n    }\n    if (!client.config.tls) {\n      client.log(\"Connecting client via TCP to\", options);\n      client.socket = import_net.default.connect(options);\n    } else {\n      client.log(\"Connecting client via TLS to\", client.path, client.port, client.config.tls);\n      if (client.config.tls.private) {\n        client.config.tls.key = import_fs.default.readFileSync(client.config.tls.private);\n      }\n      if (client.config.tls.public) {\n        client.config.tls.cert = import_fs.default.readFileSync(client.config.tls.public);\n      }\n      if (client.config.tls.trustedConnections) {\n        if (typeof client.config.tls.trustedConnections === \"string\") {\n          client.config.tls.trustedConnections = [client.config.tls.trustedConnections];\n        }\n        client.config.tls.ca = [];\n        for (let i = 0; i < client.config.tls.trustedConnections.length; i++) {\n          client.config.tls.ca.push(import_fs.default.readFileSync(client.config.tls.trustedConnections[i]));\n        }\n      }\n      Object.assign(client.config.tls, options);\n      client.socket = import_tls.default.connect(client.config.tls);\n    }\n  }\n  client.socket.setEncoding(this.config.encoding);\n  client.socket.on(\"error\", function(err) {\n    client.log(\"\\n\\n######\\nerror: \", err);\n    client.publish(\"error\", err);\n  });\n  client.socket.on(\"connect\", function connectionMade() {\n    client.publish(\"connect\");\n    client.retriesRemaining = client.config.maxRetries;\n    client.log(\"retrying reset\");\n  });\n  client.socket.on(\"close\", function connectionClosed() {\n    client.log(\"connection closed\", client.id, client.path, client.retriesRemaining, \"tries remaining of\", client.config.maxRetries);\n    if (client.config.stopRetrying || client.retriesRemaining < 1 || client.explicitlyDisconnected) {\n      client.publish(\"disconnect\");\n      client.log(client.config.id, \"exceeded connection rety amount of\", \" or stopRetrying flag set.\");\n      client.socket.destroy();\n      client.publish(\"destroy\");\n      client = void 0;\n      return;\n    }\n    setTimeout(function retryTimeout() {\n      if (client.explicitlyDisconnected) {\n        return;\n      }\n      client.retriesRemaining--;\n      client.connect();\n    }.bind(null, client), client.config.retry);\n    client.publish(\"disconnect\");\n  });\n  client.socket.on(\"data\", function(data) {\n    client.log(\"## received events ##\");\n    if (client.config.rawBuffer) {\n      client.publish(\"data\", Buffer.from(data, client.config.encoding));\n      if (!client.config.sync) {\n        return;\n      }\n      client.queue.next();\n      return;\n    }\n    if (!this.ipcBuffer) {\n      this.ipcBuffer = \"\";\n    }\n    data = this.ipcBuffer += data;\n    if (data.slice(-1) != eventParser.delimiter || data.indexOf(eventParser.delimiter) == -1) {\n      client.log(\"Messages are large, You may want to consider smaller messages.\");\n      return;\n    }\n    this.ipcBuffer = \"\";\n    const events = eventParser.parse(data);\n    const eCount = events.length;\n    for (let i = 0; i < eCount; i++) {\n      let message = new import_js_message.default();\n      message.load(events[i]);\n      client.log(\"detected event\", message.type, message.data);\n      client.publish(message.type, message.data);\n    }\n    if (!client.config.sync) {\n      return;\n    }\n    client.queue.next();\n  });\n}\n\n// dao/socketServer.js\nvar import_net2 = __toModule(require(\"net\"));\nvar import_tls2 = __toModule(require(\"tls\"));\nvar import_fs2 = __toModule(require(\"fs\"));\nvar import_dgram = __toModule(require(\"dgram\"));\nvar import_js_message2 = __toModule(require_Message());\nvar eventParser2 = new Parser();\nvar Server = class extends EventPubSub {\n  constructor(path, config, log2, port) {\n    super();\n    __publicField(this, \"udp4\", false);\n    __publicField(this, \"udp6\", false);\n    __publicField(this, \"server\", false);\n    __publicField(this, \"sockets\", []);\n    __publicField(this, \"emit\", emit2);\n    __publicField(this, \"broadcast\", broadcast);\n    this.config = config;\n    this.path = path;\n    this.port = port;\n    this.log = log2;\n    this.publish = super.emit;\n    eventParser2 = new Parser(this.config);\n    this.on(\"close\", serverClosed.bind(this));\n  }\n  onStart(socket) {\n    this.publish(\"start\", socket);\n  }\n  stop() {\n    this.server.close();\n  }\n  start() {\n    if (!this.path) {\n      this.log(\"Socket Server Path not specified, refusing to start\");\n      return;\n    }\n    if (this.config.unlink) {\n      import_fs2.default.unlink(this.path, startServer.bind(this));\n    } else {\n      startServer.bind(this)();\n    }\n  }\n};\nfunction emit2(socket, type, data) {\n  this.log(\"dispatching event to socket\", \" : \", type, data);\n  let message = new import_js_message2.default();\n  message.type = type;\n  message.data = data;\n  if (this.config.rawBuffer) {\n    this.log(this.config.encoding);\n    message = Buffer.from(type, this.config.encoding);\n  } else {\n    message = eventParser2.format(message);\n  }\n  if (this.udp4 || this.udp6) {\n    if (!socket.address || !socket.port) {\n      this.log(\"Attempting to emit to a single UDP socket without supplying socket address or port. Redispatching event as broadcast to all connected sockets\");\n      this.broadcast(type, data);\n      return;\n    }\n    this.server.write(message, socket);\n    return;\n  }\n  socket.write(message);\n}\nfunction broadcast(type, data) {\n  this.log(\"broadcasting event to all known sockets listening to \", this.path, \" : \", this.port ? this.port : \"\", type, data);\n  let message = new import_js_message2.default();\n  message.type = type;\n  message.data = data;\n  if (this.config.rawBuffer) {\n    message = Buffer.from(type, this.config.encoding);\n  } else {\n    message = eventParser2.format(message);\n  }\n  if (this.udp4 || this.udp6) {\n    for (let i = 1, count = this.sockets.length; i < count; i++) {\n      this.server.write(message, this.sockets[i]);\n    }\n  } else {\n    for (let i = 0, count = this.sockets.length; i < count; i++) {\n      this.sockets[i].write(message);\n    }\n  }\n}\nfunction serverClosed() {\n  for (let i = 0, count = this.sockets.length; i < count; i++) {\n    let socket = this.sockets[i];\n    let destroyedSocketId = false;\n    if (socket) {\n      if (socket.readable) {\n        continue;\n      }\n    }\n    if (socket.id) {\n      destroyedSocketId = socket.id;\n    }\n    this.log(\"socket disconnected\", destroyedSocketId.toString());\n    if (socket && socket.destroy) {\n      socket.destroy();\n    }\n    this.sockets.splice(i, 1);\n    this.publish(\"socket.disconnected\", socket, destroyedSocketId);\n    return;\n  }\n}\nfunction gotData(socket, data, UDPSocket) {\n  let sock = this.udp4 || this.udp6 ? UDPSocket : socket;\n  if (this.config.rawBuffer) {\n    data = Buffer.from(data, this.config.encoding);\n    this.publish(\"data\", data, sock);\n    return;\n  }\n  if (!sock.ipcBuffer) {\n    sock.ipcBuffer = \"\";\n  }\n  data = sock.ipcBuffer += data;\n  if (data.slice(-1) != eventParser2.delimiter || data.indexOf(eventParser2.delimiter) == -1) {\n    this.log(\"Messages are large, You may want to consider smaller messages.\");\n    return;\n  }\n  sock.ipcBuffer = \"\";\n  data = eventParser2.parse(data);\n  while (data.length > 0) {\n    let message = new import_js_message2.default();\n    message.load(data.shift());\n    if (message.data && message.data.id) {\n      sock.id = message.data.id;\n    }\n    this.log(\"received event of : \", message.type, message.data);\n    this.publish(message.type, message.data, sock);\n  }\n}\nfunction socketClosed(socket) {\n  this.publish(\"close\", socket);\n}\nfunction serverCreated(socket) {\n  this.sockets.push(socket);\n  if (socket.setEncoding) {\n    socket.setEncoding(this.config.encoding);\n  }\n  this.log(\"## socket connection to server detected ##\");\n  socket.on(\"close\", socketClosed.bind(this));\n  socket.on(\"error\", function(err) {\n    this.log(\"server socket error\", err);\n    this.publish(\"error\", err);\n  }.bind(this));\n  socket.on(\"data\", gotData.bind(this, socket));\n  socket.on(\"message\", function(msg, rinfo) {\n    if (!rinfo) {\n      return;\n    }\n    this.log(\"Received UDP message from \", rinfo.address, rinfo.port);\n    let data;\n    if (this.config.rawSocket) {\n      data = Buffer.from(msg, this.config.encoding);\n    } else {\n      data = msg.toString();\n    }\n    socket.emit(\"data\", data, rinfo);\n  }.bind(this));\n  this.publish(\"connect\", socket);\n  if (this.config.rawBuffer) {\n    return;\n  }\n}\nfunction startServer() {\n  this.log(\"starting server on \", this.path, this.port ? `:${this.port}` : \"\");\n  if (!this.udp4 && !this.udp6) {\n    this.log(\"starting TLS server\", this.config.tls);\n    if (!this.config.tls) {\n      this.server = import_net2.default.createServer(serverCreated.bind(this));\n    } else {\n      startTLSServer.bind(this)();\n    }\n  } else {\n    this.server = import_dgram.default.createSocket(this.udp4 ? \"udp4\" : \"udp6\");\n    this.server.write = UDPWrite.bind(this);\n    this.server.on(\"listening\", function UDPServerStarted() {\n      serverCreated.bind(this)(this.server);\n    }.bind(this));\n  }\n  this.server.on(\"error\", function(err) {\n    this.log(\"server error\", err);\n    this.publish(\"error\", err);\n  }.bind(this));\n  this.server.maxConnections = this.config.maxConnections;\n  if (!this.port) {\n    this.log(\"starting server as\", \"Unix || Windows Socket\");\n    if (process.platform === \"win32\") {\n      this.path = this.path.replace(/^\\//, \"\");\n      this.path = this.path.replace(/\\//g, \"-\");\n      this.path = `\\\\\\\\.\\\\pipe\\\\${this.path}`;\n    }\n    this.server.listen({\n      path: this.path,\n      readableAll: this.config.readableAll,\n      writableAll: this.config.writableAll\n    }, this.onStart.bind(this));\n    return;\n  }\n  if (!this.udp4 && !this.udp6) {\n    this.log(\"starting server as\", this.config.tls ? \"TLS\" : \"TCP\");\n    this.server.listen(this.port, this.path, this.onStart.bind(this));\n    return;\n  }\n  this.log(\"starting server as\", this.udp4 ? \"udp4\" : \"udp6\");\n  this.server.bind(this.port, this.path);\n  this.onStart({\n    address: this.path,\n    port: this.port\n  });\n}\nfunction startTLSServer() {\n  this.log(\"starting TLS server\", this.config.tls);\n  if (this.config.tls.private) {\n    this.config.tls.key = import_fs2.default.readFileSync(this.config.tls.private);\n  } else {\n    this.config.tls.key = import_fs2.default.readFileSync(`${__dirname}/../local-node-ipc-certs/private/server.key`);\n  }\n  if (this.config.tls.public) {\n    this.config.tls.cert = import_fs2.default.readFileSync(this.config.tls.public);\n  } else {\n    this.config.tls.cert = import_fs2.default.readFileSync(`${__dirname}/../local-node-ipc-certs/server.pub`);\n  }\n  if (this.config.tls.dhparam) {\n    this.config.tls.dhparam = import_fs2.default.readFileSync(this.config.tls.dhparam);\n  }\n  if (this.config.tls.trustedConnections) {\n    if (typeof this.config.tls.trustedConnections === \"string\") {\n      this.config.tls.trustedConnections = [this.config.tls.trustedConnections];\n    }\n    this.config.tls.ca = [];\n    for (let i = 0; i < this.config.tls.trustedConnections.length; i++) {\n      this.config.tls.ca.push(import_fs2.default.readFileSync(this.config.tls.trustedConnections[i]));\n    }\n  }\n  this.server = import_tls2.default.createServer(this.config.tls, serverCreated.bind(this));\n}\nfunction UDPWrite(message, socket) {\n  let data = Buffer.from(message, this.config.encoding);\n  this.server.send(data, 0, data.length, socket.port, socket.address, function(err, bytes) {\n    if (err) {\n      this.log(\"error writing data to socket\", err);\n      this.publish(\"error\", function(err2) {\n        this.publish(\"error\", err2);\n      });\n    }\n  });\n}\n\n// services/IPC.js\nvar import_util = __toModule(require(\"util\"));\nvar IPC = class {\n  constructor() {\n    __publicField(this, \"config\", new Defaults());\n    __publicField(this, \"of\", {});\n    __publicField(this, \"server\", false);\n  }\n  get connectTo() {\n    return connect2;\n  }\n  get connectToNet() {\n    return connectNet;\n  }\n  get disconnect() {\n    return disconnect;\n  }\n  get serve() {\n    return serve;\n  }\n  get serveNet() {\n    return serveNet;\n  }\n  get log() {\n    return log;\n  }\n  set connectTo(value) {\n    return connect2;\n  }\n  set connectToNet(value) {\n    return connectNet;\n  }\n  set disconnect(value) {\n    return disconnect;\n  }\n  set serve(value) {\n    return serve;\n  }\n  set serveNet(value) {\n    return serveNet;\n  }\n  set log(value) {\n    return log;\n  }\n};\nfunction log(...args) {\n  if (this.config.silent) {\n    return;\n  }\n  for (let i = 0, count = args.length; i < count; i++) {\n    if (typeof args[i] != \"object\") {\n      continue;\n    }\n    args[i] = import_util.default.inspect(args[i], {\n      depth: this.config.logDepth,\n      colors: this.config.logInColor\n    });\n  }\n  this.config.logger(args.join(\" \"));\n}\nfunction disconnect(id) {\n  if (!this.of[id]) {\n    return;\n  }\n  this.of[id].explicitlyDisconnected = true;\n  this.of[id].off(\"*\", \"*\");\n  if (this.of[id].socket) {\n    if (this.of[id].socket.destroy) {\n      this.of[id].socket.destroy();\n    }\n  }\n  delete this.of[id];\n}\nfunction serve(path, callback) {\n  if (typeof path == \"function\") {\n    callback = path;\n    path = false;\n  }\n  if (!path) {\n    this.log(\"Server path not specified, so defaulting to\", \"ipc.config.socketRoot + ipc.config.appspace + ipc.config.id\", this.config.socketRoot + this.config.appspace + this.config.id);\n    path = this.config.socketRoot + this.config.appspace + this.config.id;\n  }\n  if (!callback) {\n    callback = emptyCallback;\n  }\n  this.server = new Server(path, this.config, log);\n  this.server.on(\"start\", callback);\n}\nfunction emptyCallback() {\n}\nfunction serveNet(host, port, UDPType2, callback) {\n  if (typeof host == \"number\") {\n    callback = UDPType2;\n    UDPType2 = port;\n    port = host;\n    host = false;\n  }\n  if (typeof host == \"function\") {\n    callback = host;\n    UDPType2 = false;\n    host = false;\n    port = false;\n  }\n  if (!host) {\n    this.log(\"Server host not specified, so defaulting to\", \"ipc.config.networkHost\", this.config.networkHost);\n    host = this.config.networkHost;\n  }\n  if (host.toLowerCase() == \"udp4\" || host.toLowerCase() == \"udp6\") {\n    callback = port;\n    UDPType2 = host.toLowerCase();\n    port = false;\n    host = this.config.networkHost;\n  }\n  if (typeof port == \"string\") {\n    callback = UDPType2;\n    UDPType2 = port;\n    port = false;\n  }\n  if (typeof port == \"function\") {\n    callback = port;\n    UDPType2 = false;\n    port = false;\n  }\n  if (!port) {\n    this.log(\"Server port not specified, so defaulting to\", \"ipc.config.networkPort\", this.config.networkPort);\n    port = this.config.networkPort;\n  }\n  if (typeof UDPType2 == \"function\") {\n    callback = UDPType2;\n    UDPType2 = false;\n  }\n  if (!callback) {\n    callback = emptyCallback;\n  }\n  this.server = new Server(host, this.config, log, port);\n  if (UDPType2) {\n    this.server[UDPType2] = true;\n    if (UDPType2 === \"udp4\" && host === \"::1\") {\n      this.server.path = \"127.0.0.1\";\n    }\n  }\n  this.server.on(\"start\", callback);\n}\nfunction connect2(id, path, callback) {\n  if (typeof path == \"function\") {\n    callback = path;\n    path = false;\n  }\n  if (!callback) {\n    callback = emptyCallback;\n  }\n  if (!id) {\n    this.log(\"Service id required\", \"Requested service connection without specifying service id. Aborting connection attempt\");\n    return;\n  }\n  if (!path) {\n    this.log(\"Service path not specified, so defaulting to\", \"ipc.config.socketRoot + ipc.config.appspace + id\", (this.config.socketRoot + this.config.appspace + id).data);\n    path = this.config.socketRoot + this.config.appspace + id;\n  }\n  if (this.of[id]) {\n    if (!this.of[id].socket.destroyed) {\n      this.log(\"Already Connected to\", id, \"- So executing success without connection\");\n      callback();\n      return;\n    }\n    this.of[id].socket.destroy();\n  }\n  this.of[id] = new Client(this.config, this.log);\n  this.of[id].id = id;\n  this.of[id].socket ? this.of[id].socket.id = id : null;\n  this.of[id].path = path;\n  this.of[id].connect();\n  callback(this);\n}\nfunction connectNet(id, host, port, callback) {\n  if (!id) {\n    this.log(\"Service id required\", \"Requested service connection without specifying service id. Aborting connection attempt\");\n    return;\n  }\n  if (typeof host == \"number\") {\n    callback = port;\n    port = host;\n    host = false;\n  }\n  if (typeof host == \"function\") {\n    callback = host;\n    host = false;\n    port = false;\n  }\n  if (!host) {\n    this.log(\"Server host not specified, so defaulting to\", \"ipc.config.networkHost\", this.config.networkHost);\n    host = this.config.networkHost;\n  }\n  if (typeof port == \"function\") {\n    callback = port;\n    port = false;\n  }\n  if (!port) {\n    this.log(\"Server port not specified, so defaulting to\", \"ipc.config.networkPort\", this.config.networkPort);\n    port = this.config.networkPort;\n  }\n  if (typeof callback == \"string\") {\n    UDPType = callback;\n    callback = false;\n  }\n  if (!callback) {\n    callback = emptyCallback;\n  }\n  if (this.of[id]) {\n    if (!this.of[id].socket.destroyed) {\n      this.log(\"Already Connected to\", id, \"- So executing success without connection\");\n      callback();\n      return;\n    }\n    this.of[id].socket.destroy();\n  }\n  this.of[id] = new Client(this.config, this.log);\n  this.of[id].id = id;\n  this.of[id].socket ? this.of[id].socket.id = id : null;\n  this.of[id].path = host;\n  this.of[id].port = port;\n  this.of[id].connect();\n  callback(this);\n}\n\n// node-ipc.js\nvar IPCModule = class extends IPC {\n  constructor() {\n    super();\n    __publicField(this, \"IPC\", IPC);\n  }\n};\nvar singleton = new IPCModule();\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  IPCModule\n});\n", "/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n    // Metadata Proposal\n    // https://rbuckton.github.io/reflect-metadata/\n    (function (factory) {\n        var root = typeof global === \"object\" ? global :\n            typeof self === \"object\" ? self :\n                typeof this === \"object\" ? this :\n                    Function(\"return this;\")();\n        var exporter = makeExporter(Reflect);\n        if (typeof root.Reflect === \"undefined\") {\n            root.Reflect = Reflect;\n        }\n        else {\n            exporter = makeExporter(root.Reflect, exporter);\n        }\n        factory(exporter);\n        function makeExporter(target, previous) {\n            return function (key, value) {\n                if (typeof target[key] !== \"function\") {\n                    Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n                }\n                if (previous)\n                    previous(key, value);\n            };\n        }\n    })(function (exporter) {\n        var hasOwn = Object.prototype.hasOwnProperty;\n        // feature test for Symbol support\n        var supportsSymbol = typeof Symbol === \"function\";\n        var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n        var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n        var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n        var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n        var downLevel = !supportsCreate && !supportsProto;\n        var HashMap = {\n            // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n            create: supportsCreate\n                ? function () { return MakeDictionary(Object.create(null)); }\n                : supportsProto\n                    ? function () { return MakeDictionary({ __proto__: null }); }\n                    : function () { return MakeDictionary({}); },\n            has: downLevel\n                ? function (map, key) { return hasOwn.call(map, key); }\n                : function (map, key) { return key in map; },\n            get: downLevel\n                ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n                : function (map, key) { return map[key]; },\n        };\n        // Load global or shim versions of Map, Set, and WeakMap\n        var functionPrototype = Object.getPrototypeOf(Function);\n        var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n        var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n        var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n        var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n        // [[Metadata]] internal slot\n        // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n        var Metadata = new _WeakMap();\n        /**\n         * Applies a set of decorators to a property of a target object.\n         * @param decorators An array of decorators.\n         * @param target The target object.\n         * @param propertyKey (Optional) The property key to decorate.\n         * @param attributes (Optional) The property descriptor for the target key.\n         * @remarks Decorators are applied in reverse order.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     Example = Reflect.decorate(decoratorsArray, Example);\n         *\n         *     // property (on constructor)\n         *     Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     Object.defineProperty(Example, \"staticMethod\",\n         *         Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n         *             Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n         *\n         *     // method (on prototype)\n         *     Object.defineProperty(Example.prototype, \"method\",\n         *         Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n         *             Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n         *\n         */\n        function decorate(decorators, target, propertyKey, attributes) {\n            if (!IsUndefined(propertyKey)) {\n                if (!IsArray(decorators))\n                    throw new TypeError();\n                if (!IsObject(target))\n                    throw new TypeError();\n                if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n                    throw new TypeError();\n                if (IsNull(attributes))\n                    attributes = undefined;\n                propertyKey = ToPropertyKey(propertyKey);\n                return DecorateProperty(decorators, target, propertyKey, attributes);\n            }\n            else {\n                if (!IsArray(decorators))\n                    throw new TypeError();\n                if (!IsConstructor(target))\n                    throw new TypeError();\n                return DecorateConstructor(decorators, target);\n            }\n        }\n        exporter(\"decorate\", decorate);\n        // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n        // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n        /**\n         * A default metadata decorator factory that can be used on a class, class member, or parameter.\n         * @param metadataKey The key for the metadata entry.\n         * @param metadataValue The value for the metadata entry.\n         * @returns A decorator function.\n         * @remarks\n         * If `metadataKey` is already defined for the target and target key, the\n         * metadataValue for that key will be overwritten.\n         * @example\n         *\n         *     // constructor\n         *     @Reflect.metadata(key, value)\n         *     class Example {\n         *     }\n         *\n         *     // property (on constructor, TypeScript only)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         static staticProperty;\n         *     }\n         *\n         *     // property (on prototype, TypeScript only)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         property;\n         *     }\n         *\n         *     // method (on constructor)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         static staticMethod() { }\n         *     }\n         *\n         *     // method (on prototype)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         method() { }\n         *     }\n         *\n         */\n        function metadata(metadataKey, metadataValue) {\n            function decorator(target, propertyKey) {\n                if (!IsObject(target))\n                    throw new TypeError();\n                if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n                    throw new TypeError();\n                OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n            }\n            return decorator;\n        }\n        exporter(\"metadata\", metadata);\n        /**\n         * Define a unique metadata entry on the target.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param metadataValue A value that contains attached metadata.\n         * @param target The target object on which to define metadata.\n         * @param propertyKey (Optional) The property key for the target.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example);\n         *\n         *     // property (on constructor)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n         *\n         *     // decorator factory as metadata-producing annotation.\n         *     function MyAnnotation(options): Decorator {\n         *         return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n         *     }\n         *\n         */\n        function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n        }\n        exporter(\"defineMetadata\", defineMetadata);\n        /**\n         * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function hasMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"hasMetadata\", hasMetadata);\n        /**\n         * Gets a value indicating whether the target object has the provided metadata key defined.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function hasOwnMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"hasOwnMetadata\", hasOwnMetadata);\n        /**\n         * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function getMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"getMetadata\", getMetadata);\n        /**\n         * Gets the metadata value for the provided metadata key on the target object.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function getOwnMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"getOwnMetadata\", getOwnMetadata);\n        /**\n         * Gets the metadata keys defined on the target object or its prototype chain.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns An array of unique metadata keys.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getMetadataKeys(Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n         *\n         */\n        function getMetadataKeys(target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryMetadataKeys(target, propertyKey);\n        }\n        exporter(\"getMetadataKeys\", getMetadataKeys);\n        /**\n         * Gets the unique metadata keys defined on the target object.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns An array of unique metadata keys.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getOwnMetadataKeys(Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n         *\n         */\n        function getOwnMetadataKeys(target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryOwnMetadataKeys(target, propertyKey);\n        }\n        exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n        /**\n         * Deletes the metadata entry from the target object with the provided key.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function deleteMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return false;\n            if (!metadataMap.delete(metadataKey))\n                return false;\n            if (metadataMap.size > 0)\n                return true;\n            var targetMetadata = Metadata.get(target);\n            targetMetadata.delete(propertyKey);\n            if (targetMetadata.size > 0)\n                return true;\n            Metadata.delete(target);\n            return true;\n        }\n        exporter(\"deleteMetadata\", deleteMetadata);\n        function DecorateConstructor(decorators, target) {\n            for (var i = decorators.length - 1; i >= 0; --i) {\n                var decorator = decorators[i];\n                var decorated = decorator(target);\n                if (!IsUndefined(decorated) && !IsNull(decorated)) {\n                    if (!IsConstructor(decorated))\n                        throw new TypeError();\n                    target = decorated;\n                }\n            }\n            return target;\n        }\n        function DecorateProperty(decorators, target, propertyKey, descriptor) {\n            for (var i = decorators.length - 1; i >= 0; --i) {\n                var decorator = decorators[i];\n                var decorated = decorator(target, propertyKey, descriptor);\n                if (!IsUndefined(decorated) && !IsNull(decorated)) {\n                    if (!IsObject(decorated))\n                        throw new TypeError();\n                    descriptor = decorated;\n                }\n            }\n            return descriptor;\n        }\n        function GetOrCreateMetadataMap(O, P, Create) {\n            var targetMetadata = Metadata.get(O);\n            if (IsUndefined(targetMetadata)) {\n                if (!Create)\n                    return undefined;\n                targetMetadata = new _Map();\n                Metadata.set(O, targetMetadata);\n            }\n            var metadataMap = targetMetadata.get(P);\n            if (IsUndefined(metadataMap)) {\n                if (!Create)\n                    return undefined;\n                metadataMap = new _Map();\n                targetMetadata.set(P, metadataMap);\n            }\n            return metadataMap;\n        }\n        // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n        function OrdinaryHasMetadata(MetadataKey, O, P) {\n            var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n            if (hasOwn)\n                return true;\n            var parent = OrdinaryGetPrototypeOf(O);\n            if (!IsNull(parent))\n                return OrdinaryHasMetadata(MetadataKey, parent, P);\n            return false;\n        }\n        // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n        function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return false;\n            return ToBoolean(metadataMap.has(MetadataKey));\n        }\n        // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n        function OrdinaryGetMetadata(MetadataKey, O, P) {\n            var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n            if (hasOwn)\n                return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n            var parent = OrdinaryGetPrototypeOf(O);\n            if (!IsNull(parent))\n                return OrdinaryGetMetadata(MetadataKey, parent, P);\n            return undefined;\n        }\n        // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n        function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return undefined;\n            return metadataMap.get(MetadataKey);\n        }\n        // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n        function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n            metadataMap.set(MetadataKey, MetadataValue);\n        }\n        // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n        function OrdinaryMetadataKeys(O, P) {\n            var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n            var parent = OrdinaryGetPrototypeOf(O);\n            if (parent === null)\n                return ownKeys;\n            var parentKeys = OrdinaryMetadataKeys(parent, P);\n            if (parentKeys.length <= 0)\n                return ownKeys;\n            if (ownKeys.length <= 0)\n                return parentKeys;\n            var set = new _Set();\n            var keys = [];\n            for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n                var key = ownKeys_1[_i];\n                var hasKey = set.has(key);\n                if (!hasKey) {\n                    set.add(key);\n                    keys.push(key);\n                }\n            }\n            for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n                var key = parentKeys_1[_a];\n                var hasKey = set.has(key);\n                if (!hasKey) {\n                    set.add(key);\n                    keys.push(key);\n                }\n            }\n            return keys;\n        }\n        // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n        function OrdinaryOwnMetadataKeys(O, P) {\n            var keys = [];\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return keys;\n            var keysObj = metadataMap.keys();\n            var iterator = GetIterator(keysObj);\n            var k = 0;\n            while (true) {\n                var next = IteratorStep(iterator);\n                if (!next) {\n                    keys.length = k;\n                    return keys;\n                }\n                var nextValue = IteratorValue(next);\n                try {\n                    keys[k] = nextValue;\n                }\n                catch (e) {\n                    try {\n                        IteratorClose(iterator);\n                    }\n                    finally {\n                        throw e;\n                    }\n                }\n                k++;\n            }\n        }\n        // 6 ECMAScript Data Typ0es and Values\n        // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n        function Type(x) {\n            if (x === null)\n                return 1 /* Null */;\n            switch (typeof x) {\n                case \"undefined\": return 0 /* Undefined */;\n                case \"boolean\": return 2 /* Boolean */;\n                case \"string\": return 3 /* String */;\n                case \"symbol\": return 4 /* Symbol */;\n                case \"number\": return 5 /* Number */;\n                case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n                default: return 6 /* Object */;\n            }\n        }\n        // 6.1.1 The Undefined Type\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n        function IsUndefined(x) {\n            return x === undefined;\n        }\n        // 6.1.2 The Null Type\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n        function IsNull(x) {\n            return x === null;\n        }\n        // 6.1.5 The Symbol Type\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n        function IsSymbol(x) {\n            return typeof x === \"symbol\";\n        }\n        // 6.1.7 The Object Type\n        // https://tc39.github.io/ecma262/#sec-object-type\n        function IsObject(x) {\n            return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n        }\n        // 7.1 Type Conversion\n        // https://tc39.github.io/ecma262/#sec-type-conversion\n        // 7.1.1 ToPrimitive(input [, PreferredType])\n        // https://tc39.github.io/ecma262/#sec-toprimitive\n        function ToPrimitive(input, PreferredType) {\n            switch (Type(input)) {\n                case 0 /* Undefined */: return input;\n                case 1 /* Null */: return input;\n                case 2 /* Boolean */: return input;\n                case 3 /* String */: return input;\n                case 4 /* Symbol */: return input;\n                case 5 /* Number */: return input;\n            }\n            var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n            var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n            if (exoticToPrim !== undefined) {\n                var result = exoticToPrim.call(input, hint);\n                if (IsObject(result))\n                    throw new TypeError();\n                return result;\n            }\n            return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n        }\n        // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n        // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n        function OrdinaryToPrimitive(O, hint) {\n            if (hint === \"string\") {\n                var toString_1 = O.toString;\n                if (IsCallable(toString_1)) {\n                    var result = toString_1.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n                var valueOf = O.valueOf;\n                if (IsCallable(valueOf)) {\n                    var result = valueOf.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n            }\n            else {\n                var valueOf = O.valueOf;\n                if (IsCallable(valueOf)) {\n                    var result = valueOf.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n                var toString_2 = O.toString;\n                if (IsCallable(toString_2)) {\n                    var result = toString_2.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n            }\n            throw new TypeError();\n        }\n        // 7.1.2 ToBoolean(argument)\n        // https://tc39.github.io/ecma262/2016/#sec-toboolean\n        function ToBoolean(argument) {\n            return !!argument;\n        }\n        // 7.1.12 ToString(argument)\n        // https://tc39.github.io/ecma262/#sec-tostring\n        function ToString(argument) {\n            return \"\" + argument;\n        }\n        // 7.1.14 ToPropertyKey(argument)\n        // https://tc39.github.io/ecma262/#sec-topropertykey\n        function ToPropertyKey(argument) {\n            var key = ToPrimitive(argument, 3 /* String */);\n            if (IsSymbol(key))\n                return key;\n            return ToString(key);\n        }\n        // 7.2 Testing and Comparison Operations\n        // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n        // 7.2.2 IsArray(argument)\n        // https://tc39.github.io/ecma262/#sec-isarray\n        function IsArray(argument) {\n            return Array.isArray\n                ? Array.isArray(argument)\n                : argument instanceof Object\n                    ? argument instanceof Array\n                    : Object.prototype.toString.call(argument) === \"[object Array]\";\n        }\n        // 7.2.3 IsCallable(argument)\n        // https://tc39.github.io/ecma262/#sec-iscallable\n        function IsCallable(argument) {\n            // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n            return typeof argument === \"function\";\n        }\n        // 7.2.4 IsConstructor(argument)\n        // https://tc39.github.io/ecma262/#sec-isconstructor\n        function IsConstructor(argument) {\n            // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n            return typeof argument === \"function\";\n        }\n        // 7.2.7 IsPropertyKey(argument)\n        // https://tc39.github.io/ecma262/#sec-ispropertykey\n        function IsPropertyKey(argument) {\n            switch (Type(argument)) {\n                case 3 /* String */: return true;\n                case 4 /* Symbol */: return true;\n                default: return false;\n            }\n        }\n        // 7.3 Operations on Objects\n        // https://tc39.github.io/ecma262/#sec-operations-on-objects\n        // 7.3.9 GetMethod(V, P)\n        // https://tc39.github.io/ecma262/#sec-getmethod\n        function GetMethod(V, P) {\n            var func = V[P];\n            if (func === undefined || func === null)\n                return undefined;\n            if (!IsCallable(func))\n                throw new TypeError();\n            return func;\n        }\n        // 7.4 Operations on Iterator Objects\n        // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n        function GetIterator(obj) {\n            var method = GetMethod(obj, iteratorSymbol);\n            if (!IsCallable(method))\n                throw new TypeError(); // from Call\n            var iterator = method.call(obj);\n            if (!IsObject(iterator))\n                throw new TypeError();\n            return iterator;\n        }\n        // 7.4.4 IteratorValue(iterResult)\n        // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n        function IteratorValue(iterResult) {\n            return iterResult.value;\n        }\n        // 7.4.5 IteratorStep(iterator)\n        // https://tc39.github.io/ecma262/#sec-iteratorstep\n        function IteratorStep(iterator) {\n            var result = iterator.next();\n            return result.done ? false : result;\n        }\n        // 7.4.6 IteratorClose(iterator, completion)\n        // https://tc39.github.io/ecma262/#sec-iteratorclose\n        function IteratorClose(iterator) {\n            var f = iterator[\"return\"];\n            if (f)\n                f.call(iterator);\n        }\n        // 9.1 Ordinary Object Internal Methods and Internal Slots\n        // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n        // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n        // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n        function OrdinaryGetPrototypeOf(O) {\n            var proto = Object.getPrototypeOf(O);\n            if (typeof O !== \"function\" || O === functionPrototype)\n                return proto;\n            // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n            // Try to determine the superclass constructor. Compatible implementations\n            // must either set __proto__ on a subclass constructor to the superclass constructor,\n            // or ensure each class has a valid `constructor` property on its prototype that\n            // points back to the constructor.\n            // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n            // This is the case when in ES6 or when using __proto__ in a compatible browser.\n            if (proto !== functionPrototype)\n                return proto;\n            // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n            var prototype = O.prototype;\n            var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n            if (prototypeProto == null || prototypeProto === Object.prototype)\n                return proto;\n            // If the constructor was not a function, then we cannot determine the heritage.\n            var constructor = prototypeProto.constructor;\n            if (typeof constructor !== \"function\")\n                return proto;\n            // If we have some kind of self-reference, then we cannot determine the heritage.\n            if (constructor === O)\n                return proto;\n            // we have a pretty good guess at the heritage.\n            return constructor;\n        }\n        // naive Map shim\n        function CreateMapPolyfill() {\n            var cacheSentinel = {};\n            var arraySentinel = [];\n            var MapIterator = /** @class */ (function () {\n                function MapIterator(keys, values, selector) {\n                    this._index = 0;\n                    this._keys = keys;\n                    this._values = values;\n                    this._selector = selector;\n                }\n                MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n                MapIterator.prototype[iteratorSymbol] = function () { return this; };\n                MapIterator.prototype.next = function () {\n                    var index = this._index;\n                    if (index >= 0 && index < this._keys.length) {\n                        var result = this._selector(this._keys[index], this._values[index]);\n                        if (index + 1 >= this._keys.length) {\n                            this._index = -1;\n                            this._keys = arraySentinel;\n                            this._values = arraySentinel;\n                        }\n                        else {\n                            this._index++;\n                        }\n                        return { value: result, done: false };\n                    }\n                    return { value: undefined, done: true };\n                };\n                MapIterator.prototype.throw = function (error) {\n                    if (this._index >= 0) {\n                        this._index = -1;\n                        this._keys = arraySentinel;\n                        this._values = arraySentinel;\n                    }\n                    throw error;\n                };\n                MapIterator.prototype.return = function (value) {\n                    if (this._index >= 0) {\n                        this._index = -1;\n                        this._keys = arraySentinel;\n                        this._values = arraySentinel;\n                    }\n                    return { value: value, done: true };\n                };\n                return MapIterator;\n            }());\n            return /** @class */ (function () {\n                function Map() {\n                    this._keys = [];\n                    this._values = [];\n                    this._cacheKey = cacheSentinel;\n                    this._cacheIndex = -2;\n                }\n                Object.defineProperty(Map.prototype, \"size\", {\n                    get: function () { return this._keys.length; },\n                    enumerable: true,\n                    configurable: true\n                });\n                Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n                Map.prototype.get = function (key) {\n                    var index = this._find(key, /*insert*/ false);\n                    return index >= 0 ? this._values[index] : undefined;\n                };\n                Map.prototype.set = function (key, value) {\n                    var index = this._find(key, /*insert*/ true);\n                    this._values[index] = value;\n                    return this;\n                };\n                Map.prototype.delete = function (key) {\n                    var index = this._find(key, /*insert*/ false);\n                    if (index >= 0) {\n                        var size = this._keys.length;\n                        for (var i = index + 1; i < size; i++) {\n                            this._keys[i - 1] = this._keys[i];\n                            this._values[i - 1] = this._values[i];\n                        }\n                        this._keys.length--;\n                        this._values.length--;\n                        if (key === this._cacheKey) {\n                            this._cacheKey = cacheSentinel;\n                            this._cacheIndex = -2;\n                        }\n                        return true;\n                    }\n                    return false;\n                };\n                Map.prototype.clear = function () {\n                    this._keys.length = 0;\n                    this._values.length = 0;\n                    this._cacheKey = cacheSentinel;\n                    this._cacheIndex = -2;\n                };\n                Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n                Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n                Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n                Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n                Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n                Map.prototype._find = function (key, insert) {\n                    if (this._cacheKey !== key) {\n                        this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n                    }\n                    if (this._cacheIndex < 0 && insert) {\n                        this._cacheIndex = this._keys.length;\n                        this._keys.push(key);\n                        this._values.push(undefined);\n                    }\n                    return this._cacheIndex;\n                };\n                return Map;\n            }());\n            function getKey(key, _) {\n                return key;\n            }\n            function getValue(_, value) {\n                return value;\n            }\n            function getEntry(key, value) {\n                return [key, value];\n            }\n        }\n        // naive Set shim\n        function CreateSetPolyfill() {\n            return /** @class */ (function () {\n                function Set() {\n                    this._map = new _Map();\n                }\n                Object.defineProperty(Set.prototype, \"size\", {\n                    get: function () { return this._map.size; },\n                    enumerable: true,\n                    configurable: true\n                });\n                Set.prototype.has = function (value) { return this._map.has(value); };\n                Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n                Set.prototype.delete = function (value) { return this._map.delete(value); };\n                Set.prototype.clear = function () { this._map.clear(); };\n                Set.prototype.keys = function () { return this._map.keys(); };\n                Set.prototype.values = function () { return this._map.values(); };\n                Set.prototype.entries = function () { return this._map.entries(); };\n                Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n                Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n                return Set;\n            }());\n        }\n        // naive WeakMap shim\n        function CreateWeakMapPolyfill() {\n            var UUID_SIZE = 16;\n            var keys = HashMap.create();\n            var rootKey = CreateUniqueKey();\n            return /** @class */ (function () {\n                function WeakMap() {\n                    this._key = CreateUniqueKey();\n                }\n                WeakMap.prototype.has = function (target) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n                    return table !== undefined ? HashMap.has(table, this._key) : false;\n                };\n                WeakMap.prototype.get = function (target) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n                    return table !== undefined ? HashMap.get(table, this._key) : undefined;\n                };\n                WeakMap.prototype.set = function (target, value) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n                    table[this._key] = value;\n                    return this;\n                };\n                WeakMap.prototype.delete = function (target) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n                    return table !== undefined ? delete table[this._key] : false;\n                };\n                WeakMap.prototype.clear = function () {\n                    // NOTE: not a real clear, just makes the previous data unreachable\n                    this._key = CreateUniqueKey();\n                };\n                return WeakMap;\n            }());\n            function CreateUniqueKey() {\n                var key;\n                do\n                    key = \"@@WeakMap@@\" + CreateUUID();\n                while (HashMap.has(keys, key));\n                keys[key] = true;\n                return key;\n            }\n            function GetOrCreateWeakMapTable(target, create) {\n                if (!hasOwn.call(target, rootKey)) {\n                    if (!create)\n                        return undefined;\n                    Object.defineProperty(target, rootKey, { value: HashMap.create() });\n                }\n                return target[rootKey];\n            }\n            function FillRandomBytes(buffer, size) {\n                for (var i = 0; i < size; ++i)\n                    buffer[i] = Math.random() * 0xff | 0;\n                return buffer;\n            }\n            function GenRandomBytes(size) {\n                if (typeof Uint8Array === \"function\") {\n                    if (typeof crypto !== \"undefined\")\n                        return crypto.getRandomValues(new Uint8Array(size));\n                    if (typeof msCrypto !== \"undefined\")\n                        return msCrypto.getRandomValues(new Uint8Array(size));\n                    return FillRandomBytes(new Uint8Array(size), size);\n                }\n                return FillRandomBytes(new Array(size), size);\n            }\n            function CreateUUID() {\n                var data = GenRandomBytes(UUID_SIZE);\n                // mark as random - RFC 4122 \u00A7 4.4\n                data[6] = data[6] & 0x4f | 0x40;\n                data[8] = data[8] & 0xbf | 0x80;\n                var result = \"\";\n                for (var offset = 0; offset < UUID_SIZE; ++offset) {\n                    var byte = data[offset];\n                    if (offset === 4 || offset === 6 || offset === 8)\n                        result += \"-\";\n                    if (byte < 16)\n                        result += \"0\";\n                    result += byte.toString(16).toLowerCase();\n                }\n                return result;\n            }\n        }\n        // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n        function MakeDictionary(obj) {\n            obj.__ = undefined;\n            delete obj.__;\n            return obj;\n        }\n    });\n})(Reflect || (Reflect = {}));\n", "export type SourceMapSegment =\n\t| [number]\n\t| [number, number, number, number]\n\t| [number, number, number, number, number];\nexport type SourceMapLine = SourceMapSegment[];\nexport type SourceMapMappings = SourceMapLine[];\n\nconst charToInteger: { [charCode: number]: number } = {};\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfor (let i = 0; i < chars.length; i++) {\n\tcharToInteger[chars.charCodeAt(i)] = i;\n}\n\nexport function decode(mappings: string): SourceMapMappings {\n\tconst decoded: SourceMapMappings = [];\n\tlet line: SourceMapLine = [];\n\tconst segment: SourceMapSegment = [\n\t\t0, // generated code column\n\t\t0, // source file index\n\t\t0, // source code line\n\t\t0, // source code column\n\t\t0, // name index\n\t];\n\n\tlet j = 0;\n\tfor (let i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n\t\tconst c = mappings.charCodeAt(i);\n\n\t\tif (c === 44) { // \",\"\n\t\t\tsegmentify(line, segment, j);\n\t\t\tj = 0;\n\n\t\t} else if (c === 59) { // \";\"\n\t\t\tsegmentify(line, segment, j);\n\t\t\tj = 0;\n\t\t\tdecoded.push(line);\n\t\t\tline = [];\n\t\t\tsegment[0] = 0;\n\n\t\t} else {\n\t\t\tlet integer = charToInteger[c];\n\t\t\tif (integer === undefined) {\n\t\t\t\tthrow new Error('Invalid character (' + String.fromCharCode(c) + ')');\n\t\t\t}\n\n\t\t\tconst hasContinuationBit = integer & 32;\n\n\t\t\tinteger &= 31;\n\t\t\tvalue += integer << shift;\n\n\t\t\tif (hasContinuationBit) {\n\t\t\t\tshift += 5;\n\t\t\t} else {\n\t\t\t\tconst shouldNegate = value & 1;\n\t\t\t\tvalue >>>= 1;\n\n\t\t\t\tif (shouldNegate) {\n\t\t\t\t\tvalue = value === 0 ? -0x80000000 : -value;\n\t\t\t\t}\n\n\t\t\t\tsegment[j] += value;\n\t\t\t\tj++;\n\t\t\t\tvalue = shift = 0; // reset\n\t\t\t}\n\t\t}\n\t}\n\n\tsegmentify(line, segment, j);\n\tdecoded.push(line);\n\n\treturn decoded;\n}\n\nfunction segmentify(line: SourceMapSegment[], segment: SourceMapSegment, j: number) {\n\t// This looks ugly, but we're creating specialized arrays with a specific\n\t// length. This is much faster than creating a new array (which v8 expands to\n\t// a capacity of 17 after pushing the first item), or slicing out a subarray\n\t// (which is slow). Length 4 is assumed to be the most frequent, followed by\n\t// length 5 (since not everything will have an associated name), followed by\n\t// length 1 (it's probably rare for a source substring to not have an\n\t// associated segment data).\n\tif (j === 4) line.push([segment[0], segment[1], segment[2], segment[3]]);\n\telse if (j === 5) line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n\telse if (j === 1) line.push([segment[0]]);\n}\n\nexport function encode(decoded: SourceMapMappings): string {\n\tlet sourceFileIndex = 0;  // second field\n\tlet sourceCodeLine = 0;   // third field\n\tlet sourceCodeColumn = 0; // fourth field\n\tlet nameIndex = 0;        // fifth field\n\tlet mappings = '';\n\n\tfor (let i = 0; i < decoded.length; i++) {\n\t\tconst line = decoded[i];\n\t\tif (i > 0) mappings += ';';\n\t\tif (line.length === 0) continue;\n\n\t\tlet generatedCodeColumn = 0; // first field\n\n\t\tconst lineMappings: string[] = [];\n\n\t\tfor (const segment of line) {\n\t\t\tlet segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n\t\t\tgeneratedCodeColumn = segment[0];\n\n\t\t\tif (segment.length > 1) {\n\t\t\t\tsegmentMappings +=\n\t\t\t\t\tencodeInteger(segment[1] - sourceFileIndex) +\n\t\t\t\t\tencodeInteger(segment[2] - sourceCodeLine) +\n\t\t\t\t\tencodeInteger(segment[3] - sourceCodeColumn);\n\n\t\t\t\tsourceFileIndex = segment[1];\n\t\t\t\tsourceCodeLine = segment[2];\n\t\t\t\tsourceCodeColumn = segment[3];\n\t\t\t}\n\n\t\t\tif (segment.length === 5) {\n\t\t\t\tsegmentMappings += encodeInteger(segment[4] - nameIndex);\n\t\t\t\tnameIndex = segment[4];\n\t\t\t}\n\n\t\t\tlineMappings.push(segmentMappings);\n\t\t}\n\n\t\tmappings += lineMappings.join(',');\n\t}\n\n\treturn mappings;\n}\n\nfunction encodeInteger(num: number): string {\n\tvar result = '';\n\tnum = num < 0 ? (-num << 1) | 1 : num << 1;\n\tdo {\n\t\tvar clamped = num & 31;\n\t\tnum >>>= 5;\n\t\tif (num > 0) {\n\t\t\tclamped |= 32;\n\t\t}\n\t\tresult += chars[clamped];\n\t} while (num > 0);\n\n\treturn result;\n}\n", "import tslib from '../tslib.js';\r\nconst {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __exportStar,\r\n    __createBinding,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __exportStar,\r\n    __createBinding,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n};\r\n", "import { User } from './user';\n\n/**\n * @inheritdoc\n */\nexport interface Session extends SessionContext {\n  /** JSDoc */\n  update(context?: SessionContext): void;\n\n  /** JSDoc */\n  close(status?: SessionStatus): void;\n\n  /** JSDoc */\n  toJSON(): {\n    init: boolean;\n    sid: string;\n    did?: string;\n    timestamp: string;\n    started: string;\n    duration: number;\n    status: SessionStatus;\n    errors: number;\n    attrs?: {\n      release?: string;\n      environment?: string;\n      user_agent?: string;\n      ip_address?: string;\n    };\n  };\n}\n\n/**\n * Session Context\n */\nexport interface SessionContext {\n  sid?: string;\n  did?: string;\n  timestamp?: number;\n  started?: number;\n  duration?: number;\n  status?: SessionStatus;\n  release?: string;\n  environment?: string;\n  userAgent?: string;\n  ipAddress?: string;\n  errors?: number;\n  user?: User | null;\n}\n\n/**\n * Session Status\n */\nexport enum SessionStatus {\n  /** JSDoc */\n  Ok = 'ok',\n  /** JSDoc */\n  Exited = 'exited',\n  /** JSDoc */\n  Crashed = 'crashed',\n  /** JSDoc */\n  Abnormal = 'abnormal',\n}\n", "/** JSDoc */\n// eslint-disable-next-line import/export\nexport enum Severity {\n  /** JSDoc */\n  Fatal = 'fatal',\n  /** JSDoc */\n  Error = 'error',\n  /** JSDoc */\n  Warning = 'warning',\n  /** JSDoc */\n  Log = 'log',\n  /** JSDoc */\n  Info = 'info',\n  /** JSDoc */\n  Debug = 'debug',\n  /** JSDoc */\n  Critical = 'critical',\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, import/export\nexport namespace Severity {\n  /**\n   * Converts a string-based level into a {@link Severity}.\n   *\n   * @param level string representation of Severity\n   * @returns Severity\n   */\n  export function fromString(level: string): Severity {\n    switch (level) {\n      case 'debug':\n        return Severity.Debug;\n      case 'info':\n        return Severity.Info;\n      case 'warn':\n      case 'warning':\n        return Severity.Warning;\n      case 'error':\n        return Severity.Error;\n      case 'fatal':\n        return Severity.Fatal;\n      case 'critical':\n        return Severity.Critical;\n      case 'log':\n      default:\n        return Severity.Log;\n    }\n  }\n}\n", "/** The status of an event. */\n// eslint-disable-next-line import/export\nexport enum Status {\n  /** The status could not be determined. */\n  Unknown = 'unknown',\n  /** The event was skipped due to configuration or callbacks. */\n  Skipped = 'skipped',\n  /** The event was sent to Sentry successfully. */\n  Success = 'success',\n  /** The client is currently rate limited and will try again later. */\n  RateLimit = 'rate_limit',\n  /** The event could not be processed. */\n  Invalid = 'invalid',\n  /** A server-side error ocurred during submission. */\n  Failed = 'failed',\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, import/export\nexport namespace Status {\n  /**\n   * Converts a HTTP status code into a {@link Status}.\n   *\n   * @param code The HTTP response status code.\n   * @returns The send status or {@link Status.Unknown}.\n   */\n  export function fromHttpCode(code: number): Status {\n    if (code >= 200 && code < 300) {\n      return Status.Success;\n    }\n\n    if (code === 429) {\n      return Status.RateLimit;\n    }\n\n    if (code >= 400 && code < 500) {\n      return Status.Invalid;\n    }\n\n    if (code >= 500) {\n      return Status.Failed;\n    }\n\n    return Status.Unknown;\n  }\n}\n", "/**\n * Consumes the promise and logs the error when it rejects.\n * @param promise A promise to forget.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function forget(promise: PromiseLike<any>): void {\n  promise.then(null, e => {\n    // TODO: Use a better logging mechanism\n    // eslint-disable-next-line no-console\n    console.error(e);\n  });\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport { Primitive } from '@sentry/types';\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: any): boolean {\n  switch (Object.prototype.toString.call(wat)) {\n    case '[object Error]':\n      return true;\n    case '[object Exception]':\n      return true;\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object ErrorEvent]';\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object DOMError]';\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object DOMException]';\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object String]';\n}\n\n/**\n * Checks whether given value's is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: any): wat is Primitive {\n  return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object Object]';\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: any): boolean {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: any): boolean {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object RegExp]';\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): boolean {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: any): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n", "import { isString } from './is';\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(elem: unknown): string {\n  type SimpleNode = {\n    parentNode: SimpleNode;\n  } | null;\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem as SimpleNode;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const MAX_OUTPUT_LEN = 80;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n\n    // eslint-disable-next-line no-plusplus\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown): string {\n  const elem = el as {\n    tagName?: string;\n    id?: string;\n    className?: string;\n    getAttribute(key: string): string;\n  };\n\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  out.push(elem.tagName.toLowerCase());\n  if (elem.id) {\n    out.push(`#${elem.id}`);\n  }\n\n  // eslint-disable-next-line prefer-const\n  className = elem.className;\n  if (className && isString(className)) {\n    classes = className.split(/\\s+/);\n    for (i = 0; i < classes.length; i++) {\n      out.push(`.${classes[i]}`);\n    }\n  }\n  const allowedAttrs = ['type', 'name', 'title', 'alt'];\n  for (i = 0; i < allowedAttrs.length; i++) {\n    key = allowedAttrs[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push(`[${key}=\"${attr}\"]`);\n    }\n  }\n  return out.join('');\n}\n", "export const setPrototypeOf =\n  Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties);\n\n/**\n * setPrototypeOf polyfill using __proto__\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction setProtoOf<TTarget extends object, TProto>(obj: TTarget, proto: TProto): TTarget & TProto {\n  // @ts-ignore __proto__ does not exist on obj\n  obj.__proto__ = proto;\n  return obj as TTarget & TProto;\n}\n\n/**\n * setPrototypeOf polyfill using mixin\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction mixinProperties<TTarget extends object, TProto>(obj: TTarget, proto: TProto): TTarget & TProto {\n  for (const prop in proto) {\n    // eslint-disable-next-line no-prototype-builtins\n    if (!obj.hasOwnProperty(prop)) {\n      // @ts-ignore typescript complains about indexing so we remove\n      obj[prop] = proto[prop];\n    }\n  }\n\n  return obj as TTarget & TProto;\n}\n", "import { setPrototypeOf } from './polyfill';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n  /** Display name of this error instance. */\n  public name: string;\n\n  public constructor(public message: string) {\n    super(message);\n\n    this.name = new.target.prototype.constructor.name;\n    setPrototypeOf(this, new.target.prototype);\n  }\n}\n", "import { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { SentryError } from './error';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\n/** Error message */\nconst ERROR_MESSAGE = 'Invalid Dsn';\n\n/** The Sentry Dsn, identifying a Sentry instance and project. */\nexport class Dsn implements DsnComponents {\n  /** Protocol used to connect to Sentry. */\n  public protocol!: DsnProtocol;\n  /** Public authorization key. */\n  public user!: string;\n  /** Private authorization key (deprecated, optional). */\n  public pass!: string;\n  /** Hostname of the Sentry instance. */\n  public host!: string;\n  /** Port of the Sentry instance. */\n  public port!: string;\n  /** Path */\n  public path!: string;\n  /** Project ID */\n  public projectId!: string;\n\n  /** Creates a new Dsn component */\n  public constructor(from: DsnLike) {\n    if (typeof from === 'string') {\n      this._fromString(from);\n    } else {\n      this._fromComponents(from);\n    }\n\n    this._validate();\n  }\n\n  /**\n   * Renders the string representation of this Dsn.\n   *\n   * By default, this will render the public representation without the password\n   * component. To get the deprecated private representation, set `withPassword`\n   * to true.\n   *\n   * @param withPassword When set to true, the password will be included.\n   */\n  public toString(withPassword: boolean = false): string {\n    const { host, path, pass, port, projectId, protocol, user } = this;\n    return (\n      `${protocol}://${user}${withPassword && pass ? `:${pass}` : ''}` +\n      `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n    );\n  }\n\n  /** Parses a string into this Dsn. */\n  private _fromString(str: string): void {\n    const match = DSN_REGEX.exec(str);\n\n    if (!match) {\n      throw new SentryError(ERROR_MESSAGE);\n    }\n\n    const [protocol, user, pass = '', host, port = '', lastPath] = match.slice(1);\n    let path = '';\n    let projectId = lastPath;\n\n    const split = projectId.split('/');\n    if (split.length > 1) {\n      path = split.slice(0, -1).join('/');\n      projectId = split.pop() as string;\n    }\n\n    if (projectId) {\n      const projectMatch = projectId.match(/^\\d+/);\n      if (projectMatch) {\n        projectId = projectMatch[0];\n      }\n    }\n\n    this._fromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, user });\n  }\n\n  /** Maps Dsn components into this instance. */\n  private _fromComponents(components: DsnComponents): void {\n    this.protocol = components.protocol;\n    this.user = components.user;\n    this.pass = components.pass || '';\n    this.host = components.host;\n    this.port = components.port || '';\n    this.path = components.path || '';\n    this.projectId = components.projectId;\n  }\n\n  /** Validates this Dsn and throws on error. */\n  private _validate(): void {\n    ['protocol', 'user', 'host', 'projectId'].forEach(component => {\n      if (!this[component as keyof DsnComponents]) {\n        throw new SentryError(`${ERROR_MESSAGE}: ${component} missing`);\n      }\n    });\n\n    if (!this.projectId.match(/^\\d+$/)) {\n      throw new SentryError(`${ERROR_MESSAGE}: Invalid projectId ${this.projectId}`);\n    }\n\n    if (this.protocol !== 'http' && this.protocol !== 'https') {\n      throw new SentryError(`${ERROR_MESSAGE}: Invalid protocol ${this.protocol}`);\n    }\n\n    if (this.port && isNaN(parseInt(this.port, 10))) {\n      throw new SentryError(`${ERROR_MESSAGE}: Invalid port ${this.port}`);\n    }\n  }\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/**\n * Memo class used for decycle json objects. Uses WeakSet if available otherwise array.\n */\nexport class Memo {\n  /** Determines if WeakSet is available */\n  private readonly _hasWeakSet: boolean;\n  /** Either WeakSet or Array */\n  private readonly _inner: any;\n\n  public constructor() {\n    this._hasWeakSet = typeof WeakSet === 'function';\n    this._inner = this._hasWeakSet ? new WeakSet() : [];\n  }\n\n  /**\n   * Sets obj to remember.\n   * @param obj Object to remember\n   */\n  public memoize(obj: any): boolean {\n    if (this._hasWeakSet) {\n      if (this._inner.has(obj)) {\n        return true;\n      }\n      this._inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < this._inner.length; i++) {\n      const value = this._inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    this._inner.push(obj);\n    return false;\n  }\n\n  /**\n   * Removes object from internal storage.\n   * @param obj Object to forget\n   */\n  public unmemoize(obj: any): void {\n    if (this._hasWeakSet) {\n      this._inner.delete(obj);\n    } else {\n      for (let i = 0; i < this._inner.length; i++) {\n        if (this._inner[i] === obj) {\n          this._inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n}\n", "const defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n", "import { isRegExp, isString } from './is';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.substr(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n  let newLine = line;\n  const ll = newLine.length;\n  if (ll <= 150) {\n    return newLine;\n  }\n  if (colno > ll) {\n    // eslint-disable-next-line no-param-reassign\n    colno = ll;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, ll);\n  if (end > ll - 5) {\n    end = ll;\n  }\n  if (end === ll) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < ll) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      output.push(String(value));\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\nexport function isMatchingPattern(value: string, pattern: RegExp | string): boolean {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return (pattern as RegExp).test(value);\n  }\n  if (typeof pattern === 'string') {\n    return value.indexOf(pattern) !== -1;\n  }\n  return false;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ExtendedError, WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive, isSyntheticEvent } from './is';\nimport { Memo } from './memo';\nimport { getFunctionName } from './stacktrace';\nimport { truncate } from './string';\n\n/**\n * Wrap a given object method with a higher-order function\n *\n * @param source An object that contains a method to be wrapped.\n * @param name A name of method to be wrapped.\n * @param replacementFactory A function that should be used to wrap a given method, returning the wrapped method which\n * will be substituted in for `source[name]`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] as () => any;\n  const wrapped = replacementFactory(original) as WrappedFunction;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    try {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __sentry_original__: {\n          enumerable: false,\n          value: original,\n        },\n      });\n    } catch (_Oo) {\n      // This can throw if multiple fill happens on a global object like XMLHttpRequest\n      // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n    }\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any object into an object literal with all its attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n */\nfunction getWalkSource(\n  value: any,\n): {\n  [key: string]: any;\n} {\n  if (isError(value)) {\n    const error = value as ExtendedError;\n    const err: {\n      [key: string]: any;\n      stack: string | undefined;\n      message: string;\n      name: string;\n    } = {\n      message: error.message,\n      name: error.name,\n      stack: error.stack,\n    };\n\n    for (const i in error) {\n      if (Object.prototype.hasOwnProperty.call(error, i)) {\n        err[i] = error[i];\n      }\n    }\n\n    return err;\n  }\n\n  if (isEvent(value)) {\n    /**\n     * Event-like interface that's usable in browser and node\n     */\n    interface SimpleEvent {\n      [key: string]: unknown;\n      type: string;\n      target?: unknown;\n      currentTarget?: unknown;\n    }\n\n    const event = value as SimpleEvent;\n\n    const source: {\n      [key: string]: any;\n    } = {};\n\n    source.type = event.type;\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      source.target = isElement(event.target)\n        ? htmlTreeAsString(event.target)\n        : Object.prototype.toString.call(event.target);\n    } catch (_oO) {\n      source.target = '<unknown>';\n    }\n\n    try {\n      source.currentTarget = isElement(event.currentTarget)\n        ? htmlTreeAsString(event.currentTarget)\n        : Object.prototype.toString.call(event.currentTarget);\n    } catch (_oO) {\n      source.currentTarget = '<unknown>';\n    }\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      source.detail = event.detail;\n    }\n\n    for (const i in event) {\n      if (Object.prototype.hasOwnProperty.call(event, i)) {\n        source[i] = event;\n      }\n    }\n\n    return source;\n  }\n\n  return value as {\n    [key: string]: any;\n  };\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const serialized = normalize(object, depth);\n\n  if (jsonSize(serialized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return serialized as T;\n}\n\n/**\n * Transform any non-primitive, BigInt, or Symbol-type value into a string. Acts as a no-op on strings, numbers,\n * booleans, null, and undefined.\n *\n * @param value The value to stringify\n * @returns For non-primitive, BigInt, and Symbol-type values, a string denoting the value's type, type and value, or\n *  type and `description` property, respectively. For non-BigInt, non-Symbol primitives, returns the original value,\n *  unchanged.\n */\nfunction serializeValue(value: any): any {\n  const type = Object.prototype.toString.call(value);\n\n  // Node.js REPL notation\n  if (typeof value === 'string') {\n    return value;\n  }\n  if (type === '[object Object]') {\n    return '[Object]';\n  }\n  if (type === '[object Array]') {\n    return '[Array]';\n  }\n\n  const normalized = normalizeValue(value);\n  return isPrimitive(normalized) ? normalized : type;\n}\n\n/**\n * normalizeValue()\n *\n * Takes unserializable input and make it serializable friendly\n *\n * - translates undefined/NaN values to \"[undefined]\"/\"[NaN]\" respectively,\n * - serializes Error objects\n * - filter global objects\n */\nfunction normalizeValue<T>(value: T, key?: any): T | string {\n  if (key === 'domain' && value && typeof value === 'object' && ((value as unknown) as { _events: any })._events) {\n    return '[Domain]';\n  }\n\n  if (key === 'domainEmitter') {\n    return '[DomainEmitter]';\n  }\n\n  if (typeof (global as any) !== 'undefined' && (value as unknown) === global) {\n    return '[Global]';\n  }\n\n  if (typeof (window as any) !== 'undefined' && (value as unknown) === window) {\n    return '[Window]';\n  }\n\n  if (typeof (document as any) !== 'undefined' && (value as unknown) === document) {\n    return '[Document]';\n  }\n\n  // React's SyntheticEvent thingy\n  if (isSyntheticEvent(value)) {\n    return '[SyntheticEvent]';\n  }\n\n  if (typeof value === 'number' && value !== value) {\n    return '[NaN]';\n  }\n\n  if (value === void 0) {\n    return '[undefined]';\n  }\n\n  if (typeof value === 'function') {\n    return `[Function: ${getFunctionName(value)}]`;\n  }\n\n  // symbols and bigints are considered primitives by TS, but aren't natively JSON-serilaizable\n\n  if (typeof value === 'symbol') {\n    return `[${String(value)}]`;\n  }\n\n  if (typeof value === 'bigint') {\n    return `[BigInt: ${String(value)}]`;\n  }\n\n  return value;\n}\n\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param memo Optional Memo class handling decycling\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function walk(key: string, value: any, depth: number = +Infinity, memo: Memo = new Memo()): any {\n  // If we reach the maximum depth, serialize whatever has left\n  if (depth === 0) {\n    return serializeValue(value);\n  }\n\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // If value implements `toJSON` method, call it and return early\n  if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n    return value.toJSON();\n  }\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n\n  // If normalized value is a primitive, there are no branches left to walk, so we can just bail out, as theres no point in going down that branch any further\n  const normalized = normalizeValue(value, key);\n  if (isPrimitive(normalized)) {\n    return normalized;\n  }\n\n  // Create source that we will use for next itterations, either objectified error object (Error type with extracted keys:value pairs) or the input itself\n  const source = getWalkSource(value);\n\n  // Create an accumulator that will act as a parent for all future itterations of that branch\n  const acc = Array.isArray(value) ? [] : {};\n\n  // If we already walked that branch, bail out, as it's circular reference\n  if (memo.memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // Walk all keys of the source\n  for (const innerKey in source) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n      continue;\n    }\n    // Recursively walk through all the child nodes\n    (acc as { [key: string]: any })[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo);\n  }\n\n  // Once walked through all the branches, remove the parent from memo storage\n  memo.unmemoize(value);\n\n  // Return accumulated values\n  return acc;\n}\n\n/**\n * normalize()\n *\n * - Creates a copy to prevent original input mutation\n * - Skip non-enumerablers\n * - Calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format\n * - Translates known global objects/Classes to a string representations\n * - Takes care of Error objects serialization\n * - Optionally limit depth of final output\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function normalize(input: any, depth?: number): any {\n  try {\n    return JSON.parse(JSON.stringify(input, (key: string, value: any) => walk(key, value, depth)));\n  } catch (_oO) {\n    return '**non-serializable**';\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function extractExceptionKeysForMessage(exception: any, maxLength: number = 40): string {\n  const keys = Object.keys(getWalkSource(exception));\n  keys.sort();\n\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\nexport function dropUndefinedKeys<T>(val: T): T {\n  if (isPlainObject(val)) {\n    const obj = val as { [key: string]: any };\n    const rv: { [key: string]: any } = {};\n    for (const key of Object.keys(obj)) {\n      if (typeof obj[key] !== 'undefined') {\n        rv[key] = dropUndefinedKeys(obj[key]);\n      }\n    }\n    return rv as T;\n  }\n\n  if (Array.isArray(val)) {\n    return (val as any[]).map(dropUndefinedKeys) as any;\n  }\n\n  return val;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ExtractedNodeRequestData } from '@sentry/types';\n\nimport { isString } from './is';\nimport { normalize } from './object';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function dynamicRequire(mod: any, request: string): any {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/** Default request keys that'll be used to extract data from the request */\nconst DEFAULT_REQUEST_KEYS = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'];\n\n/**\n * Normalizes data from the request object, accounting for framework differences.\n *\n * @param req The request object from which to extract data\n * @param keys An optional array of keys to include in the normalized data. Defaults to DEFAULT_REQUEST_KEYS if not\n * provided.\n * @returns An object containing normalized request data\n */\nexport function extractNodeRequestData(\n  req: { [key: string]: any },\n  keys: string[] = DEFAULT_REQUEST_KEYS,\n): ExtractedNodeRequestData {\n  // make sure we can safely use dynamicRequire below\n  if (!isNodeEnv()) {\n    throw new Error(\"Can't get node request data outside of a node environment\");\n  }\n\n  const requestData: { [key: string]: any } = {};\n\n  // headers:\n  //   node, express: req.headers\n  //   koa: req.header\n  const headers = (req.headers || req.header || {}) as {\n    host?: string;\n    cookie?: string;\n  };\n  // method:\n  //   node, express, koa: req.method\n  const method = req.method;\n  // host:\n  //   express: req.hostname in > 4 and req.host in < 4\n  //   koa: req.host\n  //   node: req.headers.host\n  const host = req.hostname || req.host || headers.host || '<no host>';\n  // protocol:\n  //   node: <n/a>\n  //   express, koa: req.protocol\n  const protocol =\n    req.protocol === 'https' || req.secure || ((req.socket || {}) as { encrypted?: boolean }).encrypted\n      ? 'https'\n      : 'http';\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa: req.url\n  const originalUrl = (req.originalUrl || req.url || '') as string;\n  // absolute url\n  const absoluteUrl = `${protocol}://${host}${originalUrl}`;\n\n  keys.forEach(key => {\n    switch (key) {\n      case 'headers':\n        requestData.headers = headers;\n        break;\n      case 'method':\n        requestData.method = method;\n        break;\n      case 'url':\n        requestData.url = absoluteUrl;\n        break;\n      case 'cookies':\n        // cookies:\n        //   node, express, koa: req.headers.cookie\n        //   vercel, sails.js, express (w/ cookie middleware): req.cookies\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.cookies = req.cookies || dynamicRequire(module, 'cookie').parse(headers.cookie || '');\n        break;\n      case 'query_string':\n        // query string:\n        //   node: req.url (raw)\n        //   express, koa: req.query\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.query_string = dynamicRequire(module, 'url').parse(originalUrl || '', false).query;\n        break;\n      case 'data':\n        if (method === 'GET' || method === 'HEAD') {\n          break;\n        }\n        // body data:\n        //   node, express, koa: req.body\n        if (req.body !== undefined) {\n          requestData.data = isString(req.body) ? req.body : JSON.stringify(normalize(req.body));\n        }\n        break;\n      default:\n        if ({}.hasOwnProperty.call(req, key)) {\n          requestData[key] = (req as { [key: string]: any })[key];\n        }\n    }\n  });\n\n  return requestData;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Event, Integration, StackFrame, WrappedFunction } from '@sentry/types';\n\nimport { isNodeEnv } from './node';\nimport { snipLine } from './string';\n\n/** Internal */\ninterface SentryGlobal {\n  Sentry?: {\n    Integrations?: Integration[];\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  __SENTRY__: {\n    globalEventProcessors: any;\n    hub: any;\n    logger: any;\n  };\n}\n\nconst fallbackGlobalObject = {};\n\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport function getGlobalObject<T>(): T & SentryGlobal {\n  return (isNodeEnv()\n    ? global\n    : typeof window !== 'undefined'\n    ? window\n    : typeof self !== 'undefined'\n    ? self\n    : fallbackGlobalObject) as T & SentryGlobal;\n}\n\n/**\n * Extended Window interface that allows for Crypto API usage in IE browsers\n */\ninterface MsCryptoWindow extends Window {\n  msCrypto?: Crypto;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n  const global = getGlobalObject() as MsCryptoWindow;\n  const crypto = global.crypto || global.msCrypto;\n\n  if (!(crypto === void 0) && crypto.getRandomValues) {\n    // Use window.crypto API if available\n    const arr = new Uint16Array(8);\n    crypto.getRandomValues(arr);\n\n    // set 4 in byte 7\n    // eslint-disable-next-line no-bitwise\n    arr[3] = (arr[3] & 0xfff) | 0x4000;\n    // set 2 most significant bits of byte 9 to '10'\n    // eslint-disable-next-line no-bitwise\n    arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n    const pad = (num: number): string => {\n      let v = num.toString(16);\n      while (v.length < 4) {\n        v = `0${v}`;\n      }\n      return v;\n    };\n\n    return (\n      pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7])\n    );\n  }\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, c => {\n    // eslint-disable-next-line no-bitwise\n    const r = (Math.random() * 16) | 0;\n    // eslint-disable-next-line no-bitwise\n    const v = c === 'x' ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(\n  url: string,\n): {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n} {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n  if (event.message) {\n    return event.message;\n  }\n  if (event.exception && event.exception.values && event.exception.values[0]) {\n    const exception = event.exception.values[0];\n\n    if (exception.type && exception.value) {\n      return `${exception.type}: ${exception.value}`;\n    }\n    return exception.type || exception.value || event.event_id || '<unknown>';\n  }\n  return event.event_id || '<unknown>';\n}\n\n/** JSDoc */\ninterface ExtensibleConsole extends Console {\n  [key: string]: any;\n}\n\n/** JSDoc */\nexport function consoleSandbox(callback: () => any): any {\n  const global = getGlobalObject<Window>();\n  const levels = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n\n  if (!('console' in global)) {\n    return callback();\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const originalConsole = (global as any).console as ExtensibleConsole;\n  const wrappedLevels: { [key: string]: any } = {};\n\n  // Restore all wrapped console methods\n  levels.forEach(level => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (level in (global as any).console && (originalConsole[level] as WrappedFunction).__sentry_original__) {\n      wrappedLevels[level] = originalConsole[level] as WrappedFunction;\n      originalConsole[level] = (originalConsole[level] as WrappedFunction).__sentry_original__;\n    }\n  });\n\n  // Perform callback manipulations\n  const result = callback();\n\n  // Revert restoration to wrapped state\n  Object.keys(wrappedLevels).forEach(level => {\n    originalConsole[level] = wrappedLevels[level];\n  });\n\n  return result;\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n  event.exception = event.exception || {};\n  event.exception.values = event.exception.values || [];\n  event.exception.values[0] = event.exception.values[0] || {};\n  event.exception.values[0].value = event.exception.values[0].value || value || '';\n  event.exception.values[0].type = event.exception.values[0].type || type || 'Error';\n}\n\n/**\n * Adds exception mechanism to a given event.\n * @param event The event to modify.\n * @param mechanism Mechanism of the mechanism.\n * @hidden\n */\nexport function addExceptionMechanism(\n  event: Event,\n  mechanism: {\n    [key: string]: any;\n  } = {},\n): void {\n  // TODO: Use real type with `keyof Mechanism` thingy and maybe make it better?\n  try {\n    // @ts-ignore Type 'Mechanism | {}' is not assignable to type 'Mechanism | undefined'\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values![0].mechanism = event.exception!.values![0].mechanism || {};\n    Object.keys(mechanism).forEach(key => {\n      // @ts-ignore Mechanism has no index signature\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      event.exception!.values![0].mechanism[key] = mechanism[key];\n    });\n  } catch (_oO) {\n    // no-empty\n  }\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n  try {\n    return document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n  major?: number;\n  minor?: number;\n  patch?: number;\n  prerelease?: string;\n  buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = parseInt(match[1], 10);\n  const minor = parseInt(match[2], 10);\n  const patch = parseInt(match[3], 10);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\nconst defaultRetryAfter = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param now current unix timestamp\n * @param header string representation of 'Retry-After' header\n */\nexport function parseRetryAfterHeader(now: number, header?: string | number | null): number {\n  if (!header) {\n    return defaultRetryAfter;\n  }\n\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return defaultRetryAfter;\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n  const lineno = frame.lineno || 0;\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line: string) => snipLine(line, 0));\n\n  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n  // eslint-disable-next-line no-useless-escape\n  return urlPath.split(/[\\?#]/, 1)[0];\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { consoleSandbox, getGlobalObject } from './misc';\n\n// TODO: Implement different loggers for different environments\nconst global = getGlobalObject<Window | NodeJS.Global>();\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\n/** JSDoc */\nclass Logger {\n  /** JSDoc */\n  private _enabled: boolean;\n\n  /** JSDoc */\n  public constructor() {\n    this._enabled = false;\n  }\n\n  /** JSDoc */\n  public disable(): void {\n    this._enabled = false;\n  }\n\n  /** JSDoc */\n  public enable(): void {\n    this._enabled = true;\n  }\n\n  /** JSDoc */\n  public log(...args: any[]): void {\n    if (!this._enabled) {\n      return;\n    }\n    consoleSandbox(() => {\n      global.console.log(`${PREFIX}[Log]: ${args.join(' ')}`);\n    });\n  }\n\n  /** JSDoc */\n  public warn(...args: any[]): void {\n    if (!this._enabled) {\n      return;\n    }\n    consoleSandbox(() => {\n      global.console.warn(`${PREFIX}[Warn]: ${args.join(' ')}`);\n    });\n  }\n\n  /** JSDoc */\n  public error(...args: any[]): void {\n    if (!this._enabled) {\n      return;\n    }\n    consoleSandbox(() => {\n      global.console.error(`${PREFIX}[Error]: ${args.join(' ')}`);\n    });\n  }\n}\n\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nglobal.__SENTRY__ = global.__SENTRY__ || {};\nconst logger = (global.__SENTRY__.logger as Logger) || (global.__SENTRY__.logger = new Logger());\n\nexport { logger };\n", "// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://raw.githubusercontent.com/calvinmetcalf/rollup-plugin-node-builtins/master/src/es6/path.js\n\n/** JSDoc */\nfunction normalizeArray(parts: string[], allowAboveRoot?: boolean): string[] {\n  // if the path tries to go above the root, `up` ends up > 0\n  let up = 0;\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      // eslint-disable-next-line no-plusplus\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      // eslint-disable-next-line no-plusplus\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    // eslint-disable-next-line no-plusplus\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^/]+?|)(\\.[^./]*|))(?:[/]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n  const parts = splitPathRe.exec(filename);\n  return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nexport function resolve(...args: string[]): string {\n  let resolvedPath = '';\n  let resolvedAbsolute = false;\n\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : '/';\n\n    // Skip empty entries\n    if (!path) {\n      continue;\n    }\n\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(\n    resolvedPath.split('/').filter(p => !!p),\n    !resolvedAbsolute,\n  ).join('/');\n\n  return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr: string[]): string[] {\n  let start = 0;\n  for (; start < arr.length; start++) {\n    if (arr[start] !== '') {\n      break;\n    }\n  }\n\n  let end = arr.length - 1;\n  for (; end >= 0; end--) {\n    if (arr[end] !== '') {\n      break;\n    }\n  }\n\n  if (start > end) {\n    return [];\n  }\n  return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nexport function relative(from: string, to: string): string {\n  /* eslint-disable no-param-reassign */\n  from = resolve(from).substr(1);\n  to = resolve(to).substr(1);\n  /* eslint-enable no-param-reassign */\n\n  const fromParts = trim(from.split('/'));\n  const toParts = trim(to.split('/'));\n\n  const length = Math.min(fromParts.length, toParts.length);\n  let samePartsLength = length;\n  for (let i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  let outputParts = [];\n  for (let i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nexport function normalizePath(path: string): string {\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSlash = path.substr(-1) === '/';\n\n  // Normalize the path\n  let normalizedPath = normalizeArray(\n    path.split('/').filter(p => !!p),\n    !isPathAbsolute,\n  ).join('/');\n\n  if (!normalizedPath && !isPathAbsolute) {\n    normalizedPath = '.';\n  }\n  if (normalizedPath && trailingSlash) {\n    normalizedPath += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nexport function isAbsolute(path: string): boolean {\n  return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nexport function join(...args: string[]): string {\n  return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nexport function dirname(path: string): string {\n  const result = splitPath(path);\n  const root = result[0];\n  let dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\n/** JSDoc */\nexport function basename(path: string, ext?: string): string {\n  let f = splitPath(path)[2];\n  if (ext && f.substr(ext.length * -1) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n}\n", "/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nenum States {\n  /** Pending */\n  PENDING = 'PENDING',\n  /** Resolved / OK */\n  RESOLVED = 'RESOLVED',\n  /** Rejected / Error */\n  REJECTED = 'REJECTED',\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n  private _state: States = States.PENDING;\n  private _handlers: Array<{\n    done: boolean;\n    onfulfilled?: ((value: T) => T | PromiseLike<T>) | null;\n    onrejected?: ((reason: any) => any) | null;\n  }> = [];\n  private _value: any;\n\n  public constructor(\n    executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n  ) {\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n  public static resolve<T>(value: T | PromiseLike<T>): PromiseLike<T> {\n    return new SyncPromise(resolve => {\n      resolve(value);\n    });\n  }\n\n  /** JSDoc */\n  public static reject<T = never>(reason?: any): PromiseLike<T> {\n    return new SyncPromise((_, reject) => {\n      reject(reason);\n    });\n  }\n\n  /** JSDoc */\n  public static all<U = any>(collection: Array<U | PromiseLike<U>>): PromiseLike<U[]> {\n    return new SyncPromise<U[]>((resolve, reject) => {\n      if (!Array.isArray(collection)) {\n        reject(new TypeError(`Promise.all requires an array as input.`));\n        return;\n      }\n\n      if (collection.length === 0) {\n        resolve([]);\n        return;\n      }\n\n      let counter = collection.length;\n      const resolvedCollection: U[] = [];\n\n      collection.forEach((item, index) => {\n        SyncPromise.resolve(item)\n          .then(value => {\n            resolvedCollection[index] = value;\n            counter -= 1;\n\n            if (counter !== 0) {\n              return;\n            }\n            resolve(resolvedCollection);\n          })\n          .then(null, reject);\n      });\n    });\n  }\n\n  /** JSDoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return new SyncPromise((resolve, reject) => {\n      this._attachHandler({\n        done: false,\n        onfulfilled: result => {\n          if (!onfulfilled) {\n            // TODO: \u00AF\\_(\u30C4)_/\u00AF\n            // TODO: FIXME\n            resolve(result as any);\n            return;\n          }\n          try {\n            resolve(onfulfilled(result));\n            return;\n          } catch (e) {\n            reject(e);\n            return;\n          }\n        },\n        onrejected: reason => {\n          if (!onrejected) {\n            reject(reason);\n            return;\n          }\n          try {\n            resolve(onrejected(reason));\n            return;\n          } catch (e) {\n            reject(e);\n            return;\n          }\n        },\n      });\n    });\n  }\n\n  /** JSDoc */\n  public catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): PromiseLike<T | TResult> {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\n  public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n    return new SyncPromise<TResult>((resolve, reject) => {\n      let val: TResult | any;\n      let isRejected: boolean;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve((val as unknown) as any);\n      });\n    });\n  }\n\n  /** JSDoc */\n  public toString(): string {\n    return '[object SyncPromise]';\n  }\n\n  /** JSDoc */\n  private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n    this._setResult(States.RESOLVED, value);\n  };\n\n  /** JSDoc */\n  private readonly _reject = (reason?: any) => {\n    this._setResult(States.REJECTED, reason);\n  };\n\n  /** JSDoc */\n  private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      (value as PromiseLike<T>).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };\n\n  // TODO: FIXME\n  /** JSDoc */\n  private readonly _attachHandler = (handler: {\n    /** JSDoc */\n    done: boolean;\n    /** JSDoc */\n    onfulfilled?(value: T): any;\n    /** JSDoc */\n    onrejected?(reason: any): any;\n  }) => {\n    this._handlers = this._handlers.concat(handler);\n    this._executeHandlers();\n  };\n\n  /** JSDoc */\n  private readonly _executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler.done) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        if (handler.onfulfilled) {\n          // eslint-disable-next-line @typescript-eslint/no-floating-promises\n          handler.onfulfilled((this._value as unknown) as any);\n        }\n      }\n\n      if (this._state === States.REJECTED) {\n        if (handler.onrejected) {\n          handler.onrejected(this._value);\n        }\n      }\n\n      handler.done = true;\n    });\n  };\n}\n\nexport { SyncPromise };\n", "import { SentryError } from './error';\nimport { SyncPromise } from './syncpromise';\n\n/** A simple queue that holds promises. */\nexport class PromiseBuffer<T> {\n  /** Internal set of queued Promises */\n  private readonly _buffer: Array<PromiseLike<T>> = [];\n\n  public constructor(protected _limit?: number) {}\n\n  /**\n   * Says if the buffer is ready to take more requests\n   */\n  public isReady(): boolean {\n    return this._limit === undefined || this.length() < this._limit;\n  }\n\n  /**\n   * Add a promise to the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns The original promise.\n   */\n  public add(task: PromiseLike<T>): PromiseLike<T> {\n    if (!this.isReady()) {\n      return SyncPromise.reject(new SentryError('Not adding Promise due to buffer limit reached.'));\n    }\n    if (this._buffer.indexOf(task) === -1) {\n      this._buffer.push(task);\n    }\n    task\n      .then(() => this.remove(task))\n      .then(null, () =>\n        this.remove(task).then(null, () => {\n          // We have to add this catch here otherwise we have an unhandledPromiseRejection\n          // because it's a new Promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Remove a promise to the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  public remove(task: PromiseLike<T>): PromiseLike<T> {\n    const removedTask = this._buffer.splice(this._buffer.indexOf(task), 1)[0];\n    return removedTask;\n  }\n\n  /**\n   * This function returns the number of unresolved promises in the queue.\n   */\n  public length(): number {\n    return this._buffer.length;\n  }\n\n  /**\n   * This will drain the whole queue, returns true if queue is empty or drained.\n   * If timeout is provided and the queue takes longer to drain, the promise still resolves but with false.\n   *\n   * @param timeout Number in ms to wait until it resolves with false.\n   */\n  public drain(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise<boolean>(resolve => {\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n      SyncPromise.all(this._buffer)\n        .then(() => {\n          clearTimeout(capturedSetTimeout);\n          resolve(true);\n        })\n        .then(null, () => {\n          resolve(true);\n        });\n    });\n  }\n}\n", "import { getGlobalObject } from './misc';\nimport { dynamicRequire, isNodeEnv } from './node';\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\ninterface TimestampSource {\n  nowSeconds(): number;\n}\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nconst dateTimestampSource: TimestampSource = {\n  nowSeconds: () => Date.now() / 1000,\n};\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high resolution monotonic clock.\n */\ninterface Performance {\n  /**\n   * The millisecond timestamp at which measurement began, measured in Unix time.\n   */\n  timeOrigin: number;\n  /**\n   * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n   */\n  now(): number;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance(): Performance | undefined {\n  const { performance } = getGlobalObject<Window>();\n  if (!performance || !performance.now) {\n    return undefined;\n  }\n\n  // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n  //\n  // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n  // performance.now() gives a date arbitrarily in the past.\n  //\n  // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n  // undefined.\n  //\n  // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n  // interact with data coming out of performance entries.\n  //\n  // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n  // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n  // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n  // observed skews that can be as long as days, weeks or months.\n  //\n  // See https://github.com/getsentry/sentry-javascript/issues/2590.\n  //\n  // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n  // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n  // transactions of long-lived web pages.\n  const timeOrigin = Date.now() - performance.now();\n\n  return {\n    now: () => performance.now(),\n    timeOrigin,\n  };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance(): Performance | undefined {\n  try {\n    const perfHooks = dynamicRequire(module, 'perf_hooks') as { performance: Performance };\n    return perfHooks.performance;\n  } catch (_) {\n    return undefined;\n  }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nconst platformPerformance: Performance | undefined = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nconst timestampSource: TimestampSource =\n  platformPerformance === undefined\n    ? dateTimestampSource\n    : {\n        nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n      };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport const dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n\n// Re-exported with an old name for backwards-compatibility.\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nexport const usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n  const { performance } = getGlobalObject<Window>();\n  if (!performance) {\n    return undefined;\n  }\n  if (performance.timeOrigin) {\n    return performance.timeOrigin;\n  }\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  return (performance.timing && performance.timing.navigationStart) || Date.now();\n})();\n", "/* eslint-disable max-lines */\nimport {\n  Breadcrumb,\n  CaptureContext,\n  Context,\n  Contexts,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  Primitive,\n  Scope as ScopeInterface,\n  ScopeContext,\n  Severity,\n  Span,\n  Transaction,\n  User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, getGlobalObject, isPlainObject, isThenable, SyncPromise } from '@sentry/utils';\n\nimport { Session } from './session';\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n  /** Flag if notifiying is happening. */\n  protected _notifyingListeners: boolean = false;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void> = [];\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n  protected _eventProcessors: EventProcessor[] = [];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[] = [];\n\n  /** User */\n  protected _user: User = {};\n\n  /** Tags */\n  protected _tags: { [key: string]: Primitive } = {};\n\n  /** Extra */\n  protected _extra: Extras = {};\n\n  /** Contexts */\n  protected _contexts: Contexts = {};\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  protected _level?: Severity;\n\n  /** Transaction Name */\n  protected _transactionName?: string;\n\n  /** Span */\n  protected _span?: Span;\n\n  /** Session */\n  protected _session?: Session;\n\n  /**\n   * Inherit values from the parent scope.\n   * @param scope to clone.\n   */\n  public static clone(scope?: Scope): Scope {\n    const newScope = new Scope();\n    if (scope) {\n      newScope._breadcrumbs = [...scope._breadcrumbs];\n      newScope._tags = { ...scope._tags };\n      newScope._extra = { ...scope._extra };\n      newScope._contexts = { ...scope._contexts };\n      newScope._user = scope._user;\n      newScope._level = scope._level;\n      newScope._span = scope._span;\n      newScope._session = scope._session;\n      newScope._transactionName = scope._transactionName;\n      newScope._fingerprint = scope._fingerprint;\n      newScope._eventProcessors = [...scope._eventProcessors];\n    }\n    return newScope;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): this {\n    this._user = user || {};\n    if (this._session) {\n      this._session.update({ user });\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getUser(): User | undefined {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): this {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): this {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): this {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): this {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setLevel(level: Severity): this {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTransactionName(name?: string): this {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Can be removed in major version.\n   * @deprecated in favor of {@link this.setTransactionName}\n   */\n  public setTransaction(name?: string): this {\n    return this.setTransactionName(name);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(key: string, context: Context | null): this {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts = { ...this._contexts, [key]: context };\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSpan(span?: Span): this {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getSpan(): Span | undefined {\n    return this._span;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransaction(): Transaction | undefined {\n    // often, this span will be a transaction, but it's not guaranteed to be\n    const span = this.getSpan() as undefined | (Span & { spanRecorder: { spans: Span[] } });\n\n    // try it the new way first\n    if (span?.transaction) {\n      return span?.transaction;\n    }\n\n    // fallback to the old way (known bug: this only finds transactions with sampled = true)\n    if (span?.spanRecorder?.spans[0]) {\n      return span.spanRecorder.spans[0] as Transaction;\n    }\n\n    // neither way found a transaction\n    return undefined;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSession(session?: Session): this {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getSession(): Session | undefined {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public update(captureContext?: CaptureContext): this {\n    if (!captureContext) {\n      return this;\n    }\n\n    if (typeof captureContext === 'function') {\n      const updatedScope = (captureContext as <T>(scope: T) => T)(this);\n      return updatedScope instanceof Scope ? updatedScope : this;\n    }\n\n    if (captureContext instanceof Scope) {\n      this._tags = { ...this._tags, ...captureContext._tags };\n      this._extra = { ...this._extra, ...captureContext._extra };\n      this._contexts = { ...this._contexts, ...captureContext._contexts };\n      if (captureContext._user && Object.keys(captureContext._user).length) {\n        this._user = captureContext._user;\n      }\n      if (captureContext._level) {\n        this._level = captureContext._level;\n      }\n      if (captureContext._fingerprint) {\n        this._fingerprint = captureContext._fingerprint;\n      }\n    } else if (isPlainObject(captureContext)) {\n      // eslint-disable-next-line no-param-reassign\n      captureContext = captureContext as ScopeContext;\n      this._tags = { ...this._tags, ...captureContext.tags };\n      this._extra = { ...this._extra, ...captureContext.extra };\n      this._contexts = { ...this._contexts, ...captureContext.contexts };\n      if (captureContext.user) {\n        this._user = captureContext.user;\n      }\n      if (captureContext.level) {\n        this._level = captureContext.level;\n      }\n      if (captureContext.fingerprint) {\n        this._fingerprint = captureContext.fingerprint;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clear(): this {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    this._breadcrumbs =\n      maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0\n        ? [...this._breadcrumbs, mergedBreadcrumb].slice(-maxBreadcrumbs)\n        : [...this._breadcrumbs, mergedBreadcrumb];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Applies the current context and fingerprint to the event.\n   * Note that breadcrumbs will be added by the client.\n   * Also if the event has already breadcrumbs on it, we do not merge them.\n   * @param event Event\n   * @param hint May contain additional informartion about the original exception.\n   * @hidden\n   */\n  public applyToEvent(event: Event, hint?: EventHint): PromiseLike<Event | null> {\n    if (this._extra && Object.keys(this._extra).length) {\n      event.extra = { ...this._extra, ...event.extra };\n    }\n    if (this._tags && Object.keys(this._tags).length) {\n      event.tags = { ...this._tags, ...event.tags };\n    }\n    if (this._user && Object.keys(this._user).length) {\n      event.user = { ...this._user, ...event.user };\n    }\n    if (this._contexts && Object.keys(this._contexts).length) {\n      event.contexts = { ...this._contexts, ...event.contexts };\n    }\n    if (this._level) {\n      event.level = this._level;\n    }\n    if (this._transactionName) {\n      event.transaction = this._transactionName;\n    }\n    // We want to set the trace context for normal events only if there isn't already\n    // a trace context on the event. There is a product feature in place where we link\n    // errors with transaction and it relys on that.\n    if (this._span) {\n      event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n      const transactionName = this._span.transaction?.name;\n      if (transactionName) {\n        event.tags = { transaction: transactionName, ...event.tags };\n      }\n    }\n\n    this._applyFingerprint(event);\n\n    event.breadcrumbs = [...(event.breadcrumbs || []), ...this._breadcrumbs];\n    event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n\n    return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n  }\n\n  /**\n   * This will be called after {@link applyToEvent} is finished.\n   */\n  protected _notifyEventProcessors(\n    processors: EventProcessor[],\n    event: Event | null,\n    hint?: EventHint,\n    index: number = 0,\n  ): PromiseLike<Event | null> {\n    return new SyncPromise<Event | null>((resolve, reject) => {\n      const processor = processors[index];\n      if (event === null || typeof processor !== 'function') {\n        resolve(event);\n      } else {\n        const result = processor({ ...event }, hint) as Event | null;\n        if (isThenable(result)) {\n          (result as PromiseLike<Event | null>)\n            .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n            .then(null, reject);\n        } else {\n          this._notifyEventProcessors(processors, result, hint, index + 1)\n            .then(resolve)\n            .then(null, reject);\n        }\n      }\n    });\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n\n  /**\n   * Applies fingerprint from the scope to the event if there's one,\n   * uses message if there's one instead or get rid of empty fingerprint\n   */\n  private _applyFingerprint(event: Event): void {\n    // Make sure it's an array first and we actually have something in place\n    event.fingerprint = event.fingerprint\n      ? Array.isArray(event.fingerprint)\n        ? event.fingerprint\n        : [event.fingerprint]\n      : [];\n\n    // If we have something on the scope, then merge it with event\n    if (this._fingerprint) {\n      event.fingerprint = event.fingerprint.concat(this._fingerprint);\n    }\n\n    // If we have no data at all, remove empty array default\n    if (event.fingerprint && !event.fingerprint.length) {\n      delete event.fingerprint;\n    }\n  }\n}\n\n/**\n * Retruns the global event processors.\n */\nfunction getGlobalEventProcessors(): EventProcessor[] {\n  /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access  */\n  const global = getGlobalObject<any>();\n  global.__SENTRY__ = global.__SENTRY__ || {};\n  global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n  return global.__SENTRY__.globalEventProcessors;\n  /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n  getGlobalEventProcessors().push(callback);\n}\n", "import { Session as SessionInterface, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, uuid4 } from '@sentry/utils';\n\n/**\n * @inheritdoc\n */\nexport class Session implements SessionInterface {\n  public userAgent?: string;\n  public errors: number = 0;\n  public release?: string;\n  public sid: string = uuid4();\n  public did?: string;\n  public timestamp: number = Date.now();\n  public started: number = Date.now();\n  public duration: number = 0;\n  public status: SessionStatus = SessionStatus.Ok;\n  public environment?: string;\n  public ipAddress?: string;\n\n  constructor(context?: Omit<SessionContext, 'started' | 'status'>) {\n    if (context) {\n      this.update(context);\n    }\n  }\n\n  /** JSDoc */\n  // eslint-disable-next-line complexity\n  update(context: SessionContext = {}): void {\n    if (context.user) {\n      if (context.user.ip_address) {\n        this.ipAddress = context.user.ip_address;\n      }\n\n      if (!context.did) {\n        this.did = context.user.id || context.user.email || context.user.username;\n      }\n    }\n\n    this.timestamp = context.timestamp || Date.now();\n\n    if (context.sid) {\n      // Good enough uuid validation. \u2014 Kamil\n      this.sid = context.sid.length === 32 ? context.sid : uuid4();\n    }\n    if (context.did) {\n      this.did = `${context.did}`;\n    }\n    if (typeof context.started === 'number') {\n      this.started = context.started;\n    }\n    if (typeof context.duration === 'number') {\n      this.duration = context.duration;\n    } else {\n      this.duration = this.timestamp - this.started;\n    }\n    if (context.release) {\n      this.release = context.release;\n    }\n    if (context.environment) {\n      this.environment = context.environment;\n    }\n    if (context.ipAddress) {\n      this.ipAddress = context.ipAddress;\n    }\n    if (context.userAgent) {\n      this.userAgent = context.userAgent;\n    }\n    if (typeof context.errors === 'number') {\n      this.errors = context.errors;\n    }\n    if (context.status) {\n      this.status = context.status;\n    }\n  }\n\n  /** JSDoc */\n  close(status?: Exclude<SessionStatus, SessionStatus.Ok>): void {\n    if (status) {\n      this.update({ status });\n    } else if (this.status === SessionStatus.Ok) {\n      this.update({ status: SessionStatus.Exited });\n    } else {\n      this.update();\n    }\n  }\n\n  /** JSDoc */\n  toJSON(): {\n    init: boolean;\n    sid: string;\n    did?: string;\n    timestamp: string;\n    started: string;\n    duration: number;\n    status: SessionStatus;\n    errors: number;\n    attrs?: {\n      release?: string;\n      environment?: string;\n      user_agent?: string;\n      ip_address?: string;\n    };\n  } {\n    return dropUndefinedKeys({\n      sid: `${this.sid}`,\n      init: true,\n      started: new Date(this.started).toISOString(),\n      timestamp: new Date(this.timestamp).toISOString(),\n      status: this.status,\n      errors: this.errors,\n      did: typeof this.did === 'number' || typeof this.did === 'string' ? `${this.did}` : undefined,\n      duration: this.duration,\n      attrs: dropUndefinedKeys({\n        release: this.release,\n        environment: this.environment,\n        ip_address: this.ipAddress,\n        user_agent: this.userAgent,\n      }),\n    });\n  }\n}\n", "/* eslint-disable max-lines */\nimport {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  Hub as HubInterface,\n  Integration,\n  IntegrationClass,\n  Primitive,\n  SessionContext,\n  Severity,\n  Span,\n  SpanContext,\n  Transaction,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { consoleSandbox, dateTimestampInSeconds, getGlobalObject, isNodeEnv, logger, uuid4 } from '@sentry/utils';\n\nimport { Carrier, DomainAsCarrier, Layer } from './interfaces';\nimport { Scope } from './scope';\nimport { Session } from './session';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = 3;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Absolute maximum number of breadcrumbs added to an event. The\n * `maxBreadcrumbs` option cannot be higher than this value.\n */\nconst MAX_BREADCRUMBS = 100;\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n  /** Is a {@link Layer}[] containing the client and scope */\n  private readonly _stack: Layer[] = [{}];\n\n  /** Contains the last event id of a captured event.  */\n  private _lastEventId?: string;\n\n  /**\n   * Creates a new instance of the hub, will push one {@link Layer} into the\n   * internal stack on creation.\n   *\n   * @param client bound to the hub.\n   * @param scope bound to the hub.\n   * @param version number, higher number means higher priority.\n   */\n  public constructor(client?: Client, scope: Scope = new Scope(), private readonly _version: number = API_VERSION) {\n    this.getStackTop().scope = scope;\n    this.bindClient(client);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public isOlderThan(version: number): boolean {\n    return this._version < version;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public bindClient(client?: Client): void {\n    const top = this.getStackTop();\n    top.client = client;\n    if (client && client.setupIntegrations) {\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public pushScope(): Scope {\n    // We want to clone the content of prev scope\n    const scope = Scope.clone(this.getScope());\n    this.getStack().push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public popScope(): boolean {\n    if (this.getStack().length <= 1) return false;\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public withScope(callback: (scope: Scope) => void): void {\n    const scope = this.pushScope();\n    try {\n      callback(scope);\n    } finally {\n      this.popScope();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this.getStackTop().client as C;\n  }\n\n  /** Returns the scope of the top stack. */\n  public getScope(): Scope | undefined {\n    return this.getStackTop().scope;\n  }\n\n  /** Returns the scope stack for domains or the process. */\n  public getStack(): Layer[] {\n    return this._stack;\n  }\n\n  /** Returns the topmost scope layer in the order domain > local > process. */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public captureException(exception: any, hint?: EventHint): string {\n    const eventId = (this._lastEventId = uuid4());\n    let finalHint = hint;\n\n    // If there's no explicit hint provided, mimick the same thing that would happen\n    // in the minimal itself to create a consistent behavior.\n    // We don't do this in the client, as it's the lowest level API, and doing this,\n    // would prevent user from having full control over direct calls.\n    if (!hint) {\n      let syntheticException: Error;\n      try {\n        throw new Error('Sentry syntheticException');\n      } catch (exception) {\n        syntheticException = exception as Error;\n      }\n      finalHint = {\n        originalException: exception,\n        syntheticException,\n      };\n    }\n\n    this._invokeClient('captureException', exception, {\n      ...finalHint,\n      event_id: eventId,\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(message: string, level?: Severity, hint?: EventHint): string {\n    const eventId = (this._lastEventId = uuid4());\n    let finalHint = hint;\n\n    // If there's no explicit hint provided, mimick the same thing that would happen\n    // in the minimal itself to create a consistent behavior.\n    // We don't do this in the client, as it's the lowest level API, and doing this,\n    // would prevent user from having full control over direct calls.\n    if (!hint) {\n      let syntheticException: Error;\n      try {\n        throw new Error(message);\n      } catch (exception) {\n        syntheticException = exception as Error;\n      }\n      finalHint = {\n        originalException: message,\n        syntheticException,\n      };\n    }\n\n    this._invokeClient('captureMessage', message, level, {\n      ...finalHint,\n      event_id: eventId,\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = (this._lastEventId = uuid4());\n    this._invokeClient('captureEvent', event, {\n      ...hint,\n      event_id: eventId,\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    const { scope, client } = this.getStackTop();\n\n    if (!scope || !client) return;\n\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): void {\n    const scope = this.getScope();\n    if (scope) scope.setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): void {\n    const scope = this.getScope();\n    if (scope) scope.setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): void {\n    const scope = this.getScope();\n    if (scope) scope.setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): void {\n    const scope = this.getScope();\n    if (scope) scope.setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): void {\n    const scope = this.getScope();\n    if (scope) scope.setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setContext(name: string, context: { [key: string]: any } | null): void {\n    const scope = this.getScope();\n    if (scope) scope.setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public configureScope(callback: (scope: Scope) => void): void {\n    const { scope, client } = this.getStackTop();\n    if (scope && client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public run(callback: (hub: Hub) => void): void {\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startSpan(context: SpanContext): Span {\n    return this._callExtensionMethod('startSpan', context);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n    return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public traceHeaders(): { [key: string]: string } {\n    return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startSession(context?: SessionContext): Session {\n    // End existing session if there's one\n    this.endSession();\n\n    const { scope, client } = this.getStackTop();\n    const { release, environment } = (client && client.getOptions()) || {};\n    const session = new Session({\n      release,\n      environment,\n      ...(scope && { user: scope.getUser() }),\n      ...context,\n    });\n    if (scope) {\n      scope.setSession(session);\n    }\n    return session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public endSession(): void {\n    const { scope, client } = this.getStackTop();\n    if (!scope) return;\n\n    const session = scope.getSession && scope.getSession();\n    if (session) {\n      session.close();\n      if (client && client.captureSession) {\n        client.captureSession(session);\n      }\n      scope.setSession();\n    }\n  }\n\n  /**\n   * Internal helper function to call a method on the top client if it exists.\n   *\n   * @param method The method to call on the client.\n   * @param args Arguments to pass to the client function.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _invokeClient<M extends keyof Client>(method: M, ...args: any[]): void {\n    const { scope, client } = this.getStackTop();\n    if (client && client[method]) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n      (client as any)[method](...args, scope);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/** Returns the global shim registry. */\nexport function getMainCarrier(): Carrier {\n  const carrier = getGlobalObject();\n  carrier.__SENTRY__ = carrier.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return carrier;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub: Hub): Hub {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub(): Hub {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  // If there's no hub, or its an old API, assign a new one\n  if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Prefer domains over global if they are there (applicable only to Node environment)\n  if (isNodeEnv()) {\n    return getHubFromActiveDomain(registry);\n  }\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * Returns the active domain, if one exists\n *\n * @returns The domain, or undefined if there is no active domain\n */\nexport function getActiveDomain(): DomainAsCarrier | undefined {\n  const sentry = getMainCarrier().__SENTRY__;\n\n  return sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n}\n\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry: Carrier): Hub {\n  try {\n    const activeDomain = getActiveDomain();\n\n    // If there's no active domain, just return global hub\n    if (!activeDomain) {\n      return getHubFromCarrier(registry);\n    }\n\n    // If there's no hub on current domain, or it's an old API, assign a new one\n    if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n      const registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n      setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n    }\n\n    // Return hub that lives on a domain\n    return getHubFromCarrier(activeDomain);\n  } catch (_Oo) {\n    // Return hub that lives on a global object\n    return getHubFromCarrier(registry);\n  }\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n  if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) return carrier.__SENTRY__.hub;\n  carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n  carrier.__SENTRY__.hub = new Hub();\n  return carrier.__SENTRY__.hub;\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n  if (!carrier) return false;\n  carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n  carrier.__SENTRY__.hub = hub;\n  return true;\n}\n", "import { getCurrentHub, Hub, Scope } from '@sentry/hub';\nimport {\n  Breadcrumb,\n  CaptureContext,\n  CustomSamplingContext,\n  Event,\n  Extra,\n  Extras,\n  Primitive,\n  Severity,\n  Transaction,\n  TransactionContext,\n  User,\n} from '@sentry/types';\n\n/**\n * This calls a function on the current hub.\n * @param method function to call on hub.\n * @param args to pass to function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction callOnHub<T>(method: string, ...args: any[]): T {\n  const hub = getCurrentHub();\n  if (hub && hub[method as keyof Hub]) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return (hub[method as keyof Hub] as any)(...args);\n  }\n  throw new Error(`No hub defined or ${method} was not found on the hub, please open a bug report.`);\n}\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @returns The generated eventId.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function captureException(exception: any, captureContext?: CaptureContext): string {\n  let syntheticException: Error;\n  try {\n    throw new Error('Sentry syntheticException');\n  } catch (exception) {\n    syntheticException = exception as Error;\n  }\n  return callOnHub('captureException', exception, {\n    captureContext,\n    originalException: exception,\n    syntheticException,\n  });\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param level Define the level of the message.\n * @returns The generated eventId.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | Severity): string {\n  let syntheticException: Error;\n  try {\n    throw new Error(message);\n  } catch (exception) {\n    syntheticException = exception as Error;\n  }\n\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n\n  return callOnHub('captureMessage', message, level, {\n    originalException: message,\n    syntheticException,\n    ...context,\n  });\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\nexport function captureEvent(event: Event): string {\n  return callOnHub('captureEvent', event);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback: (scope: Scope) => void): void {\n  callOnHub<void>('configureScope', callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb): void {\n  callOnHub<void>('addBreadcrumb', breadcrumb);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name: string, context: { [key: string]: any } | null): void {\n  callOnHub<void>('setContext', name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n  callOnHub<void>('setExtras', extras);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n  callOnHub<void>('setTags', tags);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n  callOnHub<void>('setExtra', key, extra);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n  callOnHub<void>('setTag', key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n  callOnHub<void>('setUser', user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope(callback: (scope: Scope) => void): void {\n  callOnHub<void>('withScope', callback);\n}\n\n/**\n * Calls a function on the latest client. Use this with caution, it's meant as\n * in \"internal\" helper so we don't need to expose every possible function in\n * the shim. It is not guaranteed that the client actually implements the\n * function.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/fontend.\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function _callOnClient(method: string, ...args: any[]): void {\n  callOnHub<void>('_invokeClient', method, ...args);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nexport function startTransaction(\n  context: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): Transaction {\n  return callOnHub('startTransaction', { ...context }, customSamplingContext);\n}\n", "import { DsnLike } from '@sentry/types';\nimport { Dsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Helper class to provide urls to different Sentry endpoints. */\nexport class API {\n  /** The internally used Dsn object. */\n  private readonly _dsnObject: Dsn;\n  /** Create a new instance of API */\n  public constructor(public dsn: DsnLike) {\n    this._dsnObject = new Dsn(dsn);\n  }\n\n  /** Returns the Dsn object. */\n  public getDsn(): Dsn {\n    return this._dsnObject;\n  }\n\n  /** Returns the prefix to construct Sentry ingestion API endpoints. */\n  public getBaseApiEndpoint(): string {\n    const dsn = this._dsnObject;\n    const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n    const port = dsn.port ? `:${dsn.port}` : '';\n    return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n  }\n\n  /** Returns the store endpoint URL. */\n  public getStoreEndpoint(): string {\n    return this._getIngestEndpoint('store');\n  }\n\n  /**\n   * Returns the store endpoint URL with auth in the query string.\n   *\n   * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n   */\n  public getStoreEndpointWithUrlEncodedAuth(): string {\n    return `${this.getStoreEndpoint()}?${this._encodedAuth()}`;\n  }\n\n  /**\n   * Returns the envelope endpoint URL with auth in the query string.\n   *\n   * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n   */\n  public getEnvelopeEndpointWithUrlEncodedAuth(): string {\n    return `${this._getEnvelopeEndpoint()}?${this._encodedAuth()}`;\n  }\n\n  /** Returns only the path component for the store endpoint. */\n  public getStoreEndpointPath(): string {\n    const dsn = this._dsnObject;\n    return `${dsn.path ? `/${dsn.path}` : ''}/api/${dsn.projectId}/store/`;\n  }\n\n  /**\n   * Returns an object that can be used in request headers.\n   * This is needed for node and the old /store endpoint in sentry\n   */\n  public getRequestHeaders(clientName: string, clientVersion: string): { [key: string]: string } {\n    const dsn = this._dsnObject;\n    const header = [`Sentry sentry_version=${SENTRY_API_VERSION}`];\n    header.push(`sentry_client=${clientName}/${clientVersion}`);\n    header.push(`sentry_key=${dsn.user}`);\n    if (dsn.pass) {\n      header.push(`sentry_secret=${dsn.pass}`);\n    }\n    return {\n      'Content-Type': 'application/json',\n      'X-Sentry-Auth': header.join(', '),\n    };\n  }\n\n  /** Returns the url to the report dialog endpoint. */\n  public getReportDialogEndpoint(\n    dialogOptions: {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      [key: string]: any;\n      user?: { name?: string; email?: string };\n    } = {},\n  ): string {\n    const dsn = this._dsnObject;\n    const endpoint = `${this.getBaseApiEndpoint()}embed/error-page/`;\n\n    const encodedOptions = [];\n    encodedOptions.push(`dsn=${dsn.toString()}`);\n    for (const key in dialogOptions) {\n      if (key === 'dsn') {\n        continue;\n      }\n\n      if (key === 'user') {\n        if (!dialogOptions.user) {\n          continue;\n        }\n        if (dialogOptions.user.name) {\n          encodedOptions.push(`name=${encodeURIComponent(dialogOptions.user.name)}`);\n        }\n        if (dialogOptions.user.email) {\n          encodedOptions.push(`email=${encodeURIComponent(dialogOptions.user.email)}`);\n        }\n      } else {\n        encodedOptions.push(`${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`);\n      }\n    }\n    if (encodedOptions.length) {\n      return `${endpoint}?${encodedOptions.join('&')}`;\n    }\n\n    return endpoint;\n  }\n\n  /** Returns the envelope endpoint URL. */\n  private _getEnvelopeEndpoint(): string {\n    return this._getIngestEndpoint('envelope');\n  }\n\n  /** Returns the ingest API endpoint for target. */\n  private _getIngestEndpoint(target: 'store' | 'envelope'): string {\n    const base = this.getBaseApiEndpoint();\n    const dsn = this._dsnObject;\n    return `${base}${dsn.projectId}/${target}/`;\n  }\n\n  /** Returns a URL-encoded string with auth config suitable for a query string. */\n  private _encodedAuth(): string {\n    const dsn = this._dsnObject;\n    const auth = {\n      // We send only the minimum set of required information. See\n      // https://github.com/getsentry/sentry-javascript/issues/2572.\n      sentry_key: dsn.user,\n      sentry_version: SENTRY_API_VERSION,\n    };\n    return urlEncode(auth);\n  }\n}\n", "import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { Integration, Options } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport interface IntegrationIndex {\n  [key: string]: Integration;\n}\n\n/** Gets integration to install */\nexport function getIntegrationsToSetup(options: Options): Integration[] {\n  const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];\n  const userIntegrations = options.integrations;\n  let integrations: Integration[] = [];\n  if (Array.isArray(userIntegrations)) {\n    const userIntegrationsNames = userIntegrations.map(i => i.name);\n    const pickedIntegrationsNames: string[] = [];\n\n    // Leave only unique default integrations, that were not overridden with provided user integrations\n    defaultIntegrations.forEach(defaultIntegration => {\n      if (\n        userIntegrationsNames.indexOf(defaultIntegration.name) === -1 &&\n        pickedIntegrationsNames.indexOf(defaultIntegration.name) === -1\n      ) {\n        integrations.push(defaultIntegration);\n        pickedIntegrationsNames.push(defaultIntegration.name);\n      }\n    });\n\n    // Don't add same user integration twice\n    userIntegrations.forEach(userIntegration => {\n      if (pickedIntegrationsNames.indexOf(userIntegration.name) === -1) {\n        integrations.push(userIntegration);\n        pickedIntegrationsNames.push(userIntegration.name);\n      }\n    });\n  } else if (typeof userIntegrations === 'function') {\n    integrations = userIntegrations(defaultIntegrations);\n    integrations = Array.isArray(integrations) ? integrations : [integrations];\n  } else {\n    integrations = [...defaultIntegrations];\n  }\n\n  // Make sure that if present, `Debug` integration will always run last\n  const integrationsNames = integrations.map(i => i.name);\n  const alwaysLastToRun = 'Debug';\n  if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {\n    integrations.push(...integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1));\n  }\n\n  return integrations;\n}\n\n/** Setup given integration */\nexport function setupIntegration(integration: Integration): void {\n  if (installedIntegrations.indexOf(integration.name) !== -1) {\n    return;\n  }\n  integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n  installedIntegrations.push(integration.name);\n  logger.log(`Integration installed: ${integration.name}`);\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations<O extends Options>(options: O): IntegrationIndex {\n  const integrations: IntegrationIndex = {};\n  getIntegrationsToSetup(options).forEach(integration => {\n    integrations[integration.name] = integration;\n    setupIntegration(integration);\n  });\n  return integrations;\n}\n", "/* eslint-disable max-lines */\nimport { Scope, Session } from '@sentry/hub';\nimport {\n  Client,\n  Event,\n  EventHint,\n  Integration,\n  IntegrationClass,\n  Options,\n  SessionStatus,\n  Severity,\n} from '@sentry/types';\nimport {\n  dateTimestampInSeconds,\n  Dsn,\n  isPrimitive,\n  isThenable,\n  logger,\n  normalize,\n  SentryError,\n  SyncPromise,\n  truncate,\n  uuid4,\n} from '@sentry/utils';\n\nimport { Backend, BackendClass } from './basebackend';\nimport { IntegrationIndex, setupIntegrations } from './integration';\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding backend constructor and options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}. Also, the Backend instance is available via\n * {@link Client.getBackend}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event via the backend, it is passed through\n * {@link BaseClient.prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeBackend, NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(NodeBackend, options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class BaseClient<B extends Backend, O extends Options> implements Client<O> {\n  /**\n   * The backend used to physically interact in the environment. Usually, this\n   * will correspond to the client. When composing SDKs, however, the Backend\n   * from the root SDK will be used.\n   */\n  protected readonly _backend: B;\n\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: Dsn;\n\n  /** Array of used integrations. */\n  protected _integrations: IntegrationIndex = {};\n\n  /** Number of call being processed */\n  protected _processing: number = 0;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param backendClass A constructor function to create the backend.\n   * @param options Options for the client.\n   */\n  protected constructor(backendClass: BackendClass<B, O>, options: O) {\n    this._backend = new backendClass(options);\n    this._options = options;\n\n    if (options.dsn) {\n      this._dsn = new Dsn(options.dsn);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this._getBackend()\n        .eventFromException(exception, hint)\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(message: string, level?: Severity, hint?: EventHint, scope?: Scope): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    const promisedEvent = isPrimitive(message)\n      ? this._getBackend().eventFromMessage(String(message), level, hint)\n      : this._getBackend().eventFromException(message, hint);\n\n    this._process(\n      promisedEvent\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this._captureEvent(event, hint, scope).then(result => {\n        eventId = result;\n      }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureSession(session: Session): void {\n    if (!session.release) {\n      logger.warn('Discarded session because of missing release');\n    } else {\n      this._sendSession(session);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getDsn(): Dsn | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(timeout?: number): PromiseLike<boolean> {\n    return this._isClientProcessing(timeout).then(ready => {\n      return this._getBackend()\n        .getTransport()\n        .close(timeout)\n        .then(transportFlushed => ready && transportFlushed);\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      return result;\n    });\n  }\n\n  /**\n   * Sets up the integrations\n   */\n  public setupIntegrations(): void {\n    if (this._isEnabled()) {\n      this._integrations = setupIntegrations(this._options);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    try {\n      return (this._integrations[integration.id] as T) || null;\n    } catch (_oO) {\n      logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    let crashed = false;\n    let errored = false;\n    let userAgent;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    const user = event.user;\n    if (!session.userAgent) {\n      const headers = event.request ? event.request.headers : {};\n      for (const key in headers) {\n        if (key.toLowerCase() === 'user-agent') {\n          userAgent = headers[key];\n          break;\n        }\n      }\n    }\n\n    session.update({\n      ...(crashed && { status: SessionStatus.Crashed }),\n      user,\n      userAgent,\n      errors: session.errors + Number(errored || crashed),\n    });\n  }\n\n  /** Deliver captured session to Sentry */\n  protected _sendSession(session: Session): void {\n    this._getBackend().sendSession(session);\n  }\n\n  /** Waits for the client to be done with processing. */\n  protected _isClientProcessing(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise(resolve => {\n      let ticked: number = 0;\n      const tick: number = 1;\n\n      const interval = setInterval(() => {\n        if (this._processing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Returns the current backend. */\n  protected _getBackend(): B {\n    return this._backend;\n  }\n\n  /** Determines whether this SDK is enabled and a valid Dsn is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._dsn !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): PromiseLike<Event | null> {\n    const { normalizeDepth = 3 } = this.getOptions();\n    const prepared: Event = {\n      ...event,\n      event_id: event.event_id || (hint && hint.event_id ? hint.event_id : uuid4()),\n      timestamp: event.timestamp || dateTimestampInSeconds(),\n    };\n\n    this._applyClientOptions(prepared);\n    this._applyIntegrationsMetadata(prepared);\n\n    // If we have scope given to us, use it as the base for further modifications.\n    // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n    let finalScope = scope;\n    if (hint && hint.captureContext) {\n      finalScope = Scope.clone(finalScope).update(hint.captureContext);\n    }\n\n    // We prepare the result here with a resolved Event.\n    let result = SyncPromise.resolve<Event | null>(prepared);\n\n    // This should be the last thing called, since we want that\n    // {@link Hub.addEventProcessor} gets the finished prepared event.\n    if (finalScope) {\n      // In case we have a hub we reassign it.\n      result = finalScope.applyToEvent(prepared, hint);\n    }\n\n    return result.then(evt => {\n      if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n        return this._normalizeEvent(evt, normalizeDepth);\n      }\n      return evt;\n    });\n  }\n\n  /**\n   * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n   * Normalized keys:\n   * - `breadcrumbs.data`\n   * - `user`\n   * - `contexts`\n   * - `extra`\n   * @param event Event\n   * @returns Normalized event\n   */\n  protected _normalizeEvent(event: Event | null, depth: number): Event | null {\n    if (!event) {\n      return null;\n    }\n\n    const normalized = {\n      ...event,\n      ...(event.breadcrumbs && {\n        breadcrumbs: event.breadcrumbs.map(b => ({\n          ...b,\n          ...(b.data && {\n            data: normalize(b.data, depth),\n          }),\n        })),\n      }),\n      ...(event.user && {\n        user: normalize(event.user, depth),\n      }),\n      ...(event.contexts && {\n        contexts: normalize(event.contexts, depth),\n      }),\n      ...(event.extra && {\n        extra: normalize(event.extra, depth),\n      }),\n    };\n    // event.contexts.trace stores information about a Transaction. Similarly,\n    // event.spans[] stores information about child Spans. Given that a\n    // Transaction is conceptually a Span, normalization should apply to both\n    // Transactions and Spans consistently.\n    // For now the decision is to skip normalization of Transactions and Spans,\n    // so this block overwrites the normalized event to add back the original\n    // Transaction information prior to normalization.\n    if (event.contexts && event.contexts.trace) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      normalized.contexts.trace = event.contexts.trace;\n    }\n    return normalized;\n  }\n\n  /**\n   *  Enhances event using the client configuration.\n   *  It takes care of all \"static\" values like environment, release and `dist`,\n   *  as well as truncating overly long values.\n   * @param event event instance to be enhanced\n   */\n  protected _applyClientOptions(event: Event): void {\n    const options = this.getOptions();\n    const { environment, release, dist, maxValueLength = 250 } = options;\n\n    if (!('environment' in event)) {\n      event.environment = 'environment' in options ? environment : 'production';\n    }\n\n    if (event.release === undefined && release !== undefined) {\n      event.release = release;\n    }\n\n    if (event.dist === undefined && dist !== undefined) {\n      event.dist = dist;\n    }\n\n    if (event.message) {\n      event.message = truncate(event.message, maxValueLength);\n    }\n\n    const exception = event.exception && event.exception.values && event.exception.values[0];\n    if (exception && exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n\n    const request = event.request;\n    if (request && request.url) {\n      request.url = truncate(request.url, maxValueLength);\n    }\n  }\n\n  /**\n   * This function adds all used integrations to the SDK info in the event.\n   * @param sdkInfo The sdkInfo of the event that will be filled with all integrations.\n   */\n  protected _applyIntegrationsMetadata(event: Event): void {\n    const sdkInfo = event.sdk;\n    const integrationsArray = Object.keys(this._integrations);\n    if (sdkInfo && integrationsArray.length > 0) {\n      sdkInfo.integrations = integrationsArray;\n    }\n  }\n\n  /**\n   * Tells the backend to send this event\n   * @param event The Sentry event to send\n   */\n  protected _sendEvent(event: Event): void {\n    this._getBackend().sendEvent(event);\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n  protected _captureEvent(event: Event, hint?: EventHint, scope?: Scope): PromiseLike<string | undefined> {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        logger.error(reason);\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n  protected _processEvent(event: Event, hint?: EventHint, scope?: Scope): PromiseLike<Event> {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    const { beforeSend, sampleRate } = this.getOptions();\n\n    if (!this._isEnabled()) {\n      return SyncPromise.reject(new SentryError('SDK not enabled, will not send event.'));\n    }\n\n    const isTransaction = event.type === 'transaction';\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (!isTransaction && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      return SyncPromise.reject(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n        ),\n      );\n    }\n\n    return this._prepareEvent(event, scope, hint)\n      .then(prepared => {\n        if (prepared === null) {\n          throw new SentryError('An event processor returned null, will not send event.');\n        }\n\n        const isInternalException = hint && hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n        if (isInternalException || isTransaction || !beforeSend) {\n          return prepared;\n        }\n\n        const beforeSendResult = beforeSend(prepared, hint);\n        if (typeof beforeSendResult === 'undefined') {\n          throw new SentryError('`beforeSend` method has to return `null` or a valid event.');\n        } else if (isThenable(beforeSendResult)) {\n          return (beforeSendResult as PromiseLike<Event | null>).then(\n            event => event,\n            e => {\n              throw new SentryError(`beforeSend rejected with ${e}`);\n            },\n          );\n        }\n        return beforeSendResult;\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          throw new SentryError('`beforeSend` returned `null`, will not send event.');\n        }\n\n        const session = scope && scope.getSession && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        this._sendEvent(processedEvent);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason as Error,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n  protected _process<T>(promise: PromiseLike<T>): void {\n    this._processing += 1;\n    promise.then(\n      value => {\n        this._processing -= 1;\n        return value;\n      },\n      reason => {\n        this._processing -= 1;\n        return reason;\n      },\n    );\n  }\n}\n", "import { Event, Response, Status, Transport } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\n/** Noop transport */\nexport class NoopTransport implements Transport {\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(_: Event): PromiseLike<Response> {\n    return SyncPromise.resolve({\n      reason: `NoopTransport: Event has been skipped because no Dsn is configured.`,\n      status: Status.Skipped,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(_?: number): PromiseLike<boolean> {\n    return SyncPromise.resolve(true);\n  }\n}\n", "import { Event, EventHint, Options, Session, Severity, Transport } from '@sentry/types';\nimport { logger, SentryError } from '@sentry/utils';\n\nimport { NoopTransport } from './transports/noop';\n\n/**\n * Internal platform-dependent Sentry SDK Backend.\n *\n * While {@link Client} contains business logic specific to an SDK, the\n * Backend offers platform specific implementations for low-level operations.\n * These are persisting and loading information, sending events, and hooking\n * into the environment.\n *\n * Backends receive a handle to the Client in their constructor. When a\n * Backend automatically generates events, it must pass them to\n * the Client for validation and processing first.\n *\n * Usually, the Client will be of corresponding type, e.g. NodeBackend\n * receives NodeClient. However, higher-level SDKs can choose to instantiate\n * multiple Backends and delegate tasks between them. In this case, an event\n * generated by one backend might very well be sent by another one.\n *\n * The client also provides access to options via {@link Client.getOptions}.\n * @hidden\n */\nexport interface Backend {\n  /** Creates a {@link Event} from an exception. */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  eventFromException(exception: any, hint?: EventHint): PromiseLike<Event>;\n\n  /** Creates a {@link Event} from a plain message. */\n  eventFromMessage(message: string, level?: Severity, hint?: EventHint): PromiseLike<Event>;\n\n  /** Submits the event to Sentry */\n  sendEvent(event: Event): void;\n\n  /** Submits the session to Sentry */\n  sendSession(session: Session): void;\n\n  /**\n   * Returns the transport that is used by the backend.\n   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n   *\n   * @returns The transport.\n   */\n  getTransport(): Transport;\n}\n\n/**\n * A class object that can instantiate Backend objects.\n * @hidden\n */\nexport type BackendClass<B extends Backend, O extends Options> = new (options: O) => B;\n\n/**\n * This is the base implemention of a Backend.\n * @hidden\n */\nexport abstract class BaseBackend<O extends Options> implements Backend {\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** Cached transport used internally. */\n  protected _transport: Transport;\n\n  /** Creates a new backend instance. */\n  public constructor(options: O) {\n    this._options = options;\n    if (!this._options.dsn) {\n      logger.warn('No DSN provided, backend will not do anything.');\n    }\n    this._transport = this._setupTransport();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event> {\n    throw new SentryError('Backend has to implement `eventFromException` method');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(_message: string, _level?: Severity, _hint?: EventHint): PromiseLike<Event> {\n    throw new SentryError('Backend has to implement `eventFromMessage` method');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event): void {\n    this._transport.sendEvent(event).then(null, reason => {\n      logger.error(`Error while sending event: ${reason}`);\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendSession(session: Session): void {\n    if (!this._transport.sendSession) {\n      logger.warn(\"Dropping session because custom transport doesn't implement sendSession\");\n      return;\n    }\n\n    this._transport.sendSession(session).then(null, reason => {\n      logger.error(`Error while sending session: ${reason}`);\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransport(): Transport {\n    return this._transport;\n  }\n\n  /**\n   * Sets up the transport so it can be used later to send requests.\n   */\n  protected _setupTransport(): Transport {\n    return new NoopTransport();\n  }\n}\n", "import { Event, SentryRequest, Session } from '@sentry/types';\n\nimport { API } from './api';\n\n/** Creates a SentryRequest from an event. */\nexport function sessionToSentryRequest(session: Session, api: API): SentryRequest {\n  const envelopeHeaders = JSON.stringify({\n    sent_at: new Date().toISOString(),\n  });\n  const itemHeaders = JSON.stringify({\n    type: 'session',\n  });\n\n  return {\n    body: `${envelopeHeaders}\\n${itemHeaders}\\n${JSON.stringify(session)}`,\n    type: 'session',\n    url: api.getEnvelopeEndpointWithUrlEncodedAuth(),\n  };\n}\n\n/** Creates a SentryRequest from an event. */\nexport function eventToSentryRequest(event: Event, api: API): SentryRequest {\n  // since JS has no Object.prototype.pop()\n  const { __sentry_samplingMethod: samplingMethod, __sentry_sampleRate: sampleRate, ...otherTags } = event.tags || {};\n  event.tags = otherTags;\n\n  const useEnvelope = event.type === 'transaction';\n\n  const req: SentryRequest = {\n    body: JSON.stringify(event),\n    type: event.type || 'event',\n    url: useEnvelope ? api.getEnvelopeEndpointWithUrlEncodedAuth() : api.getStoreEndpointWithUrlEncodedAuth(),\n  };\n\n  // https://develop.sentry.dev/sdk/envelopes/\n\n  // Since we don't need to manipulate envelopes nor store them, there is no\n  // exported concept of an Envelope with operations including serialization and\n  // deserialization. Instead, we only implement a minimal subset of the spec to\n  // serialize events inline here.\n  if (useEnvelope) {\n    const envelopeHeaders = JSON.stringify({\n      event_id: event.event_id,\n      sent_at: new Date().toISOString(),\n    });\n    const itemHeaders = JSON.stringify({\n      type: event.type,\n\n      // TODO: Right now, sampleRate may or may not be defined (it won't be in the cases of inheritance and\n      // explicitly-set sampling decisions). Are we good with that?\n      sample_rates: [{ id: samplingMethod, rate: sampleRate }],\n\n      // The content-type is assumed to be 'application/json' and not part of\n      // the current spec for transaction items, so we don't bloat the request\n      // body with it.\n      //\n      // content_type: 'application/json',\n      //\n      // The length is optional. It must be the number of bytes in req.Body\n      // encoded as UTF-8. Since the server can figure this out and would\n      // otherwise refuse events that report the length incorrectly, we decided\n      // not to send the length to avoid problems related to reporting the wrong\n      // size and to reduce request body size.\n      //\n      // length: new TextEncoder().encode(req.body).length,\n    });\n    // The trailing newline is optional. We intentionally don't send it to avoid\n    // sending unnecessary bytes.\n    //\n    // const envelope = `${envelopeHeaders}\\n${itemHeaders}\\n${req.body}\\n`;\n    const envelope = `${envelopeHeaders}\\n${itemHeaders}\\n${req.body}`;\n    req.body = envelope;\n  }\n\n  return req;\n}\n", "import { getCurrentHub } from '@sentry/hub';\nimport { Client, Options } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass<F extends Client, O extends Options> = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind<F extends Client, O extends Options>(clientClass: ClientClass<F, O>, options: O): void {\n  if (options.debug === true) {\n    logger.enable();\n  }\n  const hub = getCurrentHub();\n  const client = new clientClass(options);\n  hub.bindClient(client);\n}\n", "export { FunctionToString } from './functiontostring';\nexport { InboundFilters } from './inboundfilters';\n", "import { Integration, WrappedFunction } from '@sentry/types';\n\nlet originalFunctionToString: () => void;\n\n/** Patch toString calls to return proper name for wrapped functions */\nexport class FunctionToString implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'FunctionToString';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = FunctionToString.id;\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    originalFunctionToString = Function.prototype.toString;\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Function.prototype.toString = function(this: WrappedFunction, ...args: any[]): string {\n      const context = this.__sentry_original__ || this;\n      return originalFunctionToString.apply(context, args);\n    };\n  }\n}\n", "import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { Event, Integration } from '@sentry/types';\nimport { getEventDescription, isMatchingPattern, logger } from '@sentry/utils';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\n/** JSDoc */\ninterface InboundFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreInternal: boolean;\n\n  /** @deprecated use {@link InboundFiltersOptions.allowUrls} instead. */\n  whitelistUrls: Array<string | RegExp>;\n  /** @deprecated use {@link InboundFiltersOptions.denyUrls} instead. */\n  blacklistUrls: Array<string | RegExp>;\n}\n\n/** Inbound filters configurable by the user */\nexport class InboundFilters implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'InboundFilters';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = InboundFilters.id;\n\n  public constructor(private readonly _options: Partial<InboundFiltersOptions> = {}) {}\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    addGlobalEventProcessor((event: Event) => {\n      const hub = getCurrentHub();\n      if (!hub) {\n        return event;\n      }\n      const self = hub.getIntegration(InboundFilters);\n      if (self) {\n        const client = hub.getClient();\n        const clientOptions = client ? client.getOptions() : {};\n        const options = self._mergeOptions(clientOptions);\n        if (self._shouldDropEvent(event, options)) {\n          return null;\n        }\n      }\n      return event;\n    });\n  }\n\n  /** JSDoc */\n  private _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n    if (this._isSentryError(event, options)) {\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n      return true;\n    }\n    if (this._isIgnoredError(event, options)) {\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n      return true;\n    }\n    if (this._isDeniedUrl(event, options)) {\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${this._getEventFilterUrl(event)}`,\n      );\n      return true;\n    }\n    if (!this._isAllowedUrl(event, options)) {\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${this._getEventFilterUrl(event)}`,\n      );\n      return true;\n    }\n    return false;\n  }\n\n  /** JSDoc */\n  private _isSentryError(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n    if (!options.ignoreInternal) {\n      return false;\n    }\n\n    try {\n      return (\n        (event &&\n          event.exception &&\n          event.exception.values &&\n          event.exception.values[0] &&\n          event.exception.values[0].type === 'SentryError') ||\n        false\n      );\n    } catch (_oO) {\n      return false;\n    }\n  }\n\n  /** JSDoc */\n  private _isIgnoredError(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n    if (!options.ignoreErrors || !options.ignoreErrors.length) {\n      return false;\n    }\n\n    return this._getPossibleEventMessages(event).some(message =>\n      // Not sure why TypeScript complains here...\n      (options.ignoreErrors as Array<RegExp | string>).some(pattern => isMatchingPattern(message, pattern)),\n    );\n  }\n\n  /** JSDoc */\n  private _isDeniedUrl(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n    // TODO: Use Glob instead?\n    if (!options.denyUrls || !options.denyUrls.length) {\n      return false;\n    }\n    const url = this._getEventFilterUrl(event);\n    return !url ? false : options.denyUrls.some(pattern => isMatchingPattern(url, pattern));\n  }\n\n  /** JSDoc */\n  private _isAllowedUrl(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n    // TODO: Use Glob instead?\n    if (!options.allowUrls || !options.allowUrls.length) {\n      return true;\n    }\n    const url = this._getEventFilterUrl(event);\n    return !url ? true : options.allowUrls.some(pattern => isMatchingPattern(url, pattern));\n  }\n\n  /** JSDoc */\n  private _mergeOptions(clientOptions: Partial<InboundFiltersOptions> = {}): Partial<InboundFiltersOptions> {\n    return {\n      allowUrls: [\n        // eslint-disable-next-line deprecation/deprecation\n        ...(this._options.whitelistUrls || []),\n        ...(this._options.allowUrls || []),\n        // eslint-disable-next-line deprecation/deprecation\n        ...(clientOptions.whitelistUrls || []),\n        ...(clientOptions.allowUrls || []),\n      ],\n      denyUrls: [\n        // eslint-disable-next-line deprecation/deprecation\n        ...(this._options.blacklistUrls || []),\n        ...(this._options.denyUrls || []),\n        // eslint-disable-next-line deprecation/deprecation\n        ...(clientOptions.blacklistUrls || []),\n        ...(clientOptions.denyUrls || []),\n      ],\n      ignoreErrors: [\n        ...(this._options.ignoreErrors || []),\n        ...(clientOptions.ignoreErrors || []),\n        ...DEFAULT_IGNORE_ERRORS,\n      ],\n      ignoreInternal: typeof this._options.ignoreInternal !== 'undefined' ? this._options.ignoreInternal : true,\n    };\n  }\n\n  /** JSDoc */\n  private _getPossibleEventMessages(event: Event): string[] {\n    if (event.message) {\n      return [event.message];\n    }\n    if (event.exception) {\n      try {\n        const { type = '', value = '' } = (event.exception.values && event.exception.values[0]) || {};\n        return [`${value}`, `${type}: ${value}`];\n      } catch (oO) {\n        logger.error(`Cannot extract message for event ${getEventDescription(event)}`);\n        return [];\n      }\n    }\n    return [];\n  }\n\n  /** JSDoc */\n  private _getEventFilterUrl(event: Event): string | null {\n    try {\n      if (event.stacktrace) {\n        const frames = event.stacktrace.frames;\n        return (frames && frames[frames.length - 1].filename) || null;\n      }\n      if (event.exception) {\n        const frames =\n          event.exception.values && event.exception.values[0].stacktrace && event.exception.values[0].stacktrace.frames;\n        return (frames && frames[frames.length - 1].filename) || null;\n      }\n      return null;\n    } catch (oO) {\n      logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n      return null;\n    }\n  }\n}\n", "import { Event, Exception, ExtendedError, StackFrame } from '@sentry/types';\nimport { addContextToFrame, basename, dirname, SyncPromise } from '@sentry/utils';\nimport { readFile } from 'fs';\nimport { LRUMap } from 'lru_map';\n\nimport { NodeOptions } from './backend';\nimport * as stacktrace from './stacktrace';\n\nconst DEFAULT_LINES_OF_CONTEXT: number = 7;\nconst FILE_CONTENT_CACHE = new LRUMap<string, string | null>(100);\n\n/**\n * Resets the file cache. Exists for testing purposes.\n * @hidden\n */\nexport function resetFileContentCache(): void {\n  FILE_CONTENT_CACHE.clear();\n}\n\n/** JSDoc */\nfunction getFunction(frame: stacktrace.StackFrame): string {\n  try {\n    return frame.functionName || `${frame.typeName}.${frame.methodName || '<anonymous>'}`;\n  } catch (e) {\n    // This seems to happen sometimes when using 'use strict',\n    // stemming from `getTypeName`.\n    // [TypeError: Cannot read property 'constructor' of undefined]\n    return '<anonymous>';\n  }\n}\n\nconst mainModule: string = `${(require.main && require.main.filename && dirname(require.main.filename)) ||\n  global.process.cwd()}/`;\n\n/** JSDoc */\nfunction getModule(filename: string, base?: string): string {\n  if (!base) {\n    // eslint-disable-next-line no-param-reassign\n    base = mainModule;\n  }\n\n  // It's specifically a module\n  const file = basename(filename, '.js');\n  // eslint-disable-next-line no-param-reassign\n  filename = dirname(filename);\n  let n = filename.lastIndexOf('/node_modules/');\n  if (n > -1) {\n    // /node_modules/ is 14 chars\n    return `${filename.substr(n + 14).replace(/\\//g, '.')}:${file}`;\n  }\n  // Let's see if it's a part of the main module\n  // To be a part of main module, it has to share the same base\n  n = `${filename}/`.lastIndexOf(base, 0);\n  if (n === 0) {\n    let moduleName = filename.substr(base.length).replace(/\\//g, '.');\n    if (moduleName) {\n      moduleName += ':';\n    }\n    moduleName += file;\n    return moduleName;\n  }\n  return file;\n}\n\n/**\n * This function reads file contents and caches them in a global LRU cache.\n * Returns a Promise filepath => content array for all files that we were able to read.\n *\n * @param filenames Array of filepaths to read content from.\n */\nfunction readSourceFiles(filenames: string[]): PromiseLike<{ [key: string]: string | null }> {\n  // we're relying on filenames being de-duped already\n  if (filenames.length === 0) {\n    return SyncPromise.resolve({});\n  }\n\n  return new SyncPromise<{\n    [key: string]: string | null;\n  }>(resolve => {\n    const sourceFiles: {\n      [key: string]: string | null;\n    } = {};\n\n    let count = 0;\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < filenames.length; i++) {\n      const filename = filenames[i];\n\n      const cache = FILE_CONTENT_CACHE.get(filename);\n      // We have a cache hit\n      if (cache !== undefined) {\n        // If it's not null (which means we found a file and have a content)\n        // we set the content and return it later.\n        if (cache !== null) {\n          sourceFiles[filename] = cache;\n        }\n        // eslint-disable-next-line no-plusplus\n        count++;\n        // In any case we want to skip here then since we have a content already or we couldn't\n        // read the file and don't want to try again.\n        if (count === filenames.length) {\n          resolve(sourceFiles);\n        }\n        continue;\n      }\n\n      readFile(filename, (err: Error | null, data: Buffer) => {\n        const content = err ? null : data.toString();\n        sourceFiles[filename] = content;\n\n        // We always want to set the cache, even to null which means there was an error reading the file.\n        // We do not want to try to read the file again.\n        FILE_CONTENT_CACHE.set(filename, content);\n        // eslint-disable-next-line no-plusplus\n        count++;\n        if (count === filenames.length) {\n          resolve(sourceFiles);\n        }\n      });\n    }\n  });\n}\n\n/**\n * @hidden\n */\nexport function extractStackFromError(error: Error): stacktrace.StackFrame[] {\n  const stack = stacktrace.parse(error);\n  if (!stack) {\n    return [];\n  }\n  return stack;\n}\n\n/**\n * @hidden\n */\nexport function parseStack(stack: stacktrace.StackFrame[], options?: NodeOptions): PromiseLike<StackFrame[]> {\n  const filesToRead: string[] = [];\n\n  const linesOfContext =\n    options && options.frameContextLines !== undefined ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n  const frames: StackFrame[] = stack.map(frame => {\n    const parsedFrame: StackFrame = {\n      colno: frame.columnNumber,\n      filename: frame.fileName || '',\n      function: getFunction(frame),\n      lineno: frame.lineNumber,\n    };\n\n    const isInternal =\n      frame.native ||\n      (parsedFrame.filename &&\n        !parsedFrame.filename.startsWith('/') &&\n        !parsedFrame.filename.startsWith('.') &&\n        parsedFrame.filename.indexOf(':\\\\') !== 1);\n\n    // in_app is all that's not an internal Node function or a module within node_modules\n    // note that isNative appears to return true even for node core libraries\n    // see https://github.com/getsentry/raven-node/issues/176\n    parsedFrame.in_app =\n      !isInternal && parsedFrame.filename !== undefined && parsedFrame.filename.indexOf('node_modules/') === -1;\n\n    // Extract a module name based on the filename\n    if (parsedFrame.filename) {\n      parsedFrame.module = getModule(parsedFrame.filename);\n\n      if (!isInternal && linesOfContext > 0 && filesToRead.indexOf(parsedFrame.filename) === -1) {\n        filesToRead.push(parsedFrame.filename);\n      }\n    }\n\n    return parsedFrame;\n  });\n\n  // We do an early return if we do not want to fetch context liens\n  if (linesOfContext <= 0) {\n    return SyncPromise.resolve(frames);\n  }\n\n  try {\n    return addPrePostContext(filesToRead, frames, linesOfContext);\n  } catch (_) {\n    // This happens in electron for example where we are not able to read files from asar.\n    // So it's fine, we recover be just returning all frames without pre/post context.\n    return SyncPromise.resolve(frames);\n  }\n}\n\n/**\n * This function tries to read the source files + adding pre and post context (source code)\n * to a frame.\n * @param filesToRead string[] of filepaths\n * @param frames StackFrame[] containg all frames\n */\nfunction addPrePostContext(\n  filesToRead: string[],\n  frames: StackFrame[],\n  linesOfContext: number,\n): PromiseLike<StackFrame[]> {\n  return new SyncPromise<StackFrame[]>(resolve =>\n    readSourceFiles(filesToRead).then(sourceFiles => {\n      const result = frames.map(frame => {\n        if (frame.filename && sourceFiles[frame.filename]) {\n          try {\n            const lines = (sourceFiles[frame.filename] as string).split('\\n');\n\n            addContextToFrame(lines, frame, linesOfContext);\n          } catch (e) {\n            // anomaly, being defensive in case\n            // unlikely to ever happen in practice but can definitely happen in theory\n          }\n        }\n        return frame;\n      });\n\n      resolve(result);\n    }),\n  );\n}\n\n/**\n * @hidden\n */\nexport function getExceptionFromError(error: Error, options?: NodeOptions): PromiseLike<Exception> {\n  const name = error.name || error.constructor.name;\n  const stack = extractStackFromError(error);\n  return new SyncPromise<Exception>(resolve =>\n    parseStack(stack, options).then(frames => {\n      const result = {\n        stacktrace: {\n          frames: prepareFramesForEvent(frames),\n        },\n        type: name,\n        value: error.message,\n      };\n      resolve(result);\n    }),\n  );\n}\n\n/**\n * @hidden\n */\nexport function parseError(error: ExtendedError, options?: NodeOptions): PromiseLike<Event> {\n  return new SyncPromise<Event>(resolve =>\n    getExceptionFromError(error, options).then((exception: Exception) => {\n      resolve({\n        exception: {\n          values: [exception],\n        },\n      });\n    }),\n  );\n}\n\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack: StackFrame[]): StackFrame[] {\n  if (!stack || !stack.length) {\n    return [];\n  }\n\n  let localStack = stack;\n  const firstFrameFunction = localStack[0].function || '';\n\n  if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n    localStack = localStack.slice(1);\n  }\n\n  // The frame where the crash happened, should be the last entry in the array\n  return localStack.reverse();\n}\n", "/**\n * stack-trace - Parses node.js stack traces\n *\n * This was originally forked to fix this issue:\n * https://github.com/felixge/node-stack-trace/issues/31\n *\n * Mar 19,2019 - #4fd379e\n *\n * https://github.com/felixge/node-stack-trace/\n * @license MIT\n */\n\n/** Decoded StackFrame */\nexport interface StackFrame {\n  fileName: string;\n  lineNumber: number;\n  functionName: string;\n  typeName: string;\n  methodName: string;\n  native: boolean;\n  columnNumber: number;\n}\n\n/** Extracts StackFrames from the Error */\nexport function parse(err: Error): StackFrame[] {\n  if (!err.stack) {\n    return [];\n  }\n\n  const lines = err.stack.split('\\n').slice(1);\n\n  return lines\n    .map(line => {\n      if (line.match(/^\\s*[-]{4,}$/)) {\n        return {\n          columnNumber: null,\n          fileName: line,\n          functionName: null,\n          lineNumber: null,\n          methodName: null,\n          native: null,\n          typeName: null,\n        };\n      }\n\n      const lineMatch = line.match(/at (?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?|([^)]+))\\)?/);\n      if (!lineMatch) {\n        return undefined;\n      }\n\n      let object = null;\n      let method = null;\n      let functionName = null;\n      let typeName = null;\n      let methodName = null;\n      const isNative = lineMatch[5] === 'native';\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          // eslint-disable-next-line no-plusplus\n          methodStart--;\n        }\n        if (methodStart > 0) {\n          object = functionName.substr(0, methodStart);\n          method = functionName.substr(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.substr(objectEnd + 1);\n            object = object.substr(0, objectEnd);\n          }\n        }\n        typeName = null;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = null;\n        functionName = null;\n      }\n\n      const properties = {\n        columnNumber: parseInt(lineMatch[4], 10) || null,\n        fileName: lineMatch[2] || null,\n        functionName,\n        lineNumber: parseInt(lineMatch[3], 10) || null,\n        methodName,\n        native: isNative,\n        typeName,\n      };\n\n      return properties;\n    })\n    .filter(callSite => !!callSite) as StackFrame[];\n}\n", "import { API, eventToSentryRequest } from '@sentry/core';\nimport { Event, Response, Status, Transport, TransportOptions } from '@sentry/types';\nimport { logger, parseRetryAfterHeader, PromiseBuffer, SentryError } from '@sentry/utils';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport * as https from 'https';\nimport * as url from 'url';\n\nimport { SDK_NAME, SDK_VERSION } from '../version';\n\n/**\n * Internal used interface for typescript.\n * @hidden\n */\nexport interface HTTPModule {\n  /**\n   * Request wrapper\n   * @param options These are {@see TransportOptions}\n   * @param callback Callback when request is finished\n   */\n  request(\n    options: http.RequestOptions | https.RequestOptions | string | url.URL,\n    callback?: (res: http.IncomingMessage) => void,\n  ): http.ClientRequest;\n\n  // This is the type for nodejs versions that handle the URL argument\n  // (v10.9.0+), but we do not use it just yet because we support older node\n  // versions:\n\n  // request(\n  //   url: string | url.URL,\n  //   options: http.RequestOptions | https.RequestOptions,\n  //   callback?: (res: http.IncomingMessage) => void,\n  // ): http.ClientRequest;\n}\n\n/** Base Transport class implementation */\nexport abstract class BaseTransport implements Transport {\n  /** The Agent used for corresponding transport */\n  public module?: HTTPModule;\n\n  /** The Agent used for corresponding transport */\n  public client?: http.Agent | https.Agent;\n\n  /** API object */\n  protected _api: API;\n\n  /** A simple buffer holding all requests. */\n  protected readonly _buffer: PromiseBuffer<Response> = new PromiseBuffer(30);\n\n  /** Locks transport after receiving 429 response */\n  private _disabledUntil: Date = new Date(Date.now());\n\n  /** Create instance and set this.dsn */\n  public constructor(public options: TransportOptions) {\n    this._api = new API(options.dsn);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(_: Event): PromiseLike<Response> {\n    throw new SentryError('Transport Class has to implement `sendEvent` method.');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    return this._buffer.drain(timeout);\n  }\n\n  /** Returns a build request option object used by request */\n  protected _getRequestOptions(uri: url.URL): http.RequestOptions | https.RequestOptions {\n    const headers = {\n      ...this._api.getRequestHeaders(SDK_NAME, SDK_VERSION),\n      ...this.options.headers,\n    };\n    const { hostname, pathname, port, protocol } = uri;\n    // See https://github.com/nodejs/node/blob/38146e717fed2fabe3aacb6540d839475e0ce1c6/lib/internal/url.js#L1268-L1290\n    // We ignore the query string on purpose\n    const path = `${pathname}`;\n\n    return {\n      agent: this.client,\n      headers,\n      hostname,\n      method: 'POST',\n      path,\n      port,\n      protocol,\n      ...(this.options.caCerts && {\n        ca: fs.readFileSync(this.options.caCerts),\n      }),\n    };\n  }\n\n  /** JSDoc */\n  protected async _sendWithModule(httpModule: HTTPModule, event: Event): Promise<Response> {\n    if (new Date(Date.now()) < this._disabledUntil) {\n      return Promise.reject(new SentryError(`Transport locked till ${this._disabledUntil} due to too many requests.`));\n    }\n\n    if (!this._buffer.isReady()) {\n      return Promise.reject(new SentryError('Not adding Promise due to buffer limit reached.'));\n    }\n    return this._buffer.add(\n      new Promise<Response>((resolve, reject) => {\n        const sentryReq = eventToSentryRequest(event, this._api);\n        const options = this._getRequestOptions(new url.URL(sentryReq.url));\n\n        const req = httpModule.request(options, (res: http.IncomingMessage) => {\n          const statusCode = res.statusCode || 500;\n          const status = Status.fromHttpCode(statusCode);\n\n          res.setEncoding('utf8');\n\n          if (status === Status.Success) {\n            resolve({ status });\n          } else {\n            if (status === Status.RateLimit) {\n              const now = Date.now();\n              /**\n               * \"Key-value pairs of header names and values. Header names are lower-cased.\"\n               * https://nodejs.org/api/http.html#http_message_headers\n               */\n              let retryAfterHeader = res.headers ? res.headers['retry-after'] : '';\n              retryAfterHeader = (Array.isArray(retryAfterHeader) ? retryAfterHeader[0] : retryAfterHeader) as string;\n              this._disabledUntil = new Date(now + parseRetryAfterHeader(now, retryAfterHeader));\n              logger.warn(`Too many requests, backing off till: ${this._disabledUntil}`);\n            }\n\n            let rejectionMessage = `HTTP Error (${statusCode})`;\n            if (res.headers && res.headers['x-sentry-error']) {\n              rejectionMessage += `: ${res.headers['x-sentry-error']}`;\n            }\n\n            reject(new SentryError(rejectionMessage));\n          }\n\n          // Force the socket to drain\n          res.on('data', () => {\n            // Drain\n          });\n          res.on('end', () => {\n            // Drain\n          });\n        });\n        req.on('error', reject);\n        req.end(sentryReq.body);\n      }),\n    );\n  }\n}\n", "export const SDK_NAME = 'sentry.javascript.node';\nexport const SDK_VERSION = '5.30.0';\n", "import { Event, Response, TransportOptions } from '@sentry/types';\nimport { SentryError } from '@sentry/utils';\nimport * as http from 'http';\n\nimport { BaseTransport } from './base';\n\n/** Node http module transport */\nexport class HTTPTransport extends BaseTransport {\n  /** Create a new instance and set this.agent */\n  public constructor(public options: TransportOptions) {\n    super(options);\n    const proxy = options.httpProxy || process.env.http_proxy;\n    this.module = http;\n    this.client = proxy\n      ? (new (require('https-proxy-agent'))(proxy) as http.Agent)\n      : new http.Agent({ keepAlive: false, maxSockets: 30, timeout: 2000 });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event): Promise<Response> {\n    if (!this.module) {\n      throw new SentryError('No module available in HTTPTransport');\n    }\n    return this._sendWithModule(this.module, event);\n  }\n}\n", "import { Event, Response, TransportOptions } from '@sentry/types';\nimport { SentryError } from '@sentry/utils';\nimport * as https from 'https';\n\nimport { BaseTransport } from './base';\n\n/** Node https module transport */\nexport class HTTPSTransport extends BaseTransport {\n  /** Create a new instance and set this.agent */\n  public constructor(public options: TransportOptions) {\n    super(options);\n    const proxy = options.httpsProxy || options.httpProxy || process.env.https_proxy || process.env.http_proxy;\n    this.module = https;\n    this.client = proxy\n      ? (new (require('https-proxy-agent'))(proxy) as https.Agent)\n      : new https.Agent({ keepAlive: false, maxSockets: 30, timeout: 2000 });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event): Promise<Response> {\n    if (!this.module) {\n      throw new SentryError('No module available in HTTPSTransport');\n    }\n    return this._sendWithModule(this.module, event);\n  }\n}\n", "import { BaseBackend, getCurrentHub } from '@sentry/core';\nimport { Event, EventHint, Mechanism, Options, Severity, Transport, TransportOptions } from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  Dsn,\n  extractExceptionKeysForMessage,\n  isError,\n  isPlainObject,\n  normalizeToSize,\n  SyncPromise,\n} from '@sentry/utils';\n\nimport { extractStackFromError, parseError, parseStack, prepareFramesForEvent } from './parsers';\nimport { HTTPSTransport, HTTPTransport } from './transports';\n\n/**\n * Configuration options for the Sentry Node SDK.\n * @see NodeClient for more information.\n */\nexport interface NodeOptions extends Options {\n  /** Sets an optional server name (device name) */\n  serverName?: string;\n\n  /** Maximum time in milliseconds to wait to drain the request queue, before the process is allowed to exit. */\n  shutdownTimeout?: number;\n\n  /** Set a HTTP proxy that should be used for outbound requests. */\n  httpProxy?: string;\n\n  /** Set a HTTPS proxy that should be used for outbound requests. */\n  httpsProxy?: string;\n\n  /** HTTPS proxy certificates path */\n  caCerts?: string;\n\n  /** Sets the number of context lines for each frame when loading a file. */\n  frameContextLines?: number;\n\n  /** Callback that is executed when a fatal global error occurs. */\n  onFatalError?(error: Error): void;\n}\n\n/**\n * The Sentry Node SDK Backend.\n * @hidden\n */\nexport class NodeBackend extends BaseBackend<NodeOptions> {\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public eventFromException(exception: any, hint?: EventHint): PromiseLike<Event> {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let ex: any = exception;\n    const mechanism: Mechanism = {\n      handled: true,\n      type: 'generic',\n    };\n\n    if (!isError(exception)) {\n      if (isPlainObject(exception)) {\n        // This will allow us to group events based on top-level keys\n        // which is much better than creating new group when any key/value change\n        const message = `Non-Error exception captured with keys: ${extractExceptionKeysForMessage(exception)}`;\n\n        getCurrentHub().configureScope(scope => {\n          scope.setExtra('__serialized__', normalizeToSize(exception as Record<string, unknown>));\n        });\n\n        ex = (hint && hint.syntheticException) || new Error(message);\n        (ex as Error).message = message;\n      } else {\n        // This handles when someone does: `throw \"something awesome\";`\n        // We use synthesized Error here so we can extract a (rough) stack trace.\n        ex = (hint && hint.syntheticException) || new Error(exception as string);\n        (ex as Error).message = exception;\n      }\n      mechanism.synthetic = true;\n    }\n\n    return new SyncPromise<Event>((resolve, reject) =>\n      parseError(ex as Error, this._options)\n        .then(event => {\n          addExceptionTypeValue(event, undefined, undefined);\n          addExceptionMechanism(event, mechanism);\n\n          resolve({\n            ...event,\n            event_id: hint && hint.event_id,\n          });\n        })\n        .then(null, reject),\n    );\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): PromiseLike<Event> {\n    const event: Event = {\n      event_id: hint && hint.event_id,\n      level,\n      message,\n    };\n\n    return new SyncPromise<Event>(resolve => {\n      if (this._options.attachStacktrace && hint && hint.syntheticException) {\n        const stack = hint.syntheticException ? extractStackFromError(hint.syntheticException) : [];\n        parseStack(stack, this._options)\n          .then(frames => {\n            event.stacktrace = {\n              frames: prepareFramesForEvent(frames),\n            };\n            resolve(event);\n          })\n          .then(null, () => {\n            resolve(event);\n          });\n      } else {\n        resolve(event);\n      }\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _setupTransport(): Transport {\n    if (!this._options.dsn) {\n      // We return the noop transport here in case there is no Dsn.\n      return super._setupTransport();\n    }\n\n    const dsn = new Dsn(this._options.dsn);\n\n    const transportOptions: TransportOptions = {\n      ...this._options.transportOptions,\n      ...(this._options.httpProxy && { httpProxy: this._options.httpProxy }),\n      ...(this._options.httpsProxy && { httpsProxy: this._options.httpsProxy }),\n      ...(this._options.caCerts && { caCerts: this._options.caCerts }),\n      dsn: this._options.dsn,\n    };\n\n    if (this._options.transport) {\n      return new this._options.transport(transportOptions);\n    }\n    if (dsn.protocol === 'http') {\n      return new HTTPTransport(transportOptions);\n    }\n    return new HTTPSTransport(transportOptions);\n  }\n}\n", "import { BaseClient, Scope } from '@sentry/core';\nimport { Event, EventHint } from '@sentry/types';\n\nimport { NodeBackend, NodeOptions } from './backend';\nimport { SDK_NAME, SDK_VERSION } from './version';\n\n/**\n * The Sentry Node SDK Client.\n *\n * @see NodeOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class NodeClient extends BaseClient<NodeBackend, NodeOptions> {\n  /**\n   * Creates a new Node SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: NodeOptions) {\n    super(NodeBackend, options);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): PromiseLike<Event | null> {\n    event.platform = event.platform || 'node';\n    event.sdk = {\n      ...event.sdk,\n      name: SDK_NAME,\n      packages: [\n        ...((event.sdk && event.sdk.packages) || []),\n        {\n          name: 'npm:@sentry/node',\n          version: SDK_VERSION,\n        },\n      ],\n      version: SDK_VERSION,\n    };\n\n    if (this.getOptions().serverName) {\n      event.server_name = this.getOptions().serverName;\n    }\n\n    return super._prepareEvent(event, scope, hint);\n  }\n}\n", "import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { getMainCarrier, setHubOnCarrier } from '@sentry/hub';\nimport { getGlobalObject } from '@sentry/utils';\nimport * as domain from 'domain';\n\nimport { NodeOptions } from './backend';\nimport { NodeClient } from './client';\nimport { Console, Http, LinkedErrors, OnUncaughtException, OnUnhandledRejection } from './integrations';\n\nexport const defaultIntegrations = [\n  // Common\n  new CoreIntegrations.InboundFilters(),\n  new CoreIntegrations.FunctionToString(),\n  // Native Wrappers\n  new Console(),\n  new Http(),\n  // Global Handlers\n  new OnUncaughtException(),\n  new OnUnhandledRejection(),\n  // Misc\n  new LinkedErrors(),\n];\n\n/**\n * The Sentry Node SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible in the\n * main entry module. To set context information or send manual events, use the\n * provided methods.\n *\n * @example\n * ```\n *\n * const { init } = require('@sentry/node');\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * const { configureScope } = require('@sentry/node');\n * configureScope((scope: Scope) => {\n *   scope.setExtra({ battery: 0.7 });\n *   scope.setTag({ user_mode: 'admin' });\n *   scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * const { addBreadcrumb } = require('@sentry/node');\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * const Sentry = require('@sentry/node');\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link NodeOptions} for documentation on configuration options.\n */\nexport function init(options: NodeOptions = {}): void {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = defaultIntegrations;\n  }\n\n  if (options.dsn === undefined && process.env.SENTRY_DSN) {\n    options.dsn = process.env.SENTRY_DSN;\n  }\n\n  if (options.tracesSampleRate === undefined && process.env.SENTRY_TRACES_SAMPLE_RATE) {\n    const tracesSampleRate = parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE);\n    if (isFinite(tracesSampleRate)) {\n      options.tracesSampleRate = tracesSampleRate;\n    }\n  }\n\n  if (options.release === undefined) {\n    const global = getGlobalObject<Window>();\n    // Prefer env var over global\n    if (process.env.SENTRY_RELEASE) {\n      options.release = process.env.SENTRY_RELEASE;\n    }\n    // This supports the variable that sentry-webpack-plugin injects\n    else if (global.SENTRY_RELEASE && global.SENTRY_RELEASE.id) {\n      options.release = global.SENTRY_RELEASE.id;\n    }\n  }\n\n  if (options.environment === undefined && process.env.SENTRY_ENVIRONMENT) {\n    options.environment = process.env.SENTRY_ENVIRONMENT;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n  if ((domain as any).active) {\n    setHubOnCarrier(getMainCarrier(), getCurrentHub());\n  }\n\n  initAndBind(NodeClient, options);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient<NodeClient>();\n  if (client) {\n    return client.flush(timeout);\n  }\n  return Promise.reject(false);\n}\n\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient<NodeClient>();\n  if (client) {\n    return client.close(timeout);\n  }\n  return Promise.reject(false);\n}\n", "export { Console } from './console';\nexport { Http } from './http';\nexport { OnUncaughtException } from './onuncaughtexception';\nexport { OnUnhandledRejection } from './onunhandledrejection';\nexport { LinkedErrors } from './linkederrors';\nexport { Modules } from './modules';\n", "import { getCurrentHub } from '@sentry/core';\nimport { Integration, Severity } from '@sentry/types';\nimport { fill } from '@sentry/utils';\nimport * as util from 'util';\n\n/** Console module integration */\nexport class Console implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Console';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = Console.id;\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    const consoleModule = require('console');\n    for (const level of ['debug', 'info', 'warn', 'error', 'log']) {\n      fill(consoleModule, level, createConsoleWrapper(level));\n    }\n  }\n}\n\n/**\n * Wrapper function that'll be used for every console level\n */\nfunction createConsoleWrapper(level: string): (originalConsoleMethod: () => void) => void {\n  return function consoleWrapper(originalConsoleMethod: () => void): () => void {\n    let sentryLevel: Severity;\n\n    switch (level) {\n      case 'debug':\n        sentryLevel = Severity.Debug;\n        break;\n      case 'error':\n        sentryLevel = Severity.Error;\n        break;\n      case 'info':\n        sentryLevel = Severity.Info;\n        break;\n      case 'warn':\n        sentryLevel = Severity.Warning;\n        break;\n      default:\n        sentryLevel = Severity.Log;\n    }\n\n    return function(this: typeof console): void {\n      if (getCurrentHub().getIntegration(Console)) {\n        getCurrentHub().addBreadcrumb(\n          {\n            category: 'console',\n            level: sentryLevel,\n            message: util.format.apply(undefined, arguments),\n          },\n          {\n            input: [...arguments],\n            level,\n          },\n        );\n      }\n\n      originalConsoleMethod.apply(this, arguments);\n    };\n  };\n}\n", "import { getCurrentHub } from '@sentry/core';\nimport * as http from 'http';\nimport { URL } from 'url';\n\n/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n */\nexport function isSentryRequest(url: string): boolean {\n  const dsn = getCurrentHub()\n    .getClient()\n    ?.getDsn();\n  return dsn ? url.includes(dsn.host) : false;\n}\n\n/**\n * Assemble a URL to be used for breadcrumbs and spans.\n *\n * @param requestOptions RequestOptions object containing the component parts for a URL\n * @returns Fully-formed URL\n */\nexport function extractUrl(requestOptions: RequestOptions): string {\n  const protocol = requestOptions.protocol || '';\n  const hostname = requestOptions.hostname || requestOptions.host || '';\n  // Don't log standard :80 (http) and :443 (https) ports to reduce the noise\n  const port =\n    !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 ? '' : `:${requestOptions.port}`;\n  const path = requestOptions.path ? requestOptions.path : '/';\n\n  return `${protocol}//${hostname}${port}${path}`;\n}\n\n/**\n * Handle various edge cases in the span description (for spans representing http(s) requests).\n *\n * @param description current `description` property of the span representing the request\n * @param requestOptions Configuration data for the request\n * @param Request Request object\n *\n * @returns The cleaned description\n */\nexport function cleanSpanDescription(\n  description: string | undefined,\n  requestOptions: RequestOptions,\n  request: http.ClientRequest,\n): string | undefined {\n  // nothing to clean\n  if (!description) {\n    return description;\n  }\n\n  // eslint-disable-next-line prefer-const\n  let [method, requestUrl] = description.split(' ');\n\n  // superagent sticks the protocol in a weird place (we check for host because if both host *and* protocol are missing,\n  // we're likely dealing with an internal route and this doesn't apply)\n  if (requestOptions.host && !requestOptions.protocol) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    requestOptions.protocol = (request as any)?.agent?.protocol; // worst comes to worst, this is undefined and nothing changes\n    requestUrl = extractUrl(requestOptions);\n  }\n\n  // internal routes can end up starting with a triple slash rather than a single one\n  if (requestUrl?.startsWith('///')) {\n    requestUrl = requestUrl.slice(2);\n  }\n\n  return `${method} ${requestUrl}`;\n}\n\n// the node types are missing a few properties which node's `urlToOptions` function spits out\nexport type RequestOptions = http.RequestOptions & { hash?: string; search?: string; pathname?: string; href?: string };\ntype RequestCallback = (response: http.IncomingMessage) => void;\nexport type RequestMethodArgs =\n  | [RequestOptions | string | URL, RequestCallback?]\n  | [string | URL, RequestOptions, RequestCallback?];\nexport type RequestMethod = (...args: RequestMethodArgs) => http.ClientRequest;\n\n/**\n * Convert a URL object into a RequestOptions object.\n *\n * Copied from Node's internals (where it's used in http(s).request() and http(s).get()), modified only to use the\n * RequestOptions type above.\n *\n * See https://github.com/nodejs/node/blob/master/lib/internal/url.js.\n */\nexport function urlToOptions(url: URL): RequestOptions {\n  const options: RequestOptions = {\n    protocol: url.protocol,\n    hostname:\n      typeof url.hostname === 'string' && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,\n    hash: url.hash,\n    search: url.search,\n    pathname: url.pathname,\n    path: `${url.pathname || ''}${url.search || ''}`,\n    href: url.href,\n  };\n  if (url.port !== '') {\n    options.port = Number(url.port);\n  }\n  if (url.username || url.password) {\n    options.auth = `${url.username}:${url.password}`;\n  }\n  return options;\n}\n\n/**\n * Normalize inputs to `http(s).request()` and `http(s).get()`.\n *\n * Legal inputs to `http(s).request()` and `http(s).get()` can take one of ten forms:\n *     [ RequestOptions | string | URL ],\n *     [ RequestOptions | string | URL, RequestCallback ],\n *     [ string | URL, RequestOptions ], and\n *     [ string | URL, RequestOptions, RequestCallback ].\n *\n * This standardizes to one of two forms: [ RequestOptions ] and [ RequestOptions, RequestCallback ]. A similar thing is\n * done as the first step of `http(s).request()` and `http(s).get()`; this just does it early so that we can interact\n * with the args in a standard way.\n *\n * @param requestArgs The inputs to `http(s).request()` or `http(s).get()`, as an array.\n *\n * @returns Equivalent args of the form [ RequestOptions ] or [ RequestOptions, RequestCallback ].\n */\nexport function normalizeRequestArgs(\n  requestArgs: RequestMethodArgs,\n): [RequestOptions] | [RequestOptions, RequestCallback] {\n  let callback, requestOptions;\n\n  // pop off the callback, if there is one\n  if (typeof requestArgs[requestArgs.length - 1] === 'function') {\n    callback = requestArgs.pop() as RequestCallback;\n  }\n\n  // create a RequestOptions object of whatever's at index 0\n  if (typeof requestArgs[0] === 'string') {\n    requestOptions = urlToOptions(new URL(requestArgs[0]));\n  } else if (requestArgs[0] instanceof URL) {\n    requestOptions = urlToOptions(requestArgs[0]);\n  } else {\n    requestOptions = requestArgs[0];\n  }\n\n  // if the options were given separately from the URL, fold them in\n  if (requestArgs.length === 2) {\n    requestOptions = { ...requestOptions, ...requestArgs[1] };\n  }\n\n  // return args in standardized form\n  if (callback) {\n    return [requestOptions, callback];\n  } else {\n    return [requestOptions];\n  }\n}\n", "import { getCurrentHub } from '@sentry/core';\nimport { Integration, Span } from '@sentry/types';\nimport { fill, logger, parseSemver } from '@sentry/utils';\nimport * as http from 'http';\nimport * as https from 'https';\n\nimport {\n  cleanSpanDescription,\n  extractUrl,\n  isSentryRequest,\n  normalizeRequestArgs,\n  RequestMethod,\n  RequestMethodArgs,\n} from './utils/http';\n\nconst NODE_VERSION = parseSemver(process.versions.node);\n\n/** http module integration */\nexport class Http implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Http';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = Http.id;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _breadcrumbs: boolean;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _tracing: boolean;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { breadcrumbs?: boolean; tracing?: boolean } = {}) {\n    this._breadcrumbs = typeof options.breadcrumbs === 'undefined' ? true : options.breadcrumbs;\n    this._tracing = typeof options.tracing === 'undefined' ? false : options.tracing;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    // No need to instrument if we don't want to track anything\n    if (!this._breadcrumbs && !this._tracing) {\n      return;\n    }\n\n    const wrappedHandlerMaker = _createWrappedRequestMethodFactory(this._breadcrumbs, this._tracing);\n\n    const httpModule = require('http');\n    fill(httpModule, 'get', wrappedHandlerMaker);\n    fill(httpModule, 'request', wrappedHandlerMaker);\n\n    // NOTE: Prior to Node 9, `https` used internals of `http` module, thus we don't patch it.\n    // If we do, we'd get double breadcrumbs and double spans for `https` calls.\n    // It has been changed in Node 9, so for all versions equal and above, we patch `https` separately.\n    if (NODE_VERSION.major && NODE_VERSION.major > 8) {\n      const httpsModule = require('https');\n      fill(httpsModule, 'get', wrappedHandlerMaker);\n      fill(httpsModule, 'request', wrappedHandlerMaker);\n    }\n  }\n}\n\n// for ease of reading below\ntype OriginalRequestMethod = RequestMethod;\ntype WrappedRequestMethod = RequestMethod;\ntype WrappedRequestMethodFactory = (original: OriginalRequestMethod) => WrappedRequestMethod;\n\n/**\n * Function which creates a function which creates wrapped versions of internal `request` and `get` calls within `http`\n * and `https` modules. (NB: Not a typo - this is a creator^2!)\n *\n * @param breadcrumbsEnabled Whether or not to record outgoing requests as breadcrumbs\n * @param tracingEnabled Whether or not to record outgoing requests as tracing spans\n *\n * @returns A function which accepts the exiting handler and returns a wrapped handler\n */\nfunction _createWrappedRequestMethodFactory(\n  breadcrumbsEnabled: boolean,\n  tracingEnabled: boolean,\n): WrappedRequestMethodFactory {\n  return function wrappedRequestMethodFactory(originalRequestMethod: OriginalRequestMethod): WrappedRequestMethod {\n    return function wrappedMethod(this: typeof http | typeof https, ...args: RequestMethodArgs): http.ClientRequest {\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      const httpModule = this;\n\n      const requestArgs = normalizeRequestArgs(args);\n      const requestOptions = requestArgs[0];\n      const requestUrl = extractUrl(requestOptions);\n\n      // we don't want to record requests to Sentry as either breadcrumbs or spans, so just use the original method\n      if (isSentryRequest(requestUrl)) {\n        return originalRequestMethod.apply(httpModule, requestArgs);\n      }\n\n      let span: Span | undefined;\n      let parentSpan: Span | undefined;\n\n      const scope = getCurrentHub().getScope();\n      if (scope && tracingEnabled) {\n        parentSpan = scope.getSpan();\n        if (parentSpan) {\n          span = parentSpan.startChild({\n            description: `${requestOptions.method || 'GET'} ${requestUrl}`,\n            op: 'request',\n          });\n\n          const sentryTraceHeader = span.toTraceparent();\n          logger.log(`[Tracing] Adding sentry-trace header to outgoing request: ${sentryTraceHeader}`);\n          requestOptions.headers = { ...requestOptions.headers, 'sentry-trace': sentryTraceHeader };\n        }\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalRequestMethod\n        .apply(httpModule, requestArgs)\n        .once('response', function(this: http.ClientRequest, res: http.IncomingMessage): void {\n          // eslint-disable-next-line @typescript-eslint/no-this-alias\n          const req = this;\n          if (breadcrumbsEnabled) {\n            addRequestBreadcrumb('response', requestUrl, req, res);\n          }\n          if (tracingEnabled && span) {\n            if (res.statusCode) {\n              span.setHttpStatus(res.statusCode);\n            }\n            span.description = cleanSpanDescription(span.description, requestOptions, req);\n            span.finish();\n          }\n        })\n        .once('error', function(this: http.ClientRequest): void {\n          // eslint-disable-next-line @typescript-eslint/no-this-alias\n          const req = this;\n\n          if (breadcrumbsEnabled) {\n            addRequestBreadcrumb('error', requestUrl, req);\n          }\n          if (tracingEnabled && span) {\n            span.setHttpStatus(500);\n            span.description = cleanSpanDescription(span.description, requestOptions, req);\n            span.finish();\n          }\n        });\n    };\n  };\n}\n\n/**\n * Captures Breadcrumb based on provided request/response pair\n */\nfunction addRequestBreadcrumb(event: string, url: string, req: http.ClientRequest, res?: http.IncomingMessage): void {\n  if (!getCurrentHub().getIntegration(Http)) {\n    return;\n  }\n\n  getCurrentHub().addBreadcrumb(\n    {\n      category: 'http',\n      data: {\n        method: req.method,\n        status_code: res && res.statusCode,\n        url,\n      },\n      type: 'http',\n    },\n    {\n      event,\n      request: req,\n      response: res,\n    },\n  );\n}\n", "/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { captureException, getCurrentHub, startTransaction, withScope } from '@sentry/core';\nimport { extractTraceparentData, Span } from '@sentry/tracing';\nimport { Event, Transaction } from '@sentry/types';\nimport {\n  extractNodeRequestData,\n  forget,\n  isPlainObject,\n  isString,\n  logger,\n  stripUrlQueryAndFragment,\n} from '@sentry/utils';\nimport * as domain from 'domain';\nimport * as http from 'http';\nimport * as os from 'os';\n\nimport { NodeClient } from './client';\nimport { flush } from './sdk';\n\nconst DEFAULT_SHUTDOWN_TIMEOUT = 2000;\n\nexport interface ExpressRequest extends http.IncomingMessage {\n  [key: string]: any;\n  baseUrl?: string;\n  ip?: string;\n  originalUrl?: string;\n  route?: {\n    path: string;\n    stack: [\n      {\n        name: string;\n      },\n    ];\n  };\n  user?: {\n    [key: string]: any;\n  };\n}\n\n/**\n * Express-compatible tracing handler.\n * @see Exposed as `Handlers.tracingHandler`\n */\nexport function tracingHandler(): (\n  req: http.IncomingMessage,\n  res: http.ServerResponse,\n  next: (error?: any) => void,\n) => void {\n  return function sentryTracingMiddleware(\n    req: http.IncomingMessage,\n    res: http.ServerResponse,\n    next: (error?: any) => void,\n  ): void {\n    // If there is a trace header set, we extract the data from it (parentSpanId, traceId, and sampling decision)\n    let traceparentData;\n    if (req.headers && isString(req.headers['sentry-trace'])) {\n      traceparentData = extractTraceparentData(req.headers['sentry-trace'] as string);\n    }\n\n    const transaction = startTransaction({\n      name: extractExpressTransactionName(req, { path: true, method: true }),\n      op: 'http.server',\n      ...traceparentData,\n    });\n\n    // We put the transaction on the scope so users can attach children to it\n    getCurrentHub().configureScope(scope => {\n      scope.setSpan(transaction);\n    });\n\n    // We also set __sentry_transaction on the response so people can grab the transaction there to add\n    // spans to it later.\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    (res as any).__sentry_transaction = transaction;\n\n    res.once('finish', () => {\n      // Push `transaction.finish` to the next event loop so open spans have a chance to finish before the transaction\n      // closes\n      setImmediate(() => {\n        addExpressReqToTransaction(transaction, req);\n        transaction.setHttpStatus(res.statusCode);\n        transaction.finish();\n      });\n    });\n\n    next();\n  };\n}\n\n/**\n * Set parameterized as transaction name e.g.: `GET /users/:id`\n * Also adds more context data on the transaction from the request\n */\nfunction addExpressReqToTransaction(transaction: Transaction | undefined, req: ExpressRequest): void {\n  if (!transaction) return;\n  transaction.name = extractExpressTransactionName(req, { path: true, method: true });\n  transaction.setData('url', req.originalUrl);\n  transaction.setData('baseUrl', req.baseUrl);\n  transaction.setData('query', req.query);\n}\n\n/**\n * Extracts complete generalized path from the request object and uses it to construct transaction name.\n *\n * eg. GET /mountpoint/user/:id\n *\n * @param req The ExpressRequest object\n * @param options What to include in the transaction name (method, path, or both)\n *\n * @returns The fully constructed transaction name\n */\nfunction extractExpressTransactionName(\n  req: ExpressRequest,\n  options: { path?: boolean; method?: boolean } = {},\n): string {\n  const method = req.method?.toUpperCase();\n\n  let path = '';\n  if (req.route) {\n    // if the mountpoint is `/`, req.baseUrl is '' (not undefined), so it's safe to include it here\n    // see https://github.com/expressjs/express/blob/508936853a6e311099c9985d4c11a4b1b8f6af07/test/req.baseUrl.js#L7\n    path = `${req.baseUrl}${req.route.path}`;\n  } else if (req.originalUrl || req.url) {\n    path = stripUrlQueryAndFragment(req.originalUrl || req.url || '');\n  }\n\n  let info = '';\n  if (options.method && method) {\n    info += method;\n  }\n  if (options.method && options.path) {\n    info += ` `;\n  }\n  if (options.path && path) {\n    info += path;\n  }\n\n  return info;\n}\n\ntype TransactionNamingScheme = 'path' | 'methodPath' | 'handler';\n\n/** JSDoc */\nfunction extractTransaction(req: ExpressRequest, type: boolean | TransactionNamingScheme): string {\n  switch (type) {\n    case 'path': {\n      return extractExpressTransactionName(req, { path: true });\n    }\n    case 'handler': {\n      return req.route?.stack[0].name || '<anonymous>';\n    }\n    case 'methodPath':\n    default: {\n      return extractExpressTransactionName(req, { path: true, method: true });\n    }\n  }\n}\n\n/** Default user keys that'll be used to extract data from the request */\nconst DEFAULT_USER_KEYS = ['id', 'username', 'email'];\n\n/** JSDoc */\nfunction extractUserData(\n  user: {\n    [key: string]: any;\n  },\n  keys: boolean | string[],\n): { [key: string]: any } {\n  const extractedUser: { [key: string]: any } = {};\n  const attributes = Array.isArray(keys) ? keys : DEFAULT_USER_KEYS;\n\n  attributes.forEach(key => {\n    if (user && key in user) {\n      extractedUser[key] = user[key];\n    }\n  });\n\n  return extractedUser;\n}\n\n/**\n * Options deciding what parts of the request to use when enhancing an event\n */\nexport interface ParseRequestOptions {\n  ip?: boolean;\n  request?: boolean | string[];\n  serverName?: boolean;\n  transaction?: boolean | TransactionNamingScheme;\n  user?: boolean | string[];\n  version?: boolean;\n}\n\n/**\n * Enriches passed event with request data.\n *\n * @param event Will be mutated and enriched with req data\n * @param req Request object\n * @param options object containing flags to enable functionality\n * @hidden\n */\nexport function parseRequest(event: Event, req: ExpressRequest, options?: ParseRequestOptions): Event {\n  // eslint-disable-next-line no-param-reassign\n  options = {\n    ip: false,\n    request: true,\n    serverName: true,\n    transaction: true,\n    user: true,\n    version: true,\n    ...options,\n  };\n\n  if (options.version) {\n    event.contexts = {\n      ...event.contexts,\n      runtime: {\n        name: 'node',\n        version: global.process.version,\n      },\n    };\n  }\n\n  if (options.request) {\n    // if the option value is `true`, use the default set of keys by not passing anything to `extractNodeRequestData()`\n    const extractedRequestData = Array.isArray(options.request)\n      ? extractNodeRequestData(req, options.request)\n      : extractNodeRequestData(req);\n    event.request = {\n      ...event.request,\n      ...extractedRequestData,\n    };\n  }\n\n  if (options.serverName && !event.server_name) {\n    event.server_name = global.process.env.SENTRY_NAME || os.hostname();\n  }\n\n  if (options.user) {\n    const extractedUser = req.user && isPlainObject(req.user) ? extractUserData(req.user, options.user) : {};\n\n    if (Object.keys(extractedUser)) {\n      event.user = {\n        ...event.user,\n        ...extractedUser,\n      };\n    }\n  }\n\n  // client ip:\n  //   node: req.connection.remoteAddress\n  //   express, koa: req.ip\n  if (options.ip) {\n    const ip = req.ip || (req.connection && req.connection.remoteAddress);\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n\n  if (options.transaction && !event.transaction) {\n    event.transaction = extractTransaction(req, options.transaction);\n  }\n\n  return event;\n}\n\nexport type RequestHandlerOptions = ParseRequestOptions & {\n  flushTimeout?: number;\n};\n\n/**\n * Express compatible request handler.\n * @see Exposed as `Handlers.requestHandler`\n */\nexport function requestHandler(\n  options?: RequestHandlerOptions,\n): (req: http.IncomingMessage, res: http.ServerResponse, next: (error?: any) => void) => void {\n  return function sentryRequestMiddleware(\n    req: http.IncomingMessage,\n    res: http.ServerResponse,\n    next: (error?: any) => void,\n  ): void {\n    if (options && options.flushTimeout && options.flushTimeout > 0) {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const _end = res.end;\n      res.end = function(chunk?: any | (() => void), encoding?: string | (() => void), cb?: () => void): void {\n        flush(options.flushTimeout)\n          .then(() => {\n            _end.call(this, chunk, encoding, cb);\n          })\n          .then(null, e => {\n            logger.error(e);\n          });\n      };\n    }\n    const local = domain.create();\n    local.add(req);\n    local.add(res);\n    local.on('error', next);\n    local.run(() => {\n      getCurrentHub().configureScope(scope =>\n        scope.addEventProcessor((event: Event) => parseRequest(event, req, options)),\n      );\n      next();\n    });\n  };\n}\n\n/** JSDoc */\ninterface MiddlewareError extends Error {\n  status?: number | string;\n  statusCode?: number | string;\n  status_code?: number | string;\n  output?: {\n    statusCode?: number | string;\n  };\n}\n\n/** JSDoc */\nfunction getStatusCodeFromResponse(error: MiddlewareError): number {\n  const statusCode = error.status || error.statusCode || error.status_code || (error.output && error.output.statusCode);\n  return statusCode ? parseInt(statusCode as string, 10) : 500;\n}\n\n/** Returns true if response code is internal server error */\nfunction defaultShouldHandleError(error: MiddlewareError): boolean {\n  const status = getStatusCodeFromResponse(error);\n  return status >= 500;\n}\n\n/**\n * Express compatible error handler.\n * @see Exposed as `Handlers.errorHandler`\n */\nexport function errorHandler(options?: {\n  /**\n   * Callback method deciding whether error should be captured and sent to Sentry\n   * @param error Captured middleware error\n   */\n  shouldHandleError?(error: MiddlewareError): boolean;\n}): (\n  error: MiddlewareError,\n  req: http.IncomingMessage,\n  res: http.ServerResponse,\n  next: (error: MiddlewareError) => void,\n) => void {\n  return function sentryErrorMiddleware(\n    error: MiddlewareError,\n    _req: http.IncomingMessage,\n    res: http.ServerResponse,\n    next: (error: MiddlewareError) => void,\n  ): void {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    const shouldHandleError = (options && options.shouldHandleError) || defaultShouldHandleError;\n\n    if (shouldHandleError(error)) {\n      withScope(_scope => {\n        // For some reason we need to set the transaction on the scope again\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        const transaction = (res as any).__sentry_transaction as Span;\n        if (transaction && _scope.getSpan() === undefined) {\n          _scope.setSpan(transaction);\n        }\n        const eventId = captureException(error);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        (res as any).sentry = eventId;\n        next(error);\n      });\n\n      return;\n    }\n\n    next(error);\n  };\n}\n\n/**\n * @hidden\n */\nexport function logAndExitProcess(error: Error): void {\n  // eslint-disable-next-line no-console\n  console.error(error && error.stack ? error.stack : error);\n\n  const client = getCurrentHub().getClient<NodeClient>();\n\n  if (client === undefined) {\n    logger.warn('No NodeClient was defined, we are exiting the process now.');\n    global.process.exit(1);\n    return;\n  }\n\n  const options = client.getOptions();\n  const timeout =\n    (options && options.shutdownTimeout && options.shutdownTimeout > 0 && options.shutdownTimeout) ||\n    DEFAULT_SHUTDOWN_TIMEOUT;\n  forget(\n    client.close(timeout).then((result: boolean) => {\n      if (!result) {\n        logger.warn('We reached the timeout for emptying the request buffer, still exiting now!');\n      }\n      global.process.exit(1);\n    }),\n  );\n}\n", "import { getCurrentHub, Scope } from '@sentry/core';\nimport { Integration, Severity } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { NodeClient } from '../client';\nimport { logAndExitProcess } from '../handlers';\n\n/** Global Promise Rejection handler */\nexport class OnUncaughtException implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'OnUncaughtException';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = OnUncaughtException.id;\n\n  /**\n   * @inheritDoc\n   */\n  public readonly handler: (error: Error) => void = this._makeErrorHandler();\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(\n    private readonly _options: {\n      /**\n       * Default onFatalError handler\n       * @param firstError Error that has been thrown\n       * @param secondError If this was called multiple times this will be set\n       */\n      onFatalError?(firstError: Error, secondError?: Error): void;\n    } = {},\n  ) {}\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    global.process.on('uncaughtException', this.handler.bind(this));\n  }\n\n  /**\n   * @hidden\n   */\n  private _makeErrorHandler(): (error: Error) => void {\n    const timeout = 2000;\n    let caughtFirstError: boolean = false;\n    let caughtSecondError: boolean = false;\n    let calledFatalError: boolean = false;\n    let firstError: Error;\n\n    return (error: Error): void => {\n      type onFatalErrorHandlerType = (firstError: Error, secondError?: Error) => void;\n\n      let onFatalError: onFatalErrorHandlerType = logAndExitProcess;\n      const client = getCurrentHub().getClient<NodeClient>();\n\n      if (this._options.onFatalError) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        onFatalError = this._options.onFatalError;\n      } else if (client && client.getOptions().onFatalError) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        onFatalError = client.getOptions().onFatalError as onFatalErrorHandlerType;\n      }\n\n      if (!caughtFirstError) {\n        const hub = getCurrentHub();\n\n        // this is the first uncaught error and the ultimate reason for shutting down\n        // we want to do absolutely everything possible to ensure it gets captured\n        // also we want to make sure we don't go recursion crazy if more errors happen after this one\n        firstError = error;\n        caughtFirstError = true;\n\n        if (hub.getIntegration(OnUncaughtException)) {\n          hub.withScope((scope: Scope) => {\n            scope.setLevel(Severity.Fatal);\n            hub.captureException(error, { originalException: error });\n            if (!calledFatalError) {\n              calledFatalError = true;\n              onFatalError(error);\n            }\n          });\n        } else {\n          if (!calledFatalError) {\n            calledFatalError = true;\n            onFatalError(error);\n          }\n        }\n      } else if (calledFatalError) {\n        // we hit an error *after* calling onFatalError - pretty boned at this point, just shut it down\n        logger.warn('uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown');\n        logAndExitProcess(error);\n      } else if (!caughtSecondError) {\n        // two cases for how we can hit this branch:\n        //   - capturing of first error blew up and we just caught the exception from that\n        //     - quit trying to capture, proceed with shutdown\n        //   - a second independent error happened while waiting for first error to capture\n        //     - want to avoid causing premature shutdown before first error capture finishes\n        // it's hard to immediately tell case 1 from case 2 without doing some fancy/questionable domain stuff\n        // so let's instead just delay a bit before we proceed with our action here\n        // in case 1, we just wait a bit unnecessarily but ultimately do the same thing\n        // in case 2, the delay hopefully made us wait long enough for the capture to finish\n        // two potential nonideal outcomes:\n        //   nonideal case 1: capturing fails fast, we sit around for a few seconds unnecessarily before proceeding correctly by calling onFatalError\n        //   nonideal case 2: case 2 happens, 1st error is captured but slowly, timeout completes before capture and we treat second error as the sendErr of (nonexistent) failure from trying to capture first error\n        // note that after hitting this branch, we might catch more errors where (caughtSecondError && !calledFatalError)\n        //   we ignore them - they don't matter to us, we're just waiting for the second error timeout to finish\n        caughtSecondError = true;\n        setTimeout(() => {\n          if (!calledFatalError) {\n            // it was probably case 1, let's treat err as the sendErr and call onFatalError\n            calledFatalError = true;\n            onFatalError(firstError, error);\n          } else {\n            // it was probably case 2, our first error finished capturing while we waited, cool, do nothing\n          }\n        }, timeout); // capturing could take at least sendTimeout to fail, plus an arbitrary second for how long it takes to collect surrounding source etc\n      }\n    };\n  }\n}\n", "import { getCurrentHub, Scope } from '@sentry/core';\nimport { Integration } from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\n\nimport { logAndExitProcess } from '../handlers';\n\ntype UnhandledRejectionMode = 'none' | 'warn' | 'strict';\n\n/** Global Promise Rejection handler */\nexport class OnUnhandledRejection implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'OnUnhandledRejection';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = OnUnhandledRejection.id;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(\n    private readonly _options: {\n      /**\n       * Option deciding what to do after capturing unhandledRejection,\n       * that mimicks behavior of node's --unhandled-rejection flag.\n       */\n      mode: UnhandledRejectionMode;\n    } = { mode: 'warn' },\n  ) {}\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    global.process.on('unhandledRejection', this.sendUnhandledPromise.bind(this));\n  }\n\n  /**\n   * Send an exception with reason\n   * @param reason string\n   * @param promise promise\n   */\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n  public sendUnhandledPromise(reason: any, promise: any): void {\n    const hub = getCurrentHub();\n\n    if (!hub.getIntegration(OnUnhandledRejection)) {\n      this._handleRejection(reason);\n      return;\n    }\n\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n    const context = (promise.domain && promise.domain.sentryContext) || {};\n\n    hub.withScope((scope: Scope) => {\n      scope.setExtra('unhandledPromiseRejection', true);\n\n      // Preserve backwards compatibility with raven-node for now\n      if (context.user) {\n        scope.setUser(context.user);\n      }\n      if (context.tags) {\n        scope.setTags(context.tags);\n      }\n      if (context.extra) {\n        scope.setExtras(context.extra);\n      }\n\n      hub.captureException(reason, { originalException: promise });\n    });\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n    this._handleRejection(reason);\n  }\n\n  /**\n   * Handler for `mode` option\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _handleRejection(reason: any): void {\n    // https://github.com/nodejs/node/blob/7cf6f9e964aa00772965391c23acda6d71972a9a/lib/internal/process/promises.js#L234-L240\n    const rejectionWarning =\n      'This error originated either by ' +\n      'throwing inside of an async function without a catch block, ' +\n      'or by rejecting a promise which was not handled with .catch().' +\n      ' The promise rejected with the reason:';\n\n    /* eslint-disable no-console */\n    if (this._options.mode === 'warn') {\n      consoleSandbox(() => {\n        console.warn(rejectionWarning);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        console.error(reason && reason.stack ? reason.stack : reason);\n      });\n    } else if (this._options.mode === 'strict') {\n      consoleSandbox(() => {\n        console.warn(rejectionWarning);\n      });\n      logAndExitProcess(reason);\n    }\n    /* eslint-enable no-console */\n  }\n}\n", "import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types';\nimport { isInstanceOf, SyncPromise } from '@sentry/utils';\n\nimport { getExceptionFromError } from '../parsers';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\n/** Adds SDK info to an event. */\nexport class LinkedErrors implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'LinkedErrors';\n\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string = LinkedErrors.id;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _key: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _limit: number;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { key?: string; limit?: number } = {}) {\n    this._key = options.key || DEFAULT_KEY;\n    this._limit = options.limit || DEFAULT_LIMIT;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    addGlobalEventProcessor((event: Event, hint?: EventHint) => {\n      const self = getCurrentHub().getIntegration(LinkedErrors);\n      if (self) {\n        const handler = self._handler && self._handler.bind(self);\n        return typeof handler === 'function' ? handler(event, hint) : event;\n      }\n      return event;\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  private _handler(event: Event, hint?: EventHint): PromiseLike<Event> {\n    if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n      return SyncPromise.resolve(event);\n    }\n\n    return new SyncPromise<Event>(resolve => {\n      this._walkErrorTree(hint.originalException as Error, this._key)\n        .then((linkedErrors: Exception[]) => {\n          if (event && event.exception && event.exception.values) {\n            event.exception.values = [...linkedErrors, ...event.exception.values];\n          }\n          resolve(event);\n        })\n        .then(null, () => {\n          resolve(event);\n        });\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  private _walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): PromiseLike<Exception[]> {\n    if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {\n      return SyncPromise.resolve(stack);\n    }\n    return new SyncPromise<Exception[]>((resolve, reject) => {\n      getExceptionFromError(error[key])\n        .then((exception: Exception) => {\n          this._walkErrorTree(error[key], key, [exception, ...stack])\n            .then(resolve)\n            .then(null, () => {\n              reject();\n            });\n        })\n        .then(null, () => {\n          reject();\n        });\n    });\n  }\n}\n", "import { EventProcessor, Hub, Integration } from '@sentry/types';\nimport { existsSync, readFileSync } from 'fs';\nimport { dirname, join } from 'path';\n\nlet moduleCache: { [key: string]: string };\n\n/** Extract information about paths */\nfunction getPaths(): string[] {\n  try {\n    return require.cache ? Object.keys(require.cache as Record<string, unknown>) : [];\n  } catch (e) {\n    return [];\n  }\n}\n\n/** Extract information about package.json modules */\nfunction collectModules(): {\n  [name: string]: string;\n} {\n  const mainPaths = (require.main && require.main.paths) || [];\n  const paths = getPaths();\n  const infos: {\n    [name: string]: string;\n  } = {};\n  const seen: {\n    [path: string]: boolean;\n  } = {};\n\n  paths.forEach(path => {\n    let dir = path;\n\n    /** Traverse directories upward in the search of package.json file */\n    const updir = (): void | (() => void) => {\n      const orig = dir;\n      dir = dirname(orig);\n\n      if (!dir || orig === dir || seen[orig]) {\n        return undefined;\n      }\n      if (mainPaths.indexOf(dir) < 0) {\n        return updir();\n      }\n\n      const pkgfile = join(orig, 'package.json');\n      seen[orig] = true;\n\n      if (!existsSync(pkgfile)) {\n        return updir();\n      }\n\n      try {\n        const info = JSON.parse(readFileSync(pkgfile, 'utf8')) as {\n          name: string;\n          version: string;\n        };\n        infos[info.name] = info.version;\n      } catch (_oO) {\n        // no-empty\n      }\n    };\n\n    updir();\n  });\n\n  return infos;\n}\n\n/** Add node modules / packages to the event */\nexport class Modules implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Modules';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = Modules.id;\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    addGlobalEventProcessor(event => {\n      if (!getCurrentHub().getIntegration(Modules)) {\n        return event;\n      }\n      return {\n        ...event,\n        modules: this._getModules(),\n      };\n    });\n  }\n\n  /** Fetches the list of modules and the versions loaded by the entry file for your node.js app. */\n  private _getModules(): { [key: string]: string } {\n    if (!moduleCache) {\n      moduleCache = collectModules();\n    }\n    return moduleCache;\n  }\n}\n", "export {\n  Breadcrumb,\n  BreadcrumbHint,\n  Request,\n  SdkInfo,\n  Event,\n  EventHint,\n  Exception,\n  Response,\n  Severity,\n  StackFrame,\n  Stacktrace,\n  Status,\n  Thread,\n  User,\n} from '@sentry/types';\n\nexport {\n  addGlobalEventProcessor,\n  addBreadcrumb,\n  captureException,\n  captureEvent,\n  captureMessage,\n  configureScope,\n  getHubFromCarrier,\n  getCurrentHub,\n  Hub,\n  makeMain,\n  Scope,\n  startTransaction,\n  setContext,\n  setExtra,\n  setExtras,\n  setTag,\n  setTags,\n  setUser,\n  withScope,\n} from '@sentry/core';\n\nexport { NodeBackend, NodeOptions } from './backend';\nexport { NodeClient } from './client';\nexport { defaultIntegrations, init, lastEventId, flush, close } from './sdk';\nexport { SDK_NAME, SDK_VERSION } from './version';\n\nimport { Integrations as CoreIntegrations } from '@sentry/core';\nimport { getMainCarrier } from '@sentry/hub';\nimport * as domain from 'domain';\n\nimport * as Handlers from './handlers';\nimport * as NodeIntegrations from './integrations';\nimport * as Transports from './transports';\n\nconst INTEGRATIONS = {\n  ...CoreIntegrations,\n  ...NodeIntegrations,\n};\n\nexport { INTEGRATIONS as Integrations, Transports, Handlers };\n\n// We need to patch domain on the global __SENTRY__ object to make it work for node in cross-platform packages like\n// @sentry/hub. If we don't do this, browser bundlers will have troubles resolving `require('domain')`.\nconst carrier = getMainCarrier();\nif (carrier.__SENTRY__) {\n  carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n  carrier.__SENTRY__.extensions.domain = carrier.__SENTRY__.extensions.domain || domain;\n}\n", "/**\n * Loose non-null (non-undefined) filter.\n * This method can be used as predicate for Array methods.\n */\nexport function isNotNull<T>(value: T | null | undefined): value is T {\n  return value != null\n}\n", "export function invariant(value: unknown, message?: string): asserts value {\n  if (value == null || value === false) {\n    throw new Error(message)\n  }\n}\n", "import { invariant } from './assert'\n\nexport function isArray<T>(value: any): value is T[] {\n  return Array.isArray(value)\n}\n\nexport function first<T>(items: T[] | readonly T[]): T {\n  if (items.length === 0) throw new Error('IndexOutOfBounds')\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  return items[0]!\n}\n\nexport function last<T>(items: T[] | readonly T[], nth: number = 1): T {\n  const index = items.length - nth\n  if (index < 0 || index >= items.length) throw new Error('IndexOutOfBounds')\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  return items[index]!\n}\n\nexport function findPrevSibling<T>(\n  items: T[] | readonly T[],\n  item: T,\n): T | undefined {\n  const index = items.indexOf(item)\n  if (index > 0) return items[index - 1]\n  else return undefined\n}\n\nexport function findNextSibling<T>(\n  items: T[] | readonly T[],\n  item: T,\n): T | undefined {\n  const index = items.indexOf(item)\n  if (index >= 0) return items[index + 1]\n  else return undefined\n}\n\nexport function concat<T>(\n  a: T[] | Readonly<T[]> | undefined,\n  b: T[] | Readonly<T[]> | undefined,\n): T[] {\n  const c: T[] = []\n\n  if (isArray(a)) c.push(...a)\n  if (isArray(b)) c.push(...b)\n\n  return c\n}\n\ntype FlatArray<Arr, Depth extends number> = {\n  done: Arr\n  recur: Arr extends ReadonlyArray<infer InnerArr>\n    ? FlatArray<\n        InnerArr,\n        [\n          -1,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n        ][Depth]\n      >\n    : Arr\n}[Depth extends -1 ? 'done' : 'recur']\n\nexport function flatten<T extends unknown, D extends number = 1>(\n  array: T,\n  depth: D = 1 as D,\n): Array<FlatArray<T, D>> {\n  const items: Array<FlatArray<T, D>> = []\n\n  if (Array.isArray(array)) {\n    array.forEach((item) => {\n      if (Array.isArray(item)) {\n        if (depth > 1) items.push(...flatten(item, depth - 1))\n        else items.push(...item)\n      } else {\n        items.push(item)\n      }\n    })\n  }\n\n  return items\n}\n\ntype Chunk<T, Size extends number> = {\n  done: []\n  recurr: [\n    T,\n    ...Chunk<\n      T,\n      [\n        -1,\n        0,\n        1,\n        2,\n        3,\n        4,\n        5,\n        6,\n        7,\n        8,\n        9,\n        10,\n        11,\n        12,\n        13,\n        14,\n        15,\n        16,\n        17,\n        18,\n        19,\n        20,\n      ][Size]\n    >,\n  ]\n}[Size extends 0 ? 'done' : 'recurr']\n\nexport function chunk<T, D extends number>(\n  items: T[],\n  chunkSize: D,\n): Array<Chunk<T, D>> {\n  const chunks: Array<Chunk<T, D>> = []\n  for (let i = 0; i < items.length; i += chunkSize) {\n    chunks.push(items.slice(i, i + chunkSize) as Chunk<T, D>)\n  }\n\n  return chunks\n}\n\nexport const BinarySearchBias = {\n  GREATEST_LOWER_BOUND: 1,\n  LEAST_UPPER_BOUND: 2,\n}\n\ntype BinarySearchBiasType =\n  typeof BinarySearchBias[keyof typeof BinarySearchBias]\nfunction recursiveSearch<T>(\n  low: number,\n  high: number,\n  needle: T,\n  haystack: T[],\n  compare: (a: T, b: T) => number,\n  bias: BinarySearchBiasType,\n): number {\n  if (haystack.length === 0) return -1\n  const mid = Math.floor((low + high) / 2)\n  const value = haystack[mid] as T\n  const comparison = ((): number => {\n    try {\n      return compare(needle, value)\n    } catch (e) {\n      throw new Error(\n        `ComparisonError: ${\n          (e as Error).message\n        }. low: ${low}, high: ${high}, mid: ${mid}`,\n      )\n    }\n  })()\n\n  if (comparison === 0) return mid\n  else if (comparison > 0) {\n    if (high - mid > 1) {\n      return recursiveSearch(mid, high, needle, haystack, compare, bias)\n    }\n\n    if (bias === BinarySearchBias.LEAST_UPPER_BOUND) {\n      return high < haystack.length ? high : -1\n    } else {\n      return mid\n    }\n  } else {\n    if (mid - low > 1) {\n      return recursiveSearch(low, mid, needle, haystack, compare, bias)\n    }\n\n    if (bias === BinarySearchBias.GREATEST_LOWER_BOUND) {\n      return low < 0 ? -1 : low\n    } else {\n      return mid\n    }\n  }\n}\n\nexport function binarySearch<T>(\n  needle: T,\n  haystack: T[],\n  compare: (a: T, b: T) => number,\n  bias: BinarySearchBiasType = BinarySearchBias.GREATEST_LOWER_BOUND,\n): number {\n  let index = recursiveSearch(\n    -1,\n    haystack.length,\n    needle,\n    haystack,\n    compare,\n    bias,\n  )\n\n  if (index < 0) return -1\n\n  while (\n    index > 0 &&\n    compare(haystack[index] as T, haystack[index - 1] as T) === 0\n  ) {\n    --index\n  }\n\n  return index\n}\n\nexport function binarySearchKey<T, U>(\n  array: readonly T[],\n  key: U,\n  keySelector: (value: T, index: number) => U,\n  keyComparer: (a: U, b: U) => number,\n  offset: number = 0,\n): number {\n  if (array.length === 0) return -1\n\n  let low = offset\n  let high = array.length - 1\n  while (low <= high) {\n    const middle = low + ((high - low) >> 1)\n    const middleValue = array[middle]\n    invariant(middleValue != null)\n    const midKey = keySelector(middleValue, middle)\n    const comparison = keyComparer(midKey, key)\n    if (comparison === 0) return middle\n    else if (comparison < 0) low = middle + 1\n    else high = middle - 1\n  }\n\n  return ~low\n}\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\nexport interface Cache<K, V> {\n  has(key: K): boolean\n  get(key: K): V | undefined\n  set(key: K, value: V): void\n  delete(key: K): void\n  clear(): void\n\n  resolve(key: K, getter: (key: K) => V): V\n  resolveAsync(key: K, getter: (key: K) => Promise<V>): Promise<V>\n}\n\nabstract class BaseCache<K, V> implements Cache<K, V> {\n  abstract has(key: K): boolean\n  abstract get(key: K): V | undefined\n  abstract set(key: K, value: V): void\n  abstract delete(key: K): void\n  abstract clear(): void\n\n  resolve(key: K, getter: (key: K) => V): V {\n    if (this.has(key)) {\n      if (__DEV__) console.debug('[cache] hit', key)\n      return this.get(key) as V\n    }\n\n    if (__DEV__) console.debug('[cache] miss', key)\n    const value = getter(key)\n\n    this.set(key, value)\n\n    return value\n  }\n\n  private readonly promises = new Map<K, Promise<V>>()\n\n  async resolveAsync(key: K, getter: (key: K) => Promise<V>): Promise<V> {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    if (this.has(key)) return this.get(key)!\n\n    const promise = this.promises.get(key) ?? getter(key)\n    this.promises.set(key, promise)\n    try {\n      const value = await promise\n      this.set(key, value)\n\n      return value\n    } finally {\n      this.promises.delete(key)\n    }\n  }\n}\n\nclass LRU<K, V> extends BaseCache<K, V> implements Cache<K, V> {\n  private current = new Map<K, V>()\n  private previous = new Map<K, V>()\n\n  constructor(public readonly maxSize: number) {\n    super()\n  }\n\n  has(key: K): boolean {\n    return this.current.has(key) || this.previous.has(key)\n  }\n\n  get(key: K): V | undefined {\n    if (this.current.has(key)) return this.current.get(key)\n    else if (this.previous.has(key)) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const value = this.previous.get(key)!\n      this.set(key, value)\n\n      return value\n    } else return undefined\n  }\n\n  set(key: K, value: V): void {\n    this.current.set(key, value)\n    if (this.current.size > this.maxSize) {\n      this.previous = this.current\n      this.current = new Map()\n    }\n  }\n\n  delete(key: K): void {\n    this.current.delete(key)\n    this.previous.delete(key)\n  }\n\n  clear(): void {\n    this.current.clear()\n    this.previous.clear()\n  }\n}\n\nclass WeakCache<K extends object, V> extends BaseCache<K, V> {\n  private storage = new WeakMap<K, V>()\n\n  has(key: K): boolean {\n    return this.storage.has(key)\n  }\n\n  get(key: K): V | undefined {\n    return this.storage.get(key)\n  }\n\n  set(key: K, value: V): void {\n    this.storage.set(key, value)\n  }\n\n  delete(key: K): void {\n    this.storage.delete(key)\n  }\n\n  clear(): void {\n    this.storage = new WeakMap()\n  }\n}\n\nclass VersionedCache<K, Ver, V> extends BaseCache<K, V> implements Cache<K, V> {\n  private readonly storage: LRU<K, { version: Ver; value: V }>\n\n  constructor(\n    size: number,\n    private readonly getVersion: (key: K) => Ver,\n    private readonly compareVersion: (a: Ver, b: Ver) => boolean,\n  ) {\n    super()\n    this.storage = new LRU(size)\n  }\n\n  private isValid(key: K, value: { version: Ver; value: V }): boolean {\n    return this.compareVersion(value.version, this.getVersion(key))\n  }\n\n  has(key: K): boolean {\n    return this.storage.has(key) && this.isValid(key, this.storage.get(key)!)\n  }\n\n  get(key: K): V | undefined {\n    if (this.has(key)) return this.storage.get(key)!.value\n    else return undefined\n  }\n\n  set(key: K, value: V): void {\n    this.storage.set(key, { version: this.getVersion(key), value })\n  }\n\n  delete(key: K): void {\n    this.storage.delete(key)\n  }\n\n  clear(): void {\n    this.storage.clear()\n  }\n}\n\nconst DEFAULT_CACHE_SIZE = 100\n\nexport function createCache<K, V>(\n  size: number = DEFAULT_CACHE_SIZE,\n): Cache<K, V> {\n  return new LRU(size)\n}\n\nexport function createWeakMapCache<K extends object, V>(): Cache<K, V> {\n  return new WeakCache()\n}\n\nexport function createMultiKeyCache<K, V, R = unknown>(\n  getSecondaryKey: (key: K) => R,\n  size: number = DEFAULT_CACHE_SIZE,\n  compare: (a: R, b: R) => boolean = (a, b) => a === b,\n): Cache<K, V> {\n  return new VersionedCache(size, (key) => getSecondaryKey(key), compare)\n}\n\nexport function createVersionedCache<\n  K,\n  V,\n  Version extends string | number = string | number,\n>(\n  getVersion: (key: K) => Version,\n  size: number = DEFAULT_CACHE_SIZE,\n): Cache<K, V> {\n  return createMultiKeyCache(getVersion, size)\n}\n\nexport function versionedAsync<T extends unknown[], R = unknown>(\n  getKey: (args: T) => R = (args) =>\n    args[0] as T extends [k: infer K] ? K & R : never,\n  size: number = DEFAULT_CACHE_SIZE,\n  versionFn: unknown & string = 'getVersion',\n): MethodDecorator {\n  return versioned(getKey, size, versionFn, true)\n}\n\nconst store = new Map<\n  any,\n  Map<string | symbol | number, WeakMap<any, Cache<any, any>>>\n>()\n\nfunction addToStore(\n  target: any,\n  property: string | symbol | number,\n  cache: WeakMap<any, any>,\n): void {\n  const current = store.get(target) ?? new Map()\n\n  current.set(property, cache)\n\n  if (!store.has(target)) store.set(target, current)\n}\n\nfunction getOrCreate<K, V>(\n  map: Map<K, V> | WeakMap<K & object, V>,\n  create: (key: K) => V,\n): (key: K) => V {\n  return (key: any) => {\n    const value = map.get(key) ?? create(key)\n\n    if (!map.has(key)) map.set(key, value)\n\n    return value\n  }\n}\n\n/** Cache results using as secondary version key. */\nexport function versioned<T extends unknown[], R = unknown>(\n  getKey: (args: T) => R = (args) =>\n    args[0] as T extends [k: infer K] ? K & R : never,\n  size: number = DEFAULT_CACHE_SIZE,\n  versionFn: unknown & string = 'getVersion',\n  isAsync: boolean = false,\n): MethodDecorator {\n  const method = isAsync ? 'resolveAsync' : 'resolve'\n  return (target, propertyKey, descriptor) => {\n    const fn = descriptor?.value as unknown as (...args: T) => any\n    if (typeof fn === 'function') {\n      const caches = new WeakMap<typeof target, Cache<R, any>>()\n      const using = getOrCreate(caches, (instance) => {\n        const getVersion = instance[versionFn as keyof typeof target] as (\n          key: R,\n        ) => string | number\n        if (typeof getVersion !== 'function')\n          throw new Error(`${JSON.stringify(versionFn)} is not a function`)\n\n        return createVersionedCache(\n          (key) => getVersion.call(instance, key),\n          size,\n        )\n      })\n      addToStore(target, propertyKey, caches)\n\n      descriptor.value = function (this: any, ...args: T): any {\n        return using(this)[method](getKey(args), () => fn.apply(this, args))\n      } as any\n    } else {\n      throw new Error(`${JSON.stringify(propertyKey)} is not a function`)\n    }\n    return descriptor\n  }\n}\n\nexport function cache<T extends unknown[], I = unknown, R = unknown>(\n  getKey: (args: T, instance: I) => R = (args) => args[0] as R,\n  isAsync: boolean = false,\n  isWeak: boolean = false,\n): MethodDecorator {\n  const method = isAsync ? 'resolveAsync' : 'resolve'\n  return (target, propertyKey, descriptor) => {\n    const fn = descriptor?.value as unknown as (...args: T) => any\n    if (typeof fn === 'function') {\n      const caches = new WeakMap<typeof target, Cache<R, any>>()\n      addToStore(target, propertyKey, caches)\n\n      const using = getOrCreate(caches, () => {\n        return isWeak ? createWeakMapCache() : createCache(DEFAULT_CACHE_SIZE)\n      })\n\n      descriptor.value = function (this: any, ...args: T): any {\n        return using(this)[method](getKey(args, this) as any, () =>\n          fn.apply(this, args),\n        )\n      } as any\n    } else {\n      throw new Error(`${JSON.stringify(propertyKey)} is not a function`)\n    }\n    return descriptor\n  }\n}\n\nexport function cacheAsync<T extends unknown[], R = unknown>(\n  getKey: (args: T) => R = (args) => args[0] as R,\n): MethodDecorator {\n  return cache(getKey, true)\n}\n\nexport function cacheAll<T extends unknown[], R = unknown>(\n  getKey: (args: T) => R = (args) => args[0] as R,\n): MethodDecorator {\n  return cache(getKey, false, true)\n}\n\nexport function cacheAllAsync<T extends unknown[], R = unknown>(\n  getKey: (args: T) => R = (args) => args[0] as R,\n): MethodDecorator {\n  return cache(getKey, true, true)\n}\n\nexport function clearMethodCache(\n  instance: object,\n  propertyKey: string | symbol | number,\n): void {\n  const target = Object.getPrototypeOf(instance)\n\n  store.get(target)?.get(propertyKey)?.get(instance)?.clear()\n}\n", "import * as Path from 'path'\nimport * as OS from 'os'\n\nexport function toPosixPath(path: string): string {\n  return path.includes('\\\\') ? path.replace(/\\\\/g, '/') : path\n}\n\nexport function toWindowsPath(path: string): string {\n  return path.includes('/') ? path.replace(/\\//g, '\\\\') : path\n}\n\nexport const toPlatformPath =\n  /* istanbul ignore next */\n  OS.platform() === 'win32' ? toWindowsPath : toPosixPath\n\nexport function getRelativeFileName(\n  importingFileName: string,\n  importedFileName: string,\n): string {\n  importingFileName = toPosixPath(importingFileName)\n  importedFileName = toPosixPath(importedFileName)\n\n  if (\n    Path.posix.isAbsolute(importingFileName) &&\n    Path.posix.isAbsolute(importedFileName)\n  ) {\n    const fileName = Path.posix.relative(\n      Path.posix.dirname(importingFileName),\n      importedFileName,\n    )\n\n    return fileName.startsWith('.') ? fileName : `./${fileName}`\n  }\n\n  return importedFileName\n}\n", "import { first } from './array'\n\nexport function isString(value: any): value is string {\n  return typeof value === 'string'\n}\n\nconst cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {\n  const cache: Record<string, string> = Object.create(null)\n  return ((str: string) => {\n    const hit = cache[str]\n    return hit ?? (cache[str] = fn(str))\n  }) as any\n}\n\nconst camelizeRE = /[^A-Za-z0-9]+([A-Za-z0-9])?/g\nexport const camelize = cacheStringFunction((str: string): string => {\n  return uncapitalize(\n    str.replace(camelizeRE, (_, c) =>\n      typeof c === 'string' ? c.toUpperCase() : '',\n    ),\n  )\n})\n\nexport const camelCase = camelize\n\nconst hyphenateRE = /\\B([A-Z])/g\nexport const hyphenate = cacheStringFunction((str: string): string => {\n  return camelize(str).replace(hyphenateRE, '-$1').toLowerCase()\n})\n\nexport const capitalize = cacheStringFunction((str: string): string => {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n})\n\nexport const uncapitalize = cacheStringFunction((str: string): string => {\n  return str.charAt(0).toLowerCase() + str.slice(1)\n})\n\nexport const pascalCase = cacheStringFunction((str: string) =>\n  capitalize(camelize(str)),\n)\nexport const kebabCase = hyphenate\n\nexport function isKebabCase(str: string): boolean {\n  return str.includes('-') || /^[a-z0-9]+$/.test(str)\n}\n\nexport function isPascalCase(str: string): boolean {\n  return /^[A-Z][A-Za-z0-9]*$/.test(str)\n}\n\nexport function isCamelCase(str: string): boolean {\n  return /^[a-z][A-Za-z0-9]*$/.test(str)\n}\n\nexport function generateUUID(): string {\n  return new Array(4)\n    .fill(0)\n    .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n    .join('-')\n}\n\nexport function ucfirst(str: string): string {\n  return str.slice(0, 1).toUpperCase() + str.slice(1)\n}\n\nexport function lcfirst(str: string): string {\n  return str.slice(0, 1).toLowerCase() + str.slice(1)\n}\n\nexport function trimIndent(content: string): string {\n  const lines = content\n    .trimStart()\n    .replace(/\\n\\s*$/, '')\n    .split('\\n')\n\n  const indent = lines.slice(1).reduce((min, line) => {\n    const match = line.match(/^\\s+/)\n    const len = match?.[0] != null ? match[0].length : 0\n    return Math.min(min, len)\n  }, Infinity)\n  if (lines.length <= 1) return first(lines) + '\\n'\n  return (\n    first(lines) +\n    '\\n' +\n    lines\n      .slice(1)\n      .map((line) => line.slice(indent))\n      .join('\\n') +\n    '\\n'\n  )\n}\n", "import * as Path from 'path'\nimport { toPosixPath } from './path'\nimport { isKebabCase, kebabCase, pascalCase } from './string'\n\nexport function getComponentName(fileName: string): string {\n  const name = pascalCase(\n    Path.posix\n      .basename(toPosixPath(fileName))\n      .replace(/\\.(vue|ts|tsx|js|jsx)$/, ''),\n  )\n\n  return prefixIfStartsWithNumber(name)\n}\n\nfunction prefixIfStartsWithNumber(name: string): string {\n  if (/^[0-9]/.test(name)) {\n    return `_${name}`\n  } else return name\n}\n\nexport function getComponentNameAliases(\n  fileNameOrComponentName: string,\n): string[] {\n  const name = Path.posix\n    .basename(toPosixPath(fileNameOrComponentName))\n    .replace(/\\.(vue|ts|tsx|js|jsx)$/, '')\n  return isKebabCase(name)\n    ? [prefixIfStartsWithNumber(kebabCase(name))]\n    : [\n        prefixIfStartsWithNumber(kebabCase(name)),\n        prefixIfStartsWithNumber(pascalCase(name)),\n      ]\n}\n", "import { inspect } from 'util'\n\nlet isDebugging = true\n\nexport function setDebugging(debugging: boolean): void {\n  isDebugging = debugging\n}\n\nexport function debug(\n  printOnlyReturnStatement: boolean = true,\n  transformArgs: (...args: any[]) => any[] = (...args) => args,\n  transformReturn: (ret: any) => any = (ret) => ret,\n): MethodDecorator {\n  return (target, key, descriptor) => {\n    const fn = descriptor?.value as unknown as (...args: any[]) => any\n    descriptor.value = function (this: any, ...args: any[]): any {\n      if (isDebugging && !printOnlyReturnStatement) {\n        this.logger.debug(\n          `(call) ${target.constructor.name}.${String(key)}`,\n          inspect(transformArgs(...args), false, 100, false),\n        )\n      }\n      const result = fn.apply(this, args)\n\n      if (isDebugging) {\n        this.logger.debug(\n          `(return) ${target.constructor.name}.${String(key)}`,\n          inspect(transformArgs(...args), false, 100, false),\n          inspect(transformReturn(result), false, 100, false),\n        )\n      }\n\n      return result\n    } as any\n\n    return descriptor\n  }\n}\n", "import { invariant } from './assert'\n\ninterface ParsedFileName {\n  type: string\n  fileName: string\n}\n\nexport interface FilesystemSchemeFileName extends ParsedFileName {\n  type: 'scheme'\n  scheme: string\n  fileName: string\n}\n\nexport interface VueTsxFileName extends ParsedFileName {\n  type: 'vue-tsx'\n  fileName: string\n}\nexport interface VueJsxFileName extends ParsedFileName {\n  type: 'vue-jsx'\n  fileName: string\n}\n\nexport interface VueSFCDescriptorFileName extends ParsedFileName {\n  type: 'vue-descriptor'\n  fileName: string\n}\n\nexport interface VueTemplateASTFileName extends ParsedFileName {\n  type: 'vue-template-ast'\n  fileName: string\n}\n\nexport interface FileName extends ParsedFileName {\n  type: 'other'\n  fileName: string\n}\n\ntype FileNames =\n  | FilesystemSchemeFileName\n  | VueTsxFileName\n  | VueJsxFileName\n  | VueSFCDescriptorFileName\n  | VueTemplateASTFileName\n  | FileName\n\nconst suffixes = {\n  vueTsx: '.tsx',\n  vueJsx: '.jsx',\n  vueSFCDescriptor: '+descriptor.jsonc',\n  vueTemplateAST: '+template.jsonc',\n  vueRuntime: '.vuedx_runtime.d.ts',\n  vueProjectRuntime: 'project.vuedx_project_runtime.d.ts',\n}\n\nexport function parseFileName(fileName: string): FileNames {\n  if (isFilesystemSchemeFile(fileName)) {\n    const RE = /^\\^\\/(?<scheme>[^/]+)(\\/ts-nul-authority)?(?<fileName>.*)$/\n    const result = RE.exec(fileName)\n\n    invariant(result?.groups != null)\n    invariant(result.groups['fileName'] != null)\n    invariant(result.groups['scheme'] != null)\n\n    return {\n      type: 'scheme',\n      fileName: result.groups['fileName'],\n      scheme: result.groups['scheme'],\n    }\n  } else if (isVueTsxFile(fileName)) {\n    return {\n      type: 'vue-tsx',\n      fileName: fileName.substring(0, fileName.length - suffixes.vueTsx.length),\n    }\n  } else if (isVueJsxFile(fileName)) {\n    return {\n      type: 'vue-jsx',\n      fileName: fileName.substring(0, fileName.length - suffixes.vueJsx.length),\n    }\n  } else if (isVueSFCDescriptorFile(fileName)) {\n    return {\n      type: 'vue-descriptor',\n      fileName: fileName.substring(\n        0,\n        fileName.length - suffixes.vueSFCDescriptor.length,\n      ),\n    }\n  } else if (isVueTemplateASTFile(fileName)) {\n    return {\n      type: 'vue-template-ast',\n      fileName: fileName.substring(\n        0,\n        fileName.length - suffixes.vueTemplateAST.length,\n      ),\n    }\n  } else {\n    return {\n      type: 'other',\n      fileName,\n    }\n  }\n}\n\nexport function toFileName(f: FileNames): string {\n  switch (f.type) {\n    case 'scheme':\n      return `^/${f.scheme}${f.fileName}`\n    case 'vue-tsx':\n      return `${f.fileName}${suffixes.vueTsx}`\n    case 'vue-jsx':\n      return `${f.fileName}${suffixes.vueJsx}`\n    case 'vue-descriptor':\n      return `${f.fileName}${suffixes.vueSFCDescriptor}`\n    case 'vue-template-ast':\n      return `${f.fileName}${suffixes.vueTemplateAST}`\n    default:\n      return f.fileName\n  }\n}\n\nexport function isFilesystemSchemeFile(fileName: string): boolean {\n  return fileName.startsWith('^/')\n}\n\nexport function isVueFile(fileName: string): boolean {\n  return fileName.endsWith('.vue')\n}\n\nexport function isVueTsxFile(fileName: string): boolean {\n  return fileName.endsWith('.vue' + suffixes.vueTsx)\n}\nexport function isVueJsxFile(fileName: string): boolean {\n  return fileName.endsWith('.vue' + suffixes.vueJsx)\n}\n\nexport function isVueSFCDescriptorFile(fileName: string): boolean {\n  return fileName.endsWith('.vue' + suffixes.vueSFCDescriptor)\n}\n\nexport function isVueTemplateASTFile(fileName: string): boolean {\n  return fileName.endsWith('.vue' + suffixes.vueTemplateAST)\n}\n\nexport function isVueVirtualFile(fileName: string): boolean {\n  return fileName.includes('.vue+vue')\n}\n\nexport function isVueRuntimeFile(fileName: string): boolean {\n  return fileName.endsWith(suffixes.vueRuntime)\n}\n\nexport function isProjectRuntimeFile(fileName: string): boolean {\n  return fileName.endsWith(suffixes.vueProjectRuntime)\n}\n\nconst VUE_VIRTAL_FILE_RE = /\\.vue(\\+vue|\\.ts|\\.js)/\nexport function mayContainVirtualFileName(text: string): boolean {\n  return VUE_VIRTAL_FILE_RE.test(text)\n}\n", "const RAW_TEXT_TAGS = new Set(['style', 'iframe', 'script', 'noscript'])\nexport const isRawTextContainer = (tagName: string): boolean =>\n  RAW_TEXT_TAGS.has(tagName)\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = new Set(\n  (\n    'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot'\n  ).split(','),\n)\nexport const isHTMLTag = (tagName: string): boolean => HTML_TAGS.has(tagName)\n\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = new Set(\n  (\n    'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view'\n  ).split(','),\n)\n\nexport const isSVGTag = (tagName: string): boolean => SVG_TAGS.has(tagName)\n\nconst VOID_TAGS = new Set(\n  'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'.split(\n    ',',\n  ),\n)\nexport const isVoidTag = (tagName: string): boolean => VOID_TAGS.has(tagName)\n\nexport const HTML_TAG_NAME_TO_CLASS_NAME = {\n  a: 'HTMLAnchorElement',\n  area: 'HTMLAreaElement',\n  audio: 'HTMLAudioElement',\n  base: 'HTMLBaseElement',\n  blockquote: 'HTMLQuoteElement',\n  body: 'HTMLBodyElement',\n  br: 'HTMLBRElement',\n  button: 'HTMLButtonElement',\n  canvas: 'HTMLCanvasElement',\n  caption: 'HTMLTableCaptionElement',\n  data: 'HTMLDataElement',\n  datalist: 'HTMLDataListElement',\n  details: 'HTMLDetailsElement',\n  dialog: 'HTMLDialogElement',\n  div: 'HTMLDivElement',\n  dl: 'HTMLDListElement',\n  embed: 'HTMLEmbedElement',\n  fieldset: 'HTMLFieldSetElement',\n  form: 'HTMLFormElement',\n  h1: 'HTMLHeadingElement',\n  head: 'HTMLHeadElement',\n  hr: 'HTMLHRElement',\n  html: 'HTMLHtmlElement',\n  iframe: 'HTMLIFrameElement',\n  img: 'HTMLImageElement',\n  input: 'HTMLInputElement',\n  label: 'HTMLLabelElement',\n  legend: 'HTMLLegendElement',\n  li: 'HTMLLIElement',\n  link: 'HTMLLinkElement',\n  main: 'HTMLMainElement',\n  map: 'HTMLMapElement',\n  menu: 'HTMLMenuElement',\n  meta: 'HTMLMetaElement',\n  meter: 'HTMLMeterElement',\n  nav: 'HTMLNavElement',\n  object: 'HTMLObjectElement',\n  ol: 'HTMLOListElement',\n  optgroup: 'HTMLOptGroupElement',\n  option: 'HTMLOptionElement',\n  output: 'HTMLOutputElement',\n  p: 'HTMLParagraphElement',\n  param: 'HTMLParamElement',\n  picture: 'HTMLPictureElement',\n  pre: 'HTMLPreElement',\n  progress: 'HTMLProgressElement',\n  q: 'HTMLQuoteElement',\n  script: 'HTMLScriptElement',\n  select: 'HTMLSelectElement',\n  slot: 'HTMLSlotElement',\n  source: 'HTMLSourceElement',\n  span: 'HTMLSpanElement',\n  style: 'HTMLStyleElement',\n  table: 'HTMLTableElement',\n  tbody: 'HTMLTableSectionElement',\n  td: 'HTMLTableCellElement',\n  template: 'HTMLTemplateElement',\n  textarea: 'HTMLTextAreaElement',\n  tfoot: 'HTMLTableSectionElement',\n  th: 'HTMLTableCellElement',\n  thead: 'HTMLTableSectionElement',\n  title: 'HTMLTitleElement',\n  tr: 'HTMLTableRowElement',\n  track: 'HTMLTrackElement',\n  ul: 'HTMLUListElement',\n  video: 'HTMLVideoElement',\n}\n\nexport const SVG_TAG_NAME_TO_CLASS_NAME = {\n  a: 'SVGAElement',\n  altGlyph: 'SVGAltGlyphElement',\n  altGlyphDef: 'SVGAltGlyphDefElement',\n  altGlyphItem: 'SVGAltGlyphItemElement',\n  animate: 'SVGAnimateElement',\n  animateMotion: 'SVGAnimateMotionElement',\n  animateTransform: 'SVGAnimateTransformElement',\n  circle: 'SVGCircleElement',\n  clipPath: 'SVGClipPathElement',\n  defs: 'SVGDefsElement',\n  desc: 'SVGDescElement',\n  ellipse: 'SVGEllipseElement',\n  feBlend: 'SVGFEBlendElement',\n  feColorMatrix: 'SVGFEColorMatrixElement',\n  feComponentTransfer: 'SVGFEComponentTransferElement',\n  feComposite: 'SVGFECompositeElement',\n  feConvolveMatrix: 'SVGFEConvolveMatrixElement',\n  feDiffuseLighting: 'SVGFEDiffuseLightingElement',\n  feDisplacementMap: 'SVGFEDisplacementMapElement',\n  feDistantLight: 'SVGFEDistantLightElement',\n  feDropShadow: 'SVGFEDropShadowElement',\n  feFlood: 'SVGFEFloodElement',\n  feFuncA: 'SVGFEFuncAElement',\n  feFuncB: 'SVGFEFuncBElement',\n  feFuncG: 'SVGFEFuncGElement',\n  feFuncR: 'SVGFEFuncRElement',\n  feGaussianBlur: 'SVGFEGaussianBlurElement',\n  feImage: 'SVGFEImageElement',\n  feMerge: 'SVGFEMergeElement',\n  feMergeNode: 'SVGFEMergeNodeElement',\n  feMorphology: 'SVGFEMorphologyElement',\n  feOffset: 'SVGFEOffsetElement',\n  fePointLight: 'SVGFEPointLightElement',\n  feSpecularLighting: 'SVGFESpecularLightingElement',\n  feSpotLight: 'SVGFESpotLightElement',\n  feTile: 'SVGFETileElement',\n  feTurbulence: 'SVGFETurbulenceElement',\n  filter: 'SVGFilterElement',\n  foreignObject: 'SVGForeignObjectElement',\n  g: 'SVGGElement',\n  hatch: 'SVGHatchElement',\n  hatchpath: 'SVGHatchpathElement',\n  image: 'SVGImageElement',\n  line: 'SVGLineElement',\n  linearGradient: 'SVGLinearGradientElement',\n  marker: 'SVGMarkerElement',\n  mask: 'SVGMaskElement',\n  mesh: 'SVGMeshElement',\n  meshgradient: 'SVGMeshGradientElement',\n  meshpatch: 'SVGMeshPatchElement',\n  meshrow: 'SVGMeshRowElement',\n  metadata: 'SVGMetadataElement',\n  mpath: 'SVGMPathElement',\n  path: 'SVGPathElement',\n  pattern: 'SVGPatternElement',\n  polygon: 'SVGPolygonElement',\n  polyline: 'SVGPolylineElement',\n  radialGradient: 'SVGRadialGradientElement',\n  rect: 'SVGRectElement',\n  script: 'SVGScriptElement',\n  set: 'SVGSetElement',\n  stop: 'SVGStopElement',\n  style: 'SVGStyleElement',\n  svg: 'SVGSVGElement',\n  switch: 'SVGSwitchElement',\n  symbol: 'SVGSymbolElement',\n  text: 'SVGTextElement',\n  textPath: 'SVGTextPathElement',\n  title: 'SVGTitleElement',\n  tspan: 'SVGTSpanElement',\n  unknown: 'SVGUnknownElement',\n  use: 'SVGUseElement',\n  view: 'SVGViewElement',\n}\n\nexport function getClassNameForTagName(tagName: string): string {\n  if (isSVGTag(tagName)) {\n    return (\n      SVG_TAG_NAME_TO_CLASS_NAME[\n        tagName as keyof typeof SVG_TAG_NAME_TO_CLASS_NAME\n      ] ?? 'SVGElement'\n    )\n  }\n\n  if (isHTMLTag(tagName)) {\n    return (\n      HTML_TAG_NAME_TO_CLASS_NAME[\n        tagName as keyof typeof HTML_TAG_NAME_TO_CLASS_NAME\n      ] ?? 'HTMLElement'\n    )\n  }\n\n  return 'Element'\n}\n", "export type Evictable<T extends (...args: any) => any> = T & {\n  evict(...args: Parameters<T>): void\n}\n\nexport function memoize<F extends (...args: any) => unknown>(\n  fn: F,\n  getKey: (args: Parameters<F>) => object,\n): Evictable<F> {\n  const microcache = new WeakMap()\n\n  const fnx = ((...args) => {\n    const key = getKey(args)\n    if (microcache.has(key)) return microcache.get(key)\n    const value = fn(...args)\n\n    microcache.set(key, value)\n\n    return value\n  }) as Evictable<F>\n\n  fnx.evict = (...args) => microcache.delete(getKey(args))\n\n  return fnx\n}\n\nexport function memoizeByFirstArg<F extends (...args: any) => unknown>(\n  fn: F,\n): Evictable<F> {\n  return memoize(fn, (args) => args[0])\n}\n", "export function isNumber(value: any): value is number {\n  return typeof value === 'number' && !Number.isNaN(value)\n}\n", "export function isObject(obj: unknown): obj is object {\n  return typeof obj === 'object' && obj !== null\n}\n\nexport function isPlainObject(obj: unknown): obj is object {\n  return (\n    isObject(obj) &&\n    (Object.getPrototypeOf(obj) === null ||\n      Object.getPrototypeOf(obj) === Object.prototype)\n  )\n}\n", "import type { Disposable } from './disposable'\nimport type { EventEmitter, EventListener, EventSource } from './emitter'\nimport type { Model, ModelEvents } from './model'\n\ninterface FromEvents<T> {\n  end(): DisposableScope\n  on<E extends string & keyof T>(\n    event: E,\n    listener: EventListener<T[E]>,\n  ): FromEvents<T>\n}\n\ninterface EventEmitterLike {\n  on(event: string, callback: (...args: unknown[]) => unknown): unknown\n  off(event: string, callback: unknown): unknown\n}\n\ntype EmitterScope<T> = T extends Model<infer S>\n  ? FromEvents<ModelEvents<S>>\n  : T extends EventEmitter<infer E>\n  ? never extends E\n    ? FromEvents<Required<T>['__type_helper_']>\n    : FromEvents<E>\n  : T extends EventSource<infer E>\n  ? never extends E\n    ? FromEvents<Required<T>['__type_helper_']>\n    : FromEvents<E>\n  : never\n\n/**\n * A disposable scope to simplify resource cleanup, e.g.,\n * remove event listeners on component unmount.\n */\nexport class DisposableScope implements Disposable {\n  private readonly _cleanups: Array<() => void> = []\n\n  /**\n   * Call `dispose()` function on cleanup.\n   */\n  public add(disposable: Disposable | Disposable['dispose']): DisposableScope {\n    const resource =\n      typeof disposable === 'function' ? { dispose: disposable } : disposable\n\n    this._cleanups.push(() => resource.dispose())\n\n    return this\n  }\n\n  /**\n   * Call `fn` and use returned value as cleanup function.\n   */\n  public run(fn: () => Disposable | Disposable['dispose']): DisposableScope {\n    this.add(fn())\n\n    return this\n  }\n\n  /**\n   * Unregister events on cleanup.\n   */\n  public emitter<E extends EventEmitter<any> | EventSource<any>>(\n    eventTarget: E,\n  ): EmitterScope<E> {\n    const context: EmitterScope<E> = {\n      on: (event: string, listener: any) => {\n        this.run(() => {\n          eventTarget.addEventListener(event, listener)\n\n          return () => {\n            eventTarget.removeEventListener(event, listener)\n          }\n        })\n\n        return context\n      },\n      end: () => this,\n    } as any\n\n    return context\n  }\n\n  public wrap<E extends EventEmitterLike>(eventTarget: E): Pick<E, 'on'> {\n    return {\n      on: (event: string, listener: any): any => {\n        this.run(() => {\n          eventTarget.on(event, listener)\n\n          return () => {\n            eventTarget.off(event, listener)\n          }\n        })\n      },\n    }\n  }\n\n  public dispose(): void {\n    this._cleanups.forEach((fn) => fn())\n    this._cleanups.length = 0\n  }\n}\n", "import type { Disposable } from './disposable'\nimport type { KeyOf, Model, ReadonlyModel } from './model'\nimport { DisposableScope } from './cleanup'\n\ninterface EffectOptions {\n  /**\n   * Run effect immediately,\n   */\n  immediate: boolean\n}\n\nexport function effect<T extends object>(\n  model: Model<T> | ReadonlyModel<T>,\n  dependencies: Array<KeyOf<T>>,\n  fn: () => void,\n  options: EffectOptions = { immediate: true },\n): Disposable {\n  const scope = new DisposableScope()\n  const emitter = scope.emitter(model)\n  const set = new Set(dependencies)\n\n  emitter.on('@updated', (event) => {\n    if (event.detail.some((property) => set.has(property))) {\n      fn()\n    }\n  })\n\n  if (options.immediate) {\n    fn()\n  }\n\n  return scope\n}\n", "import type { Disposable } from './disposable'\n\nexport type EventListener<T> = (event: Event<T>) => void | Promise<void>\n\nexport class Event<T> {\n  public readonly type: string\n  public readonly detail: T\n\n  constructor(name: string, detail: T) {\n    this.type = name\n    this.detail = detail\n  }\n}\n\nexport type EventsOf<T extends EventEmitter<unknown>> = T extends EventEmitter<\n  infer E\n>\n  ? never extends E\n    ? T['__type_helper_'] // cannot infer generic param, use type hack in EventEmitter\n    : E\n  : never\n\nexport interface EventSource<T> {\n  addEventListener<E extends string & keyof T>(\n    event: E,\n    listener: EventListener<T[E]>,\n  ): void\n  removeEventListener<E extends string & keyof T>(\n    event: E,\n    listener: EventListener<T[E]>,\n  ): void\n  __type_helper_?: T\n}\n\nexport interface EventProducer<T> {\n  dispatchEvent<E extends string & keyof T>(event: E, detail: T[E]): void\n}\n\nexport class EventEmitter<T>\n  implements Disposable, EventSource<T>, EventProducer<T> {\n  private _listeners: {\n    [K in string & keyof T]?: Set<EventListener<T[K]>>\n  } = {}\n\n  public __type_helper_?: T\n\n  public addEventListener<E extends string & keyof T>(\n    event: E,\n    listener: EventListener<T[E]>,\n  ): void {\n    const listeners = this._listeners[event]\n    if (listeners != null) {\n      listeners.add(listener)\n    } else {\n      this._listeners[event] = new Set([listener])\n    }\n  }\n\n  public removeEventListener<E extends string & keyof T>(\n    event: E,\n    listener: EventListener<T[E]>,\n  ): void {\n    this._listeners[event]?.delete(listener)\n  }\n\n  public dispatchEvent<E extends string & keyof T>(\n    event: E,\n    detail: T[E],\n  ): void {\n    this._listeners[event]?.forEach((fn) => {\n      try {\n        void fn(new Event(event, detail))\n      } catch {}\n    })\n  }\n\n  public dispose(): void {\n    this._listeners = {}\n  }\n}\n", "import { EventEmitter } from './emitter'\n\nexport type KeyOf<T> = T extends object ? string & keyof T : never\n\nexport type ModelEvents<T extends object> = {\n  [K in KeyOf<T> | '@updated']: K extends '@updated'\n    ? Array<KeyOf<T>>\n    : K extends KeyOf<T>\n    ? {\n        value: T[K]\n        previousValue: T[K]\n      }\n    : never\n}\n\ninterface Readable<T extends object> {\n  get<K extends KeyOf<T>>(key: K): T[K]\n}\n\ninterface Writable<T extends object> extends Readable<T> {\n  set<K extends KeyOf<T>>(key: K, value: T[K]): void\n  setAll(state: Partial<T>): void\n}\n\ntype Immutable<T> = T extends Array<infer I>\n  ? ReadonlyArray<Immutable<I>>\n  : T extends Set<infer I>\n  ? ReadonlySet<Immutable<I>>\n  : T extends Map<infer K, infer V>\n  ? ReadonlyMap<K, Immutable<V>>\n  : T extends Date | Function | RegExp\n  ? T\n  : T extends object\n  ? {\n      readonly [K in keyof T]: Immutable<T[K]>\n    }\n  : T\n\nexport type Model<T extends object> = T &\n  Writable<T> &\n  EventEmitter<ModelEvents<T>>\nexport type ReadonlyModel<T extends object> = Immutable<T> &\n  Readable<T> &\n  EventEmitter<ModelEvents<T>>\n\nconst methodsRE = /^(get|set|setAll|addEventListener|removeEventListener|dispatchEvent|dispose)$/\nexport function createModel<T extends object>(state: T): Model<T> {\n  const model = new ObservableState(state)\n  const isProperty = (property: string | symbol): property is KeyOf<T> =>\n    typeof property === 'string' &&\n    !methodsRE.test(property) &&\n    !property.startsWith('_')\n\n  return new Proxy((model as unknown) as T & Model<T>, {\n    get(target, property, receiver) {\n      if (isProperty(property)) return target.get(property)\n      return Reflect.get(target, property, receiver)\n    },\n    set(target, property, value, receiver) {\n      if (isProperty(property)) {\n        target.set(property, value)\n        return true\n      }\n\n      return Reflect.set(target, property, value, receiver)\n    },\n    has(target, property) {\n      return Reflect.has(isProperty(property) ? model._state : target, property)\n    },\n    ownKeys(_target) {\n      return Reflect.ownKeys(model._state)\n    },\n    getOwnPropertyDescriptor(_target, property) {\n      return Reflect.getOwnPropertyDescriptor(model._state, property)\n    },\n  })\n}\n\nexport function readonly<T extends object>(model: Model<T>): ReadonlyModel<T> {\n  if (__DEV__) {\n    return new Proxy((model as unknown) as ReadonlyModel<T>, {\n      set(_target, property) {\n        throw new Error(`Cannot set readonly property \"${String(property)}\"`)\n      },\n    })\n  }\n\n  return (model as unknown) as ReadonlyModel<T>\n}\n\nclass ObservableState<T extends object>\n  extends EventEmitter<ModelEvents<T>>\n  implements Writable<T> {\n  public readonly _state: T\n\n  constructor(state: T) {\n    super()\n    this._state = state\n  }\n\n  set<K extends KeyOf<T>>(key: K, value: T[K]): void {\n    if (__DEV__) {\n      if (key === '@updated' || methodsRE.test(key))\n        throw new Error(`\"${key}\" is a reserved property`)\n    }\n\n    this.setAll(({ [key]: value } as unknown) as Partial<T>)\n  }\n\n  setAll(state: Partial<T>): void {\n    type Change<K extends KeyOf<T> = KeyOf<T>> = [\n      K,\n      { value: T[K]; previousValue: T[K] },\n    ]\n    const changes: Change[] = []\n\n    Object.entries(state).forEach((entry) => {\n      const key = entry[0] as KeyOf<T>\n      const previousValue = this._state[key]\n      const value = entry[1] as typeof previousValue\n      if (previousValue === value) return // Value did not change.\n\n      this._state[key] = value\n\n      changes.push([key, { value, previousValue }])\n    })\n\n    this.dispatchEvent(\n      '@updated',\n      changes.map((change) => change[0]),\n    )\n\n    for (const change of changes) {\n      this.dispatchEvent(change[0], change[1] as any)\n    }\n  }\n\n  get<K extends KeyOf<T>>(key: K): T[K] {\n    return this._state[key]\n  }\n}\n", "import { effect } from './effect'\nimport { createModel, KeyOf, Model, readonly, ReadonlyModel } from './model'\n\ntype Dependency<T extends object = {}> =\n  | [model: Model<T>, dependencies: Array<KeyOf<T>>]\n  | [model: ReadonlyModel<T>, dependencies: Array<KeyOf<T>>]\ntype Dependencies<T extends object = any> = Array<Dependency<T>>\n\nexport function computed<\n  R,\n  D0 extends object,\n  D1 extends object,\n  D2 extends object,\n  D3 extends object,\n  D4 extends object,\n  D5 extends object\n>(\n  getter: () => R,\n  dep0?: Dependency<D0>,\n  dep1?: Dependency<D1>,\n  dep2?: Dependency<D2>,\n  dep3?: Dependency<D3>,\n  dep4?: Dependency<D4>,\n  dep5?: Dependency<D5>,\n): ReadonlyModel<{ value: R }>\n\n/**\n * Lazily computed resource generated from models.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function computed(getter: any, ...dependencies: any[]) {\n  return createComputedModel(dependencies, getter)\n}\n\nfunction createComputedModel<R>(\n  dependencies: Dependencies,\n  getter: () => R,\n): ReadonlyModel<{ value: R }> {\n  let value!: R\n  let isDirty = true\n\n  const state = createModel({\n    get value(): R {\n      if (isDirty) {\n        isDirty = false\n        value = getter()\n      }\n\n      return value\n    },\n  })\n\n  dependencies.forEach((dependency) => {\n    effect(dependency[0], dependency[1], () => {\n      isDirty = true\n      state.dispatchEvent('@updated', ['value'])\n      state.dispatchEvent('value', {\n        get value() {\n          return state.value\n        },\n        previousValue: value,\n      })\n    })\n  })\n\n  return readonly(state)\n}\n", "import { EventEmitter, EventProducer, EventSource } from '../reactivity'\nimport { generateUUID, isString } from '../string'\nimport type { Message } from './message'\n\nfunction debug(..._args: any[]): void {\n  // console.debug(..._args)\n}\n\nconst serializer = {\n  serialize(obj: unknown): string {\n    return JSON.stringify(obj, (_key, value) => {\n      if (typeof value === 'bigint') return `${value.toString()}n`\n\n      return value\n    })\n  },\n  deserialize<T = unknown>(text: string): T {\n    return JSON.parse(text, (_key, value) => {\n      if (isString(value) && value.endsWith('n') && /^[0-9]+n$/.test(value)) {\n        return BigInt(value.slice(0, -1))\n      }\n\n      return value\n    })\n  },\n}\n\nexport interface Channel {\n  send(data: Buffer): void\n  receive(handler: (data: Buffer) => void): void\n}\n\ninterface EndpointProducerEvents {\n  message: Message\n}\n\ninterface EndpointSourceEvents extends EndpointProducerEvents {\n  closed: null\n}\n\nexport interface Endpoint\n  extends EventSource<EndpointSourceEvents>,\n    EventProducer<EndpointProducerEvents> {\n  id: string\n  close(): void\n  create(id?: string): Endpoint\n}\n\nexport function createEndpoint(channel: Channel): Endpoint {\n  let defaultSource: EventEmitter<EndpointSourceEvents>\n  const sources = new Map<string, EventEmitter<EndpointSourceEvents>>()\n\n  function create(id: string): Endpoint {\n    const emitter = new EventEmitter<EndpointSourceEvents>()\n\n    if (defaultSource == null) {\n      defaultSource = emitter\n    }\n\n    sources.set(id, emitter)\n\n    return {\n      id,\n      addEventListener: (event, listener) =>\n        emitter.addEventListener(event, listener),\n      removeEventListener: (event, listener) =>\n        emitter.removeEventListener(event, listener),\n      dispatchEvent: (_event, detail) => {\n        debug(`SEND(${id}): `, detail)\n        channel.send(Buffer.from(serializer.serialize([id, detail])))\n      },\n      close: () => {\n        emitter.dispatchEvent('closed', null)\n        emitter.dispose()\n        if (id != null) sources.delete(id)\n      },\n      create: (id) => create(id ?? generateUUID()),\n    }\n  }\n\n  channel.receive((data) => {\n    const [id, message] = serializer.deserialize<[string, Message]>(\n      data.toString('utf-8'),\n    )\n\n    const source = sources.get(id) ?? defaultSource\n    debug(`RECV(${id}): `, message)\n    source.dispatchEvent('message', message)\n  })\n\n  return create(generateUUID())\n}\n", "import type { Opaque } from '../types'\nimport type { Value } from './value'\n\nexport type MessageID = Opaque<string, 'Message'>\n\nexport enum MessageType {\n  // Proxy Methods\n  get = 'get',\n  set = 'set',\n  apply = 'apply',\n  construct = 'construct',\n  // Protocol Methods\n  ENDPOINT = 'ENDPOINT',\n  RELEASE = 'RELEASE',\n  RETURN = 'RETURN',\n}\n\ninterface BaseMessage {\n  id: MessageID\n  type: MessageType\n}\n\nexport interface GetMessage extends BaseMessage {\n  type: MessageType.get\n  path: string[]\n}\n\nexport interface SetMessage extends BaseMessage {\n  type: MessageType.set\n  path: string[]\n  value: Value\n}\n\nexport interface ApplyMessage extends BaseMessage {\n  type: MessageType.apply\n  path: string[]\n  argumentList: Value[]\n}\n\nexport interface ConstructMessage extends BaseMessage {\n  type: MessageType.construct\n  path: string[]\n  argumentList: Value[]\n}\n\nexport interface EndpointMessage extends BaseMessage {\n  type: MessageType.ENDPOINT\n}\n\nexport interface ReleaseMessage extends BaseMessage {\n  type: MessageType.RELEASE\n  path: string[]\n}\n\nexport interface ReturnMessage extends BaseMessage {\n  type: MessageType.RETURN\n  value: Value\n}\n\nexport type Message =\n  | GetMessage\n  | SetMessage\n  | ApplyMessage\n  | ConstructMessage\n  | EndpointMessage\n  | ReleaseMessage\n  | ReturnMessage\n", "import type { ExposedObject } from './handlers'\n\nconst release = Symbol('release')\n\nexport const Symbols = { release } as const\n\ninterface RemoteObjectAPI {\n  [Symbols.release](): Promise<void>\n}\n\n// Convert properties and methods to promise (and inverse operation)\ntype Promisify<T> = T extends Promise<unknown> ? T : Promise<T>\ntype Unpromisify<T> = T extends Promise<infer P> ? P : T\n\ntype RemoteProperty<T> = T extends Function | ExposedObject<unknown>\n  ? Remote<T>\n  : Promisify<T>\ntype LocalProperty<T> = T extends Function | ExposedObject<unknown>\n  ? Local<T>\n  : Unpromisify<T>\n\ntype RemoteObject<T> = { [P in keyof T]: RemoteProperty<T[P]> }\ntype LocalObject<T> = { [P in keyof T]: LocalProperty<T[P]> }\n\ntype ProxyOrClone<T> = T extends ExposedObject<unknown> ? Remote<T> : T\ntype UnproxyOrClone<T> = T extends RemoteObject<ExposedObject<unknown>>\n  ? Local<T>\n  : T\n\nexport type Remote<T> =\n  // Handle properties\n  RemoteObject<T> &\n    // Handle call signature (if present)\n    (T extends (...args: infer TArguments) => infer TReturn\n      ? (\n          ...args: { [I in keyof TArguments]: UnproxyOrClone<TArguments[I]> }\n        ) => Promisify<ProxyOrClone<Unpromisify<TReturn>>>\n      : unknown) &\n    // Handle construct signature (if present)\n    // The return of construct signatures is always proxied (whether marked or not)\n    (T extends new (...args: infer TArguments) => infer TInstance\n      ? new (\n          ...args: {\n            [I in keyof TArguments]: UnproxyOrClone<TArguments[I]>\n          }\n        ) => Promisify<Remote<TInstance>>\n      : unknown) &\n    // Include additional special comlink methods available on the proxy.\n    RemoteObjectAPI\n\nexport type Local<T> =\n  // Omit the special proxy methods (they don't need to be supplied, comlink adds them)\n  Omit<LocalObject<T>, keyof RemoteObjectAPI> &\n    // Handle call signatures (if present)\n    (T extends (...args: infer TArguments) => infer TReturn\n      ? (\n          ...args: { [I in keyof TArguments]: ProxyOrClone<TArguments[I]> }\n        ) => // The raw function could either be sync or async, but is always proxied automatically\n        MaybePromise<UnproxyOrClone<Unpromisify<TReturn>>>\n      : unknown) &\n    // Handle construct signature (if present)\n    // The return of construct signatures is always proxied (whether marked or not)\n    (T extends new (...args: infer TArguments) => infer TInstance\n      ? new (\n          ...args: {\n            [I in keyof TArguments]: ProxyOrClone<TArguments[I]>\n          }\n        ) => // The raw constructor could either be sync or async, but is always proxied automatically\n        MaybePromise<Local<Unpromisify<TInstance>>>\n      : unknown)\n\n/**\n * Expresses that a type can be either a sync or async.\n */\ntype MaybePromise<T> = Promise<T> | T\n", "export enum ValueType {\n  RAW = 'raw',\n  HANDLER = 'handler',\n}\n\nexport interface BaseValue {\n  type: ValueType\n}\n\nexport interface RawValue extends BaseValue {\n  type: ValueType.RAW\n  value: unknown // Should be JSON serializable object\n}\n\nexport interface HandlerValue extends BaseValue {\n  type: ValueType.HANDLER\n  name: string\n  value: unknown\n}\n\nexport type Value = RawValue | HandlerValue\n", "import { isObject } from '../object'\nimport { DisposableScope } from '../reactivity'\nimport { generateUUID } from '../string'\nimport type { Endpoint } from './channel'\nimport { Message, MessageType, ReturnMessage } from './message'\nimport type { Remote } from './types'\nimport { Symbols as PublicSymbols } from './types'\nimport { Value, ValueType } from './value'\n\nexport interface Handler {\n  canHandle(value: unknown): boolean\n  serialize(value: unknown): unknown\n  deserialize(value: unknown): unknown\n}\n\nconst EXPOSED = Symbol('RPC.exposed')\nconst THROWN = Symbol('RPC.thrown')\n\nconst Symbols = {\n  exposed: EXPOSED,\n  thrown: THROWN,\n} as const\n\nfunction isObjectOrFunction(value: unknown): value is object {\n  return isObject(value) || typeof value === 'function'\n}\n\ninterface Throwable {\n  value: unknown\n  [Symbols.thrown]: true\n}\n\nfunction isThrowable(value: unknown): value is Throwable {\n  return isObjectOrFunction(value) && Symbols.thrown in value\n}\n\nfunction createThrowable(value: unknown): Throwable {\n  return { value, [Symbols.thrown]: true }\n}\n\ntype SerializedThrowable =\n  | { isError: true; value: Error }\n  | { isError: false; value: unknown }\n\nconst throwHandler: Handler = {\n  canHandle(value) {\n    return isThrowable(value)\n  },\n  serialize({ value }: Throwable): SerializedThrowable {\n    return value instanceof Error\n      ? {\n          isError: true,\n          value: {\n            name: value.name,\n            message: value.message,\n            stack: value.stack,\n          },\n        }\n      : { isError: false, value }\n  },\n  deserialize(serializedValue: SerializedThrowable) {\n    if (serializedValue.isError) {\n      throw Object.assign(\n        new Error(serializedValue.value.message),\n        serializedValue.value,\n      )\n    } else {\n      throw serializedValue.value\n    }\n  },\n}\n\nexport function isExposed<T>(obj: T): obj is ExposedObject<T> {\n  return isObjectOrFunction(obj) && Symbols.exposed in obj\n}\n\nexport type ExposedObject<T> = T & {\n  [Symbols.exposed]: string\n}\n\nlet currentEndpoint: Endpoint | null = null\n\nexport function withEndpoint<T>(endpoint: Endpoint, fn: () => T): T {\n  try {\n    currentEndpoint = endpoint\n    return fn()\n  } finally {\n    currentEndpoint = null\n  }\n}\n\nexport function createExposed<T>(\n  value: T,\n  endpoint: Endpoint,\n): ExposedObject<T> {\n  const target = Object.assign(value as unknown as object, {\n    [Symbols.exposed]: endpoint.id,\n  }) as ExposedObject<T>\n\n  const scope = new DisposableScope()\n  scope.emitter(endpoint).on('message', async (event) => {\n    const message = event.detail\n    let returnValue: unknown\n    try {\n      switch (message.type) {\n        case MessageType.get:\n          returnValue = get(target, message.path)\n          break\n        case MessageType.set:\n          {\n            const { parent, property } = getParent(target, message.path)\n            parent[property] = fromValue(endpoint, message.value)\n            returnValue = true\n          }\n          break\n        case MessageType.apply:\n          {\n            const { parent, property } = getParent(target, message.path)\n            returnValue = parent[property].apply(\n              parent,\n              message.argumentList.map((arg) => fromValue(endpoint, arg)),\n            )\n          }\n          break\n        case MessageType.construct:\n          {\n            const Constructor = get(target, message.path) as new (\n              ...args: unknown[]\n            ) => unknown\n\n            returnValue = createExposed(\n              new Constructor(\n                ...message.argumentList.map((arg) => fromValue(endpoint, arg)),\n              ),\n              endpoint.create(),\n            )\n          }\n          break\n      }\n    } catch (error) {\n      returnValue = createThrowable(error)\n    }\n\n    await Promise.resolve(returnValue)\n      .catch((error) => createThrowable(error))\n      .then((returnValue) => {\n        endpoint.dispatchEvent('message', {\n          id: message.id,\n          type: MessageType.RETURN,\n          value: toValue(endpoint, returnValue),\n        })\n\n        if (message.type === MessageType.RELEASE) {\n          scope.dispose()\n        }\n      })\n  })\n\n  function get(target: any, path: string[]): unknown {\n    return path.reduce((obj, prop) => obj[prop], target)\n  }\n\n  function getParent(\n    target: any,\n    path: string[],\n  ): { parent: any; property: string } {\n    if (path.length === 0) {\n      return {\n        parent: [target],\n        property: '0',\n      }\n    }\n\n    path = path.slice()\n    const property = path.pop() as string\n    return {\n      parent: path.reduce((obj, prop) => obj[prop], target),\n      property,\n    }\n  }\n\n  return target\n}\n\nconst endpoints = new Map<string, Remote<unknown>>()\nconst proxyHandler: Handler = {\n  canHandle(value) {\n    return isExposed(value)\n  },\n  serialize(value: ExposedObject<unknown>) {\n    return value[Symbols.exposed]\n  },\n  deserialize(key: string) {\n    if (!endpoints.has(key)) {\n      if (currentEndpoint == null) {\n        throw new Error(\n          'Cannot deserialize proxy value without active endpoint',\n        )\n      }\n\n      const endpoint = currentEndpoint.create(key)\n      endpoint.addEventListener('closed', () => {\n        endpoints.delete(key)\n      })\n      endpoints.set(key, createEndpointProxy(endpoint, []))\n    }\n\n    return endpoints.get(key)\n  },\n}\n\nconst callbackHandler: Handler = {\n  canHandle(value) {\n    return typeof value === 'function' && !isExposed(value)\n  },\n  serialize(value: (...args: unknown[]) => unknown) {\n    if (currentEndpoint == null) {\n      throw new Error('Cannot serialize function without active endpoint')\n    }\n\n    return proxyHandler.serialize(\n      createExposed(value, currentEndpoint.create()),\n    )\n  },\n  deserialize(key: string) {\n    return proxyHandler.deserialize(key)\n  },\n}\n\nexport const Handlers = new Map([\n  ['throw', throwHandler],\n  ['proxy', proxyHandler],\n  ['callback', callbackHandler],\n])\n\nexport function toValue(endpoint: Endpoint, value: unknown): Value {\n  return withEndpoint(endpoint, () => {\n    for (const [name, handler] of Handlers.entries()) {\n      if (handler.canHandle(value)) {\n        return {\n          type: ValueType.HANDLER,\n          name,\n          value: handler.serialize(value),\n        }\n      }\n    }\n\n    return {\n      type: ValueType.RAW,\n      value,\n    }\n  })\n}\n\nexport function fromValue(endpoint: Endpoint, value: Value): unknown {\n  return withEndpoint(endpoint, () => {\n    switch (value.type) {\n      case ValueType.RAW:\n        return value.value\n      case ValueType.HANDLER: {\n        const handler = Handlers.get(value.name)\n        if (handler != null) return handler.deserialize(value.value)\n        return value.value\n      }\n      default:\n        throw new Error(`Unknown type: ${(value as Value).type}`)\n    }\n  })\n}\n\nexport function createEndpointProxy<T>(\n  endpoint: Endpoint,\n  path: Array<string | number | symbol>,\n  target: any = function () {},\n  boundArgs: unknown[] = [],\n): Remote<T> {\n  let isReleased = false\n  const proxy = new Proxy(target, {\n    get(_, property) {\n      throwIfProxyReleased(isReleased)\n      if (property === PublicSymbols.release) {\n        return async () => {\n          isReleased = true\n          try {\n            await sendRequest(endpoint, {\n              id: generateUUID(),\n              type: MessageType.RELEASE,\n              path: path.map((p) => p.toString()),\n            })\n          } finally {\n            endpoint.close()\n          }\n        }\n      } else if (property === 'then') {\n        if (path.length === 0) return { then: () => proxy }\n        const value = sendRequest(endpoint, {\n          id: generateUUID(),\n          type: MessageType.get,\n          path: path.map((p) => p.toString()),\n        }).then((response) => fromValue(endpoint, response.value))\n\n        return value.then.bind(value)\n      } else {\n        return createEndpointProxy(endpoint, [...path, property], target)\n      }\n    },\n    set(_, property, value) {\n      throwIfProxyReleased(isReleased)\n\n      void sendRequest(endpoint, {\n        id: generateUUID(),\n        type: MessageType.set,\n        path: [...path, property].map((p) => p.toString()),\n        value: toValue(endpoint, value),\n      })\n\n      return true\n    },\n    apply(_, _this, args) {\n      throwIfProxyReleased(isReleased)\n\n      const last = path[path.length - 1]\n\n      if (last === 'bind') {\n        return createEndpointProxy(\n          endpoint,\n          path.slice(0, -1),\n          target,\n          args.slice(1),\n        )\n      } else {\n        return sendRequest(endpoint, {\n          id: generateUUID(),\n          type: MessageType.apply,\n          path: path.map((p) => p.toString()),\n          argumentList: [...boundArgs, ...args].map((arg) =>\n            toValue(endpoint, arg),\n          ),\n        }).then((response) => fromValue(endpoint, response.value))\n      }\n    },\n    async construct(_, args) {\n      throwIfProxyReleased(isReleased)\n\n      const response = await sendRequest(endpoint, {\n        id: generateUUID(),\n        type: MessageType.construct,\n        path: path.map((p) => p.toString()),\n        argumentList: args.map((arg) => toValue(endpoint, arg)),\n      })\n\n      return fromValue(endpoint, response.value)\n    },\n  })\n\n  return proxy as unknown as Remote<T>\n}\n\nasync function sendRequest(\n  endpoint: Endpoint,\n  request: Message,\n): Promise<ReturnMessage> {\n  const scope = new DisposableScope()\n\n  try {\n    return await new Promise((resolve, reject) => {\n      scope\n        .emitter(endpoint)\n        .on('message', (event) => {\n          const response = event.detail as ReturnMessage\n          if (response.id === request.id) resolve(response)\n        })\n        .on('closed', () => {\n          reject(new Error('Endpoint closed'))\n        })\n\n      endpoint.dispatchEvent('message', request)\n    })\n  } finally {\n    scope.dispose()\n  }\n}\n\nfunction throwIfProxyReleased(isReleased: boolean): void {\n  if (isReleased) {\n    throw new Error('Proxy has been released and is not useable')\n  }\n}\n", "import type { Endpoint } from './channel'\nimport type { Remote } from './types'\nimport { createEndpointProxy } from './handlers'\n\nexport function create<T>(endpoint: Endpoint): Remote<T> {\n  return createEndpointProxy(endpoint, [])\n}\n", "import type { Endpoint } from './channel'\nimport { createExposed } from './handlers'\n\nexport function expose<T extends object>(target: T, endpoint: Endpoint): void {\n  createExposed(target, endpoint)\n}\n", "import type { Remote } from './types'\n\nexport async function set<T, K extends keyof T>(\n  target: Remote<T>,\n  property: K,\n  value: T[K],\n): Promise<void> {\n  const t = target as T\n\n  t[property] = value\n\n  while (true) {\n    const local = value\n    const remote = await target[property]\n\n    if (local === remote || JSON.stringify(local) === JSON.stringify(remote)) {\n      break\n    }\n  }\n}\n", "export const SetOps = {\n  /**\n   * a - b\n   */\n  difference: <T extends unknown>(a: Set<T>, b: Set<T>) => {\n    const c = new Set<T>(a)\n    for (const item of b) {\n      c.delete(item)\n    }\n    return c\n  },\n  union: <T extends unknown>(a: Set<T>, b: Set<T>) => {\n    const c = new Set<T>(a)\n    for (const item of b) {\n      c.add(item)\n    }\n    return c\n  },\n  intersetion: <T extends unknown>(a: Set<T>, b: Set<T>) => {\n    const c = new Set<T>()\n    for (const item of a) {\n      if (b.has(item)) c.add(item)\n    }\n    return c\n  },\n}\n", "import { decode } from 'sourcemap-codec'\nimport { binarySearch, BinarySearchBias, first, last } from './array'\nimport { invariant } from './assert'\n\nexport type SourceMapSegment =\n  | [generatedColumn: number]\n  | [\n      generatedColumn: number,\n      sourceIndex: number,\n      originalLine: number,\n      originalColumn: number,\n    ]\n  | [\n      generatedColumn: number,\n      sourceIndex: number,\n      originalLine: number,\n      originalColumn: number,\n      nameIndex: number,\n    ]\n\nexport interface DecodedSourceMap {\n  file: string\n  sources: string[]\n  sourcesContent: string[]\n  names: string[]\n  mappings: SourceMapSegment[][]\n}\n\nexport type SourceMapLike =\n  | {\n      mappings: string\n      names?: string[]\n    }\n  | PartialDecodedSourceMap\n\ninterface PartialDecodedSourceMap {\n  names?: string[]\n  mappings: SourceMapSegment[][]\n}\n\nclass LineColumnMapper {\n  private readonly offsets: number[]\n\n  constructor(source: string) {\n    this.offsets = []\n    const lines = source.split('\\n')\n    let offset = 0\n    for (const line of lines) {\n      this.offsets.push(offset)\n\n      offset += line.length + 1\n    }\n  }\n\n  public positionAt(position: number): { line: number; column: number } {\n    const line = binarySearch(\n      position,\n      this.offsets,\n      (a, b) => a - b,\n      BinarySearchBias.GREATEST_LOWER_BOUND,\n    )\n    const offset = this.offsets[line]\n    invariant(offset != null, 'Invalid position.')\n    return { line, column: position - offset }\n  }\n\n  public offsetAt(line: number, column: number): number {\n    const offsets = this.offsets[line]\n    invariant(offsets != null, 'Invalid position.')\n    return offsets + column\n  }\n}\n\nexport class SourceTransformer {\n  private readonly source: string\n  private readonly sourceMap: DecodedSourceMap\n\n  private code: string = ''\n\n  private line: number = 0\n  private column: number = 0\n\n  constructor(fileName: string, source: string) {\n    this.source = source\n    this.sourceMap = {\n      file: fileName,\n      mappings: [],\n      names: [],\n      sources: [fileName],\n      sourcesContent: [source],\n    }\n  }\n\n  nextLine(): void {\n    if (!this.code.endsWith('\\n')) {\n      this.append(`\\n`)\n    }\n  }\n\n  append(code: string, sourceMap?: SourceMapLike): void {\n    const lines = code.split('\\n')\n    const lastLine = last(lines)\n    this.code += code\n\n    let mappings: DecodedSourceMap['mappings'] = []\n    if (sourceMap != null) {\n      const nameOffset = this.sourceMap.names.length\n      if (sourceMap.names != null) this.sourceMap.names.push(...sourceMap.names)\n      mappings = getMappings(sourceMap).map((mapping) =>\n        mapping.map((segment) => {\n          if (segment.length === 5) {\n            return [\n              segment[0],\n              0,\n              segment[2],\n              segment[3],\n              segment[4] + nameOffset,\n            ] as [number, number, number, number, number]\n          } else if (segment.length === 4) {\n            return [segment[0], 0, segment[2], segment[3]] as [\n              number,\n              number,\n              number,\n              number,\n            ]\n          }\n          return segment\n        }),\n      )\n    }\n    invariant(\n      mappings.length <= lines.length,\n      `Invalid source map: ${mappings.length} > ${\n        lines.length\n      }:\\n${code},\\n${JSON.stringify(mappings, null, 2)}`,\n    )\n\n    const current = (this.sourceMap.mappings[this.line] =\n      this.sourceMap.mappings[this.line] ?? [])\n    if (mappings.length > 0) {\n      current.push(\n        ...first(mappings).map((mapping) => {\n          mapping[0] += this.column\n          return mapping\n        }),\n      )\n    }\n\n    if (lines.length === 1) {\n      this.column += lastLine.length\n    } else {\n      this.line += lines.length - 1\n      this.column = lastLine.length\n      this.sourceMap.mappings.push(...mappings.slice(1))\n    }\n\n    for (let i = this.sourceMap.mappings.length; i <= this.line; i++) {\n      this.sourceMap.mappings.push([])\n    }\n  }\n\n  private _sourceLineColumnMapper?: LineColumnMapper\n  public get sourceLineColumnMapper(): LineColumnMapper {\n    return (\n      this._sourceLineColumnMapper ??\n      (this._sourceLineColumnMapper = new LineColumnMapper(this.source))\n    )\n  }\n\n  clone(start: number, end: number): void {\n    if (start >= end) return\n    const code = this.source.slice(start, end)\n    if (code.length === 0) return\n    const mapper = this.sourceLineColumnMapper\n    const { line, column } = mapper.positionAt(start)\n    const lines = code.split('\\n')\n    const sourceMap: PartialDecodedSourceMap = {\n      mappings: [[[0, 0, line, column]]],\n    }\n    for (let i = 1; i < lines.length; i++) {\n      if (lines[i]?.length === 0) sourceMap.mappings.push([])\n      else sourceMap.mappings.push([[0, 0, line + i, 0]])\n    }\n    this.append(code, sourceMap)\n  }\n\n  end(): { code: string; map: DecodedSourceMap } {\n    return {\n      code: this.code,\n      map: this.sourceMap,\n    }\n  }\n}\n\nexport function getMappings(\n  sourceMap: SourceMapLike,\n): DecodedSourceMap['mappings'] {\n  return typeof sourceMap.mappings === 'string'\n    ? decode(sourceMap.mappings)\n    : sourceMap.mappings\n}\n\nexport function rebaseSourceMap(\n  sourceMap: SourceMapLike,\n  startPosition?: { line: number; column: number },\n): DecodedSourceMap {\n  const mappings = getMappings(sourceMap)\n\n  if (startPosition == null) {\n    return {\n      file: '',\n      sources: [],\n      sourcesContent: [],\n      ...sourceMap,\n      names: sourceMap.names ?? [],\n      mappings,\n    }\n  }\n\n  const line = startPosition.line - 1\n  const column = startPosition.column - 1\n\n  return {\n    file: '',\n    sources: [],\n    sourcesContent: [],\n    ...sourceMap,\n    names: sourceMap.names ?? [],\n    mappings: mappings.map((mapping) =>\n      mapping.map((segment) => {\n        if (segment.length === 1) return segment\n\n        let originalLine = segment[2]\n        let originalColumn = segment[3]\n\n        if (originalLine === 0) {\n          originalColumn += column\n        }\n\n        originalLine += line\n\n        if (segment.length === 4) {\n          return [segment[0], segment[1], originalLine, originalColumn]\n        }\n\n        return [\n          segment[0],\n          segment[1],\n          originalLine,\n          originalColumn,\n          segment[4],\n        ]\n      }),\n    ),\n  }\n}\n", "import * as Sentry from '@sentry/node'\nimport { platform } from 'os'\nimport { inspect } from 'util'\n\ninterface Options {\n  release: string\n  environment: string\n  tracesSampleRate: number\n}\ninterface EventDefaults {\n  sessionId: string\n  os: string\n  packageName?: string\n  typescriptVersion?: string\n  nodeVersion: string\n  vueVersion?: string\n  [key: string]: string | number | boolean | undefined\n}\n\nexport class Telemetry {\n  private static isTelemetryEnabled: boolean | null = null\n\n  private readonly defaults: EventDefaults\n  private readonly user = {\n    id: this.getUserId(),\n  }\n\n  private isTelemetryEnabled: boolean =\n    Telemetry.isTelemetryEnabled ??\n    (process.env['VUEDX_TELEMETRY']?.toLowerCase() === 'on' ||\n      process.env['VUEDX_TELEMETRY']?.toLowerCase() === 'true' ||\n      false)\n\n  constructor(\n    key: string,\n    options: Options,\n    defaults?: Partial<EventDefaults>,\n  ) {\n    Sentry.init({\n      dsn: key,\n      defaultIntegrations: false,\n      release: options.release,\n      environment: options.environment,\n      sampleRate: options.tracesSampleRate,\n    } as any)\n\n    this.defaults = {\n      sessionId: Number(Math.random() * 1000000).toString(16),\n      nodeVersion: process.version,\n      os: platform(),\n      ...defaults,\n    }\n  }\n\n  private getUserId(): string {\n    return ''\n  }\n\n  measure(name: string, duration: number): void {\n    console.debug(`[measure] ${name}: ${Math.trunc(duration)}ms`)\n  }\n\n  trace(name: string, description?: string): () => void {\n    if (!this.isTelemetryEnabled) return () => {}\n    const activeTransaction = Sentry.getCurrentHub()\n      .getScope()\n      ?.getTransaction()\n    if (activeTransaction == null) {\n      const transaction = Sentry.startTransaction({\n        name,\n        description,\n      })\n\n      Sentry.configureScope((s: unknown) => {\n        const scope = s as Sentry.Scope\n        scope.setSpan(transaction)\n      })\n\n      return () => {\n        Sentry.captureMessage(`[trace] ${name}`, (s: unknown) => {\n          const scope = s as Sentry.Scope\n          scope.setSpan(transaction)\n          scope.setUser(this.user)\n          scope.setTags({ ...this.defaults })\n          scope.setLevel(Sentry.Severity.Info)\n\n          return scope\n        })\n        transaction.finish()\n        Sentry.configureScope((s: unknown) => {\n          const scope = s as Sentry.Scope\n          scope.setSpan(undefined)\n        })\n      }\n    } else {\n      const child = activeTransaction.startChild({\n        op: name,\n        description,\n      })\n\n      return () => {\n        child.finish()\n      }\n    }\n  }\n\n  collect(key: string, value: Record<string, any>): void {\n    if (!this.isTelemetryEnabled) return\n    const tags: Record<string, string | number | boolean> = {}\n    const allowed = new Set(['string', 'number', 'boolean'])\n    Object.entries(value).forEach(([key, value]) => {\n      if (allowed.has(typeof value)) {\n        tags[`data_${key}`] = value\n      }\n    })\n    Sentry.captureEvent({\n      message: `${key}`,\n      level: Sentry.Severity.Info,\n      user: this.user,\n      tags: {\n        ...this.defaults,\n        ...tags,\n      },\n      extra: value,\n    })\n  }\n\n  error(payload: any | Error): void {\n    if (!this.isTelemetryEnabled) return\n    if (!(payload instanceof Error)) {\n      payload = new Error(inspect(payload, true, 3, false))\n    }\n\n    void Sentry.captureException(payload, {\n      level: Sentry.Severity.Fatal,\n      user: this.user,\n      tags: {\n        ...this.defaults,\n      },\n    })\n  }\n\n  private static _instance?: Telemetry\n  static get instance(): Telemetry {\n    if (this._instance == null) {\n      if (process.env['JEST_WORKER_ID'] != null) {\n        this._instance = new Telemetry('', {\n          release: '',\n          environment: '',\n          tracesSampleRate: 0,\n        })\n      } else {\n        throw new Error(\n          'Use \"Telemetry.setup()\" to instantiate telemetry client.',\n        )\n      }\n    }\n\n    return this._instance\n  }\n\n  static setup(\n    key: string,\n    packageName: string,\n    packageVersion: string,\n    tracesSampleRate: number,\n    defaults: Partial<EventDefaults>,\n  ): void {\n    this._instance = new Telemetry(\n      key,\n      {\n        release: packageVersion,\n        environment: 'production',\n        tracesSampleRate,\n      },\n      {\n        ...defaults,\n        packageName,\n      },\n    )\n  }\n\n  static extend(defaults: Partial<EventDefaults>): void {\n    Object.assign(this.instance.defaults, defaults)\n  }\n\n  static setTelemetryEnabled(enabled: boolean): void {\n    this.isTelemetryEnabled = enabled\n\n    if (this._instance != null) {\n      this._instance.isTelemetryEnabled = enabled\n    }\n  }\n}\n\nexport async function tracePromise<T>(\n  event: string,\n  promise: Promise<T>,\n): Promise<T> {\n  const done = trace(event)\n  try {\n    return await promise\n  } catch (error) {\n    collectError(error as Error)\n    throw error\n  } finally {\n    done()\n  }\n}\n\nexport function trace(event: string, description?: string): () => void {\n  return Telemetry.instance.trace(event, description)\n}\n\nexport function collectError(error: string | Error): void {\n  return Telemetry.instance.error(error)\n}\n\nexport function collect(key: string, value: Record<string, any>): void {\n  return Telemetry.instance.collect(key, value)\n}\n", "import { performance } from 'perf_hooks'\nimport { Telemetry } from './telemetry'\n\nexport function startMeasure(name: string): () => void {\n  const start = performance.now()\n  performance.mark(`${name}|start`)\n\n  return () => {\n    const duration = performance.now() - start\n    performance.mark(`${name}|end`)\n    performance.measure(name, `${name}|start`, `${name}|end`)\n    Telemetry.instance.measure(name, duration)\n  }\n}\n\nexport function measure(name?: string): MethodDecorator {\n  return createMethodDecorator(({ target, propertyKey, next }) => {\n    const id = name ?? `${target.constructor.name}#${propertyKey.toString()}`\n\n    return function (this: any, ...args) {\n      const start = performance.now()\n      try {\n        return next.apply(this, args)\n      } finally {\n        const end = performance.now()\n        Telemetry.instance.measure(id, end - start)\n      }\n    }\n  })\n}\n\nfunction createMethodDecorator<T = unknown, R = unknown>(\n  createMethod: (options: {\n    target: Object\n    propertyKey: string | symbol\n    descriptor: TypedPropertyDescriptor<(...args: T[]) => R>\n    next(...args: T[]): R\n  }) => (...args: T[]) => R,\n): MethodDecorator {\n  return (target, propertyKey, descriptor) => {\n    const fn = descriptor?.value\n\n    if (typeof fn === 'function') {\n      descriptor.value = createMethod({\n        target,\n        propertyKey,\n        descriptor,\n        next: fn,\n      } as any) as any\n    }\n\n    return descriptor\n  }\n}\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nvar FullTextDocument = /** @class */ (function () {\n    function FullTextDocument(uri, languageId, version, content) {\n        this._uri = uri;\n        this._languageId = languageId;\n        this._version = version;\n        this._content = content;\n        this._lineOffsets = undefined;\n    }\n    Object.defineProperty(FullTextDocument.prototype, \"uri\", {\n        get: function () {\n            return this._uri;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\n        get: function () {\n            return this._languageId;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FullTextDocument.prototype, \"version\", {\n        get: function () {\n            return this._version;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    FullTextDocument.prototype.getText = function (range) {\n        if (range) {\n            var start = this.offsetAt(range.start);\n            var end = this.offsetAt(range.end);\n            return this._content.substring(start, end);\n        }\n        return this._content;\n    };\n    FullTextDocument.prototype.update = function (changes, version) {\n        for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {\n            var change = changes_1[_i];\n            if (FullTextDocument.isIncremental(change)) {\n                // makes sure start is before end\n                var range = getWellformedRange(change.range);\n                // update content\n                var startOffset = this.offsetAt(range.start);\n                var endOffset = this.offsetAt(range.end);\n                this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n                // update the offsets\n                var startLine = Math.max(range.start.line, 0);\n                var endLine = Math.max(range.end.line, 0);\n                var lineOffsets = this._lineOffsets;\n                var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n                if (endLine - startLine === addedLineOffsets.length) {\n                    for (var i = 0, len = addedLineOffsets.length; i < len; i++) {\n                        lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n                    }\n                }\n                else {\n                    if (addedLineOffsets.length < 10000) {\n                        lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets));\n                    }\n                    else { // avoid too many arguments for splice\n                        this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n                    }\n                }\n                var diff = change.text.length - (endOffset - startOffset);\n                if (diff !== 0) {\n                    for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n                        lineOffsets[i] = lineOffsets[i] + diff;\n                    }\n                }\n            }\n            else if (FullTextDocument.isFull(change)) {\n                this._content = change.text;\n                this._lineOffsets = undefined;\n            }\n            else {\n                throw new Error('Unknown change event received');\n            }\n        }\n        this._version = version;\n    };\n    FullTextDocument.prototype.getLineOffsets = function () {\n        if (this._lineOffsets === undefined) {\n            this._lineOffsets = computeLineOffsets(this._content, true);\n        }\n        return this._lineOffsets;\n    };\n    FullTextDocument.prototype.positionAt = function (offset) {\n        offset = Math.max(Math.min(offset, this._content.length), 0);\n        var lineOffsets = this.getLineOffsets();\n        var low = 0, high = lineOffsets.length;\n        if (high === 0) {\n            return { line: 0, character: offset };\n        }\n        while (low < high) {\n            var mid = Math.floor((low + high) / 2);\n            if (lineOffsets[mid] > offset) {\n                high = mid;\n            }\n            else {\n                low = mid + 1;\n            }\n        }\n        // low is the least x for which the line offset is larger than the current offset\n        // or array.length if no line offset is larger than the current offset\n        var line = low - 1;\n        return { line: line, character: offset - lineOffsets[line] };\n    };\n    FullTextDocument.prototype.offsetAt = function (position) {\n        var lineOffsets = this.getLineOffsets();\n        if (position.line >= lineOffsets.length) {\n            return this._content.length;\n        }\n        else if (position.line < 0) {\n            return 0;\n        }\n        var lineOffset = lineOffsets[position.line];\n        var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n        return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n    };\n    Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\n        get: function () {\n            return this.getLineOffsets().length;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    FullTextDocument.isIncremental = function (event) {\n        var candidate = event;\n        return candidate !== undefined && candidate !== null &&\n            typeof candidate.text === 'string' && candidate.range !== undefined &&\n            (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n    };\n    FullTextDocument.isFull = function (event) {\n        var candidate = event;\n        return candidate !== undefined && candidate !== null &&\n            typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n    };\n    return FullTextDocument;\n}());\nexport var TextDocument;\n(function (TextDocument) {\n    /**\n     * Creates a new text document.\n     *\n     * @param uri The document's uri.\n     * @param languageId  The document's language Id.\n     * @param version The document's initial version number.\n     * @param content The document's content.\n     */\n    function create(uri, languageId, version, content) {\n        return new FullTextDocument(uri, languageId, version, content);\n    }\n    TextDocument.create = create;\n    /**\n     * Updates a TextDocument by modifing its content.\n     *\n     * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n     * @param changes the changes to apply to the document.\n     * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n     *\n     */\n    function update(document, changes, version) {\n        if (document instanceof FullTextDocument) {\n            document.update(changes, version);\n            return document;\n        }\n        else {\n            throw new Error('TextDocument.update: document must be created by TextDocument.create');\n        }\n    }\n    TextDocument.update = update;\n    function applyEdits(document, edits) {\n        var text = document.getText();\n        var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {\n            var diff = a.range.start.line - b.range.start.line;\n            if (diff === 0) {\n                return a.range.start.character - b.range.start.character;\n            }\n            return diff;\n        });\n        var lastModifiedOffset = 0;\n        var spans = [];\n        for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {\n            var e = sortedEdits_1[_i];\n            var startOffset = document.offsetAt(e.range.start);\n            if (startOffset < lastModifiedOffset) {\n                throw new Error('Overlapping edit');\n            }\n            else if (startOffset > lastModifiedOffset) {\n                spans.push(text.substring(lastModifiedOffset, startOffset));\n            }\n            if (e.newText.length) {\n                spans.push(e.newText);\n            }\n            lastModifiedOffset = document.offsetAt(e.range.end);\n        }\n        spans.push(text.substr(lastModifiedOffset));\n        return spans.join('');\n    }\n    TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n    if (data.length <= 1) {\n        // sorted\n        return data;\n    }\n    var p = (data.length / 2) | 0;\n    var left = data.slice(0, p);\n    var right = data.slice(p);\n    mergeSort(left, compare);\n    mergeSort(right, compare);\n    var leftIdx = 0;\n    var rightIdx = 0;\n    var i = 0;\n    while (leftIdx < left.length && rightIdx < right.length) {\n        var ret = compare(left[leftIdx], right[rightIdx]);\n        if (ret <= 0) {\n            // smaller_equal -> take left to preserve order\n            data[i++] = left[leftIdx++];\n        }\n        else {\n            // greater -> take right\n            data[i++] = right[rightIdx++];\n        }\n    }\n    while (leftIdx < left.length) {\n        data[i++] = left[leftIdx++];\n    }\n    while (rightIdx < right.length) {\n        data[i++] = right[rightIdx++];\n    }\n    return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset) {\n    if (textOffset === void 0) { textOffset = 0; }\n    var result = isAtLineStart ? [textOffset] : [];\n    for (var i = 0; i < text.length; i++) {\n        var ch = text.charCodeAt(i);\n        if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {\n            if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {\n                i++;\n            }\n            result.push(textOffset + i + 1);\n        }\n    }\n    return result;\n}\nfunction getWellformedRange(range) {\n    var start = range.start;\n    var end = range.end;\n    if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n        return { start: end, end: start };\n    }\n    return range;\n}\nfunction getWellformedEdit(textEdit) {\n    var range = getWellformedRange(textEdit.range);\n    if (range !== textEdit.range) {\n        return { newText: textEdit.newText, range: range };\n    }\n    return textEdit;\n}\n", "import type {\n  AttributeNode,\n  CommentNode,\n  ComponentNode,\n  DirectiveNode,\n  ElementNode,\n  PlainElementNode,\n  InterpolationNode,\n  Node,\n  RootNode,\n  SimpleExpressionNode,\n  SourceLocation,\n  TextNode,\n  TemplateNode,\n  NodeTypes as NodeType,\n} from '@vue/compiler-core'\n\n/** @public */\nexport const NodeTypes = {\n  ROOT: 0 as NodeType.ROOT,\n  ELEMENT: 1 as NodeType.ELEMENT,\n  TEXT: 2 as NodeType.TEXT,\n  COMMENT: 3 as NodeType.COMMENT,\n  SIMPLE_EXPRESSION: 4 as NodeType.SIMPLE_EXPRESSION,\n  INTERPOLATION: 5 as NodeType.INTERPOLATION,\n  ATTRIBUTE: 6 as NodeType.ATTRIBUTE,\n  DIRECTIVE: 7 as NodeType.DIRECTIVE,\n  COMPOUND_EXPRESSION: 8 as NodeType.COMPOUND_EXPRESSION,\n  IF: 9 as NodeType.IF,\n  IF_BRANCH: 10 as NodeType.IF_BRANCH,\n  FOR: 11 as NodeType.FOR,\n  TEXT_CALL: 12 as NodeType.TEXT_CALL,\n  VNODE_CALL: 13 as NodeType.VNODE_CALL,\n  JS_CALL_EXPRESSION: 14 as NodeType.JS_CALL_EXPRESSION,\n  JS_OBJECT_EXPRESSION: 15 as NodeType.JS_OBJECT_EXPRESSION,\n  JS_PROPERTY: 16 as NodeType.JS_PROPERTY,\n  JS_ARRAY_EXPRESSION: 17 as NodeType.JS_ARRAY_EXPRESSION,\n  JS_FUNCTION_EXPRESSION: 18 as NodeType.JS_FUNCTION_EXPRESSION,\n  JS_CONDITIONAL_EXPRESSION: 19 as NodeType.JS_CONDITIONAL_EXPRESSION,\n  JS_CACHE_EXPRESSION: 20 as NodeType.JS_CACHE_EXPRESSION,\n  JS_BLOCK_STATEMENT: 21 as NodeType.JS_BLOCK_STATEMENT,\n  JS_TEMPLATE_LITERAL: 22 as NodeType.JS_TEMPLATE_LITERAL,\n  JS_IF_STATEMENT: 23 as NodeType.JS_IF_STATEMENT,\n  JS_ASSIGNMENT_EXPRESSION: 24 as NodeType.JS_ASSIGNMENT_EXPRESSION,\n  JS_SEQUENCE_EXPRESSION: 25 as NodeType.JS_SEQUENCE_EXPRESSION,\n  JS_RETURN_STATEMENT: 26 as NodeType.JS_RETURN_STATEMENT,\n}\n\n/** @public */\nexport const ElementTypes = {\n  ELEMENT: 0,\n  COMPONENT: 1,\n  SLOT: 2,\n  TEMPLATE: 3,\n}\n\n/** @public */\nexport {\n  Node,\n  RootNode,\n  ElementNode,\n  PlainElementNode,\n  ComponentNode,\n  AttributeNode,\n  DirectiveNode,\n  TextNode,\n  InterpolationNode,\n  CommentNode,\n  SimpleExpressionNode,\n  SourceLocation,\n  TemplateNode,\n}\n", "import {\n  AttributeNode,\n  CommentNode,\n  ComponentNode,\n  DirectiveNode,\n  ElementNode,\n  ExpressionNode,\n  InterpolationNode,\n  isSimpleIdentifier as _isSimpleIdentifier,\n  Node,\n  PlainElementNode,\n  RootNode,\n  SimpleExpressionNode,\n  SlotOutletNode,\n  TemplateNode,\n  TextNode,\n} from '@vue/compiler-core'\nimport { NodeTypes } from './node'\n\n/**\n * Checks if it is a valid JavaScript identifiers.\n *\n * @public\n */\nexport function isSimpleIdentifier(content: string): boolean {\n  return _isSimpleIdentifier(content.trim())\n}\n\n/**\n * Checks if it is Vue template AST Node.\n *\n * @public\n */\nexport function isNode(node: unknown): node is Node {\n  return typeof node === 'object' && node != null && 'type' in node\n}\n\n/**\n * Checks if it is an AST RootNode.\n *\n * @public\n */\nexport function isRootNode(node: unknown): node is RootNode {\n  return isNode(node) && node.type === NodeTypes.ROOT\n}\n\n/**\n * Checks if it is an AST ElementNode.\n *\n * @public\n */\nexport function isElementNode(node: unknown): node is ElementNode {\n  return isNode(node) && node.type === NodeTypes.ELEMENT\n}\n\n/**\n * Checks if it is an AST PlainElementNode.\n *\n * @public\n */\nexport function isPlainElementNode(node: unknown): node is PlainElementNode {\n  return isElementNode(node) && node.tagType === 0\n}\n\n/**\n * Checks if it is an AST ComponentNode.\n *\n * @public\n */\nexport function isComponentNode(node: unknown): node is ComponentNode {\n  return isElementNode(node) && node.tagType === 1\n}\n\n/**\n * Checks if it is an AST SlotNode.\n *\n * @public\n */\nexport function isSlotNode(node: unknown): node is SlotOutletNode {\n  return isElementNode(node) && node.tagType === 2\n}\n\n/**\n * Checks if it is an AST TemplateNode.\n * @public\n */\nexport function isTemplateNode(node: unknown): node is TemplateNode {\n  return isElementNode(node) && node.tagType === 3\n}\n\n/**\n * Checks if it is an AST TextNode.\n * @public\n */\nexport function isTextNode(node: unknown): node is TextNode {\n  return isNode(node) && node.type === NodeTypes.TEXT\n}\n\n/**\n * Checks if it is an AST CommentNode.\n * @public\n */\nexport function isCommentNode(node: unknown): node is CommentNode {\n  return isNode(node) && node.type === NodeTypes.COMMENT\n}\n\n/**\n * Checks if it is an AST ExpressionNode.\n * @public\n */\nexport function isExpressionNode(node: unknown): node is ExpressionNode {\n  return (\n    isNode(node) &&\n    (node.type === NodeTypes.SIMPLE_EXPRESSION ||\n      node.type === NodeTypes.COMPOUND_EXPRESSION)\n  )\n}\n\n/**\n * Checks if it is an AST ExpressionNode.\n * @public\n */\nexport function isSimpleExpressionNode(\n  node: unknown,\n): node is SimpleExpressionNode {\n  return isNode(node) && node.type === NodeTypes.SIMPLE_EXPRESSION\n}\n\n/**\n * Checks if it is an AST ExpressionNode.\n * @public\n */\nexport function isCompoundExpressionNode(\n  node: unknown,\n): node is SimpleExpressionNode {\n  return isNode(node) && node.type === NodeTypes.COMPOUND_EXPRESSION\n}\n\n/**\n * Checks if it is an AST InterpolationNode.\n * @public\n */\nexport function isInterpolationNode(node: unknown): node is InterpolationNode {\n  return isNode(node) && node.type === NodeTypes.INTERPOLATION\n}\n\n/**\n * Checks if it is an AST AttributeNode.\n * @public\n */\nexport function isAttributeNode(node: unknown): node is AttributeNode {\n  return isNode(node) && node.type === NodeTypes.ATTRIBUTE\n}\n\n/**\n * Checks if it is an AST DirectiveNode.\n * @public\n */\nexport function isDirectiveNode(node: unknown): node is DirectiveNode {\n  return isNode(node) && node.type === NodeTypes.DIRECTIVE\n}\n\nexport const builtInDirectives = [\n  'bind',\n  'cloak',\n  'else-if',\n  'else',\n  'for',\n  'html',\n  'if',\n  'model',\n  'on',\n  'on',\n  'once',\n  'pre',\n  'show',\n  'slot',\n  'text',\n] as const\n", "import {\n  SimpleExpressionNode,\n  createSimpleExpression as _createSimpleExpression,\n  SourceLocation,\n} from '@vue/compiler-core'\n\n/**\n * Create AST Node\n *\n * @public\n */\nexport function createSimpleExpression(\n  content: SimpleExpressionNode['content'],\n  isStatic: SimpleExpressionNode['isStatic'],\n  loc?: SourceLocation,\n  isConstant?: boolean,\n): SimpleExpressionNode {\n  return _createSimpleExpression(\n    content,\n    isStatic,\n    loc,\n    isConstant === true ? 0 : undefined,\n  )\n}\n", "import type { Node } from '@vue/compiler-core'\nimport { isNode } from './assert'\n\nconst VISITOR_KEYS = ([\n  ['children'], // ROOT = 0,\n  ['props', 'children'], // ELEMENT = 1,\n  [], // TEXT = 2,\n  [], // COMMENT = 3,\n  [], // SIMPLE_EXPRESSION = 4,\n  ['content'], // INTERPOLATION = 5,\n  ['value'], // ATTRIBUTE = 6,\n  ['exp', 'arg'], // DIRECTIVE = 7,\n  [], // COMPOUND_EXPRESSION = 8,\n  ['branches'], // IF = 9,\n  ['condition', 'userKey', 'children'], // IF_BRANCH = 10,\n  ['source', 'keyAlias', 'valueAlias', 'objectIndexAlias', 'children'], // FOR = 11,\n  [], // TEXT_CALL = 12,\n  [], // VNODE_CALL = 13,\n  [], // JS_CALL_EXPRESSION = 14,\n  [], // JS_OBJECT_EXPRESSION = 15,\n  [], // JS_PROPERTY = 16,\n  [], // JS_ARRAY_EXPRESSION = 17,\n  [], // JS_FUNCTION_EXPRESSION = 18,\n  [], // JS_CONDITIONAL_EXPRESSION = 19,\n  [], // JS_CACHE_EXPRESSION = 20,\n  [], // JS_BLOCK_STATEMENT = 21,\n  [], // JS_TEMPLATE_LITERAL = 22,\n  [], // JS_IF_STATEMENT = 23,\n  [], // JS_ASSIGNMENT_EXPRESSION = 24,\n  [], // JS_SEQUENCE_EXPRESSION = 25,\n  [], // JS_RETURN_STATEMENT = 26\n] as unknown) as Record<Node['type'], Array<keyof Node>>\n\n/**\n * @public\n */\nexport type TraversalAncestors = Array<{\n  node: Node\n  key: string\n  index?: number\n}>\n\n/**\n * @public\n */\nexport type TraversalHandler<T> = (\n  node: Node,\n  ancestors: TraversalAncestors,\n  state: T,\n) => void\n\n/**\n * @public\n */\nexport interface TraversalHandlers<T> {\n  enter?: TraversalHandler<T>\n  exit?: TraversalHandler<T>\n}\n\n/**\n * A general AST traversal utility with both prefix and postfix handlers, and a\n * state object. Exposes ancestry data to each handler so that more complex\n * AST data can be taken into account.\n *\n * @public\n */\nexport function traverse<T>(\n  node: Node,\n  handlers: TraversalHandler<T> | TraversalHandlers<T>,\n  state?: T,\n): void {\n  if (typeof handlers === 'function') {\n    handlers = { enter: handlers }\n  }\n\n  const { enter, exit } = handlers\n\n  traverseSimpleImpl(node, enter, exit, state, [])\n}\n\nfunction traverseSimpleImpl<T>(\n  node: Object,\n  enter: Function | undefined,\n  exit: Function | undefined,\n  state: T,\n  ancestors: TraversalAncestors,\n): void {\n  if (!isNode(node)) return\n\n  const keys = VISITOR_KEYS[node.type]\n  if (keys == null) return\n\n  if (enter != null) enter(node, ancestors, state)\n\n  for (const key of keys) {\n    const subNode = node[key]\n\n    if (Array.isArray(subNode)) {\n      for (let i = 0; i < subNode.length; i++) {\n        const child = subNode[i]\n        if (child == null) continue\n\n        ancestors.push({\n          node,\n          key,\n          index: i,\n        })\n\n        traverseSimpleImpl(child, enter, exit, state, ancestors)\n\n        ancestors.pop()\n      }\n    } else if (subNode != null) {\n      ancestors.push({\n        node,\n        key,\n      })\n\n      traverseSimpleImpl(subNode, enter, exit, state, ancestors)\n\n      ancestors.pop()\n    }\n  }\n\n  if (exit != null) exit(node, ancestors, state)\n}\n\n/**\n * An abortable AST traversal utility. Return false (or falsy value) to stop traversal.\n *\n * @public\n */\nexport function traverseEvery<T>(\n  node: Node,\n  enter: (node: Node, ancestors: TraversalAncestors, state: T) => boolean,\n  state?: any,\n  ancestors: TraversalAncestors = [],\n): void {\n  if (!isNode(node)) return\n  const keys = VISITOR_KEYS[node.type]\n  if (keys == null) return\n\n  if (enter(node, ancestors, state)) {\n    for (const key of keys) {\n      const subNode = node[key]\n      if (Array.isArray(subNode)) {\n        for (let i = 0; i < subNode.length; i++) {\n          const child = subNode[i]\n          if (isNode(child)) {\n            ancestors.push({\n              node,\n              key,\n              index: i,\n            })\n            traverseEvery(child, enter, state, ancestors)\n            ancestors.pop()\n          }\n        }\n      } else if (isNode(subNode)) {\n        ancestors.push({\n          node,\n          key,\n        })\n        traverseEvery(subNode, enter, state, ancestors)\n        ancestors.pop()\n      }\n    }\n  }\n}\n\n/**\n * A faster AST traversal utility. It behaves same as [traverse()] but there is no ancestory data.\n *\n * @public\n */\nexport function traverseFast<T = any>(\n  node: object,\n  enter: (node: Node, state: T, stop: () => void) => void,\n  state?: T,\n): void {\n  if (!isNode(node)) return\n\n  const keys = VISITOR_KEYS[node.type]\n  if (keys == null) return\n\n  let isStopped = false\n  const stop = (): void => {\n    isStopped = true\n  }\n  enter(node, state as T, stop)\n  if (isStopped) return\n\n  const forwardEnter = (node: Node, state: T, prevStop: () => void): void => {\n    enter(node, state, () => {\n      stop()\n      prevStop()\n    })\n  }\n  for (const key of keys) {\n    const subNode = node[key]\n\n    if (Array.isArray(subNode)) {\n      for (const node of subNode) {\n        traverseFast(node, forwardEnter, state)\n        if (isStopped) return\n      }\n    } else if (isNode(subNode)) {\n      traverseFast(subNode, forwardEnter, state)\n      if (isStopped) return\n    }\n  }\n}\n", "import type { ElementNode, Node, RootNode } from '@vue/compiler-core'\nimport {\n  isCommentNode,\n  isElementNode,\n  isInterpolationNode,\n  isRootNode,\n  isTextNode\n} from './assert'\nimport { TraversalAncestors, traverseEvery, traverseFast } from './traverse'\n\n/**\n * @public\n */\nexport interface SearchResult {\n  node: Node | null\n  ancestors: TraversalAncestors\n}\n\n/**\n * Find the deepest node containing the given position.\n *\n * @public\n */\nexport function findTemplateNodeAt(\n  ast: RootNode,\n  position: number,\n): SearchResult {\n  return findTemplateNodeInRange(ast, position, position)\n}\n\n/**\n * Find the parent element node.\n *\n * @public\n */\nexport function findParentNode(\n  ast: RootNode,\n  node: Node,\n): ElementNode | undefined {\n  let result: ElementNode | undefined\n  traverseEvery(ast, (element) => {\n    if (isElementNode(element)) {\n      if (element.children.includes(node as any)) {\n        result = element\n\n        return false\n      }\n    }\n\n    return true\n  })\n\n  return result\n}\n\n/**\n * Find a child (element, component, text, interpolation, or comment) node containing the given position.\n *\n * @public\n * @param mode - Open/close range comparison mode:\n *  \u2022 undefined - position in [start, end]\n *  \u2022 'start'   \u2014 position in [start, end)\n *  \u2022 'end'     - position in (start, end]\n */\nexport function findTemplateChildNodeAt(\n  ast: RootNode,\n  position: number,\n  mode?: 'start' | 'end',\n): SearchResult {\n  const result = findTemplateNodeInRange(ast, position, position, mode)\n\n  while (result.ancestors.length > 0) {\n    if (\n      isRootNode(result.node) ||\n      isElementNode(result.node) ||\n      isTextNode(result.node) ||\n      isInterpolationNode(result.node) ||\n      isCommentNode(result.node)\n    ) {\n      break\n    }\n\n    result.node = result.ancestors.pop()?.node ?? null\n  }\n\n  return (result as unknown) as {\n    node: ElementNode | null\n    ancestors: TraversalAncestors\n  }\n}\n\n/**\n * Find the deepest node containing the given position.\n *\n * @public\n * @param mode - Open/close range comparison mode:\n *  \u2022 undefined - position in [start, end]\n *  \u2022 'start'   \u2014 position in [start, end)\n *  \u2022 'end'     - position in (start, end]\n */\nexport function findTemplateNodeInRange(\n  ast: RootNode,\n  start: number,\n  end: number,\n  mode?: 'start' | 'end',\n): SearchResult {\n  const found = {\n    node: null as Node | null,\n    ancestors: [] as TraversalAncestors,\n  }\n\n  traverseEvery(ast, (node, ancestors) => {\n    if (\n      mode === 'start'\n        ? node.loc.start.offset <= start && end < node.loc.end.offset\n        : mode === 'end'\n        ? node.loc.start.offset < start && end <= node.loc.end.offset\n        : node.loc.start.offset <= start && end <= node.loc.end.offset\n    ) {\n      found.node = node\n      found.ancestors = ancestors.slice()\n\n      return true\n    } else {\n      return false\n    }\n  })\n\n  return found\n}\n\n/**\n * Get all nodes contained in given range. (partial overlaps are ignored)\n *\n * @public\n */\nexport function findTemplateNodesInRange(\n  ast: RootNode,\n  start: number,\n  end: number,\n): Node[] {\n  const found: Node[] = []\n\n  traverseFast(ast, (node) => {\n    if (node.loc.start.offset <= start && end <= node.loc.end.offset) {\n      found.push(node)\n    }\n  })\n\n  return found\n}\n\n/**\n * Get all child (element, component, text, interpolation, or comment) nodes contained in given range. (partial overlaps are ignored)\n *\n * @public\n */\nexport function findTemplateChildrenInRange(\n  ast: RootNode,\n  start: number,\n  end: number,\n): Node[] {\n  if (start === end) {\n    const a = findTemplateChildNodeAt(ast, start)\n\n    return a.node != null ? [a.node] : []\n  }\n\n  const a = findTemplateChildNodeAt(ast, start, 'start')\n  const b = findTemplateChildNodeAt(ast, end, 'end')\n  if (a.node == null || b.node == null) return []\n  if (a.node === b.node) return [a.node]\n\n  const pa = a.ancestors.pop()?.node\n  const pb = b.ancestors.pop()?.node\n\n  if (pa == null || pb == null) return []\n\n  if (pa === b.node) return [pa]\n  if (pb === a.node) return [pb]\n\n  if (pa === pb && isElementNode(pa)) {\n    return pa.children.slice(\n      pa.children.indexOf(a.node as any),\n      1 + pa.children.indexOf(b.node as any),\n    )\n  }\n\n  return []\n}\n", "import type {\n  AttributeNode,\n  DirectiveNode,\n  ElementNode,\n  Node,\n  RootNode,\n  SimpleExpressionNode,\n  TextNode,\n} from '@vue/compiler-core'\nimport {\n  isAttributeNode,\n  isDirectiveNode,\n  isElementNode,\n  isInterpolationNode,\n  isRootNode,\n  isSimpleExpressionNode,\n  isTextNode,\n  isCommentNode,\n} from './assert'\n\nconst selfClosingTag = [\n  'area',\n  'base',\n  'br',\n  'col',\n  'command',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'keygen',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n]\n\n/**\n * @public\n */\nexport interface StringifyOptions {\n  indent: number\n  initialIndent: number\n  directive: 'shorthand' | 'longhand'\n  replaceNodes: Map<Node, Node | null>\n}\n\nconst defaults: StringifyOptions = {\n  indent: 2,\n  initialIndent: 0,\n  directive: 'shorthand',\n  replaceNodes: new Map<Node, Node | null>(),\n}\n\n/**\n * Convert template AST to template code.\n *\n * @public\n */\nexport function stringify(\n  node: Node | Node[],\n  options?: Partial<StringifyOptions>,\n): string {\n  const finalOptions = { ...defaults, ...options }\n\n  return genNode(\n    Array.isArray(node) ? ({ type: 0, children: node } as any) : node,\n    finalOptions.initialIndent * finalOptions.initialIndent,\n    finalOptions,\n  )\n}\n\nconst shorthands = {\n  bind: ':',\n  on: '@',\n  slot: '#',\n} as const\n\nfunction genNode(\n  node: Node,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  if (options.replaceNodes.has(node)) {\n    const replaced = options.replaceNodes.get(node)\n    return replaced == null ? '' : genNode(replaced, indent, options)\n  } else if (isRootNode(node)) {\n    return genRootNode(node, indent, options)\n  } else if (isElementNode(node)) {\n    return genElementNode(node, indent, options)\n  } else if (isAttributeNode(node)) {\n    return genAttributeNode(node, indent, options)\n  } else if (isDirectiveNode(node)) {\n    return genDirectiveNode(node, indent, options)\n  } else if (isInterpolationNode(node)) {\n    return `{{ ${genNode(node.content, indent, options)} }}`\n  } else if (isSimpleExpressionNode(node)) {\n    return genExpressionNode(node, indent, options)\n  } else if (isTextNode(node)) {\n    return genTextNode(node, indent, options)\n  } else if (isCommentNode(node)) {\n    return (\n      ' '.repeat(indent) +\n      '<!--' +\n      genMultilineText(node.content, indent, options) +\n      '-->'\n    )\n  } else {\n    throw new Error(`Unsupported node type: ${node.type}`)\n  }\n}\n\nfunction genExpressionNode(\n  node: SimpleExpressionNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  return genMultilineText(node.content, indent, options)\n}\n\nfunction genTextNode(\n  node: TextNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  return genMultilineText(node.content, indent, options)\n}\n\nfunction genMultilineText(\n  content: string,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  if (content.startsWith('\\n')) {\n    content = content.trimStart()\n  }\n\n  if (content.includes('\\n')) {\n    content = content\n      .split('\\n')\n      .map((line) => line.trim())\n      .join('\\n' + ' '.repeat(indent + options.indent))\n  }\n\n  return content\n}\n\nfunction genRootNode(\n  node: RootNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  return genChildren(node, indent, options)\n}\n\nfunction genElementNode(\n  node: ElementNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  const code: string[] = []\n\n  code.push(' '.repeat(indent), '<', node.tag)\n\n  let shouldIndentClosing = false\n  const props = applyReplaceNodes(node.props, options)\n  if (props.length > 0) {\n    if (props.length > 2) {\n      code.push('\\n')\n      node.props.forEach((prop) => {\n        code.push(' '.repeat(indent + options.indent))\n        code.push(genNode(prop, indent + options.indent, options))\n        code.push('\\n')\n      })\n      shouldIndentClosing = true\n    } else {\n      props.forEach((prop) => {\n        code.push(' ')\n        code.push(genNode(prop, indent, options))\n      })\n    }\n  }\n\n  if (shouldIndentClosing) code.push(' '.repeat(indent))\n  if (node.isSelfClosing) {\n    if (!shouldIndentClosing) code.push(' ')\n    code.push('/>')\n  } else {\n    if (selfClosingTag.find((k) => k === node.tag) != null) {\n      code.push(' ', '/>')\n    } else {\n      code.push('>', genChildren(node, indent, options), '</', node.tag, '>')\n    }\n  }\n\n  return code.join('')\n}\n\nfunction genChildren(\n  node: ElementNode | RootNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  const code: string[] = []\n  const children = applyReplaceNodes(node.children, options)\n  if (children.length > 0) {\n    const hasOnlyInlineChildren = children.every(\n      (child) => !isElementNode(child),\n    )\n    if (hasOnlyInlineChildren) {\n      children.forEach((child) => {\n        code.push(genNode(child, indent + options.indent, options))\n      })\n    } else {\n      let wasLastChildInline = true\n      children.forEach((child) => {\n        if (isTextNode(child) && child.content.trim() === '') return // Ignore empty text nodes.\n        const isThisChildInline = !isElementNode(child)\n        if (wasLastChildInline && isThisChildInline) {\n          // No need to put anything between inline children.\n        } else if (wasLastChildInline) {\n          code.push('\\n')\n        } else if (isThisChildInline) {\n          code.push('\\n', ' '.repeat(indent + options.indent))\n        } else {\n          code.push('\\n')\n        }\n\n        code.push(genNode(child, indent + options.indent, options))\n        wasLastChildInline = isThisChildInline\n      })\n      code.push('\\n', ' '.repeat(indent))\n    }\n  }\n  return code.join('')\n}\n\nfunction applyReplaceNodes(nodes: Node[], options: StringifyOptions): Node[] {\n  return nodes\n    .map((node) => {\n      if (options.replaceNodes.has(node)) return options.replaceNodes.get(node)\n      return node\n    })\n    .filter(Boolean) as Node[]\n}\n\nfunction genDirectiveNode(\n  node: DirectiveNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  const code: string[] = []\n\n  if (options.directive === 'shorthand' && node.name in shorthands) {\n    code.push(shorthands[node.name as 'bind' | 'on' | 'slot'])\n  } else {\n    code.push(`v-${node.name}`)\n    if (node.arg != null) code.push(':')\n  }\n\n  if (isSimpleExpressionNode(node.arg)) {\n    if (node.arg.isStatic) code.push(genNode(node.arg, indent, options))\n    else code.push('[', genNode(node.arg, indent, options), ']')\n  }\n\n  node.modifiers.forEach((modifier) => code.push('.', modifier))\n\n  if (isSimpleExpressionNode(node.exp)) {\n    code.push('=\"', genNode(node.exp, indent, options), '\"')\n  }\n\n  return code.join('')\n}\n\nfunction genAttributeNode(\n  node: AttributeNode,\n  indent: number,\n  options: StringifyOptions,\n): string {\n  return node.value != null\n    ? `${node.name}=\"${genNode(node.value, indent, options)}\"`\n    : node.name\n}\n", "import { isString, hyphenate, extend, isObject, NO, isArray, makeMap, isSymbol, NOOP, EMPTY_OBJ, capitalize, camelize as camelize$1, PatchFlagNames, slotFlagsText, isOn, isReservedProp, toHandlerKey } from '@vue/shared';\nexport { generateCodeFrame } from '@vue/shared';\n\nfunction defaultOnError(error) {\r\n    throw error;\r\n}\r\nfunction defaultOnWarn(msg) {\r\n    (process.env.NODE_ENV !== 'production') && console.warn(`[Vue warn] ${msg.message}`);\r\n}\r\nfunction createCompilerError(code, loc, messages, additionalMessage) {\r\n    const msg = (process.env.NODE_ENV !== 'production') || !true\r\n        ? (messages || errorMessages)[code] + (additionalMessage || ``)\r\n        : code;\r\n    const error = new SyntaxError(String(msg));\r\n    error.code = code;\r\n    error.loc = loc;\r\n    return error;\r\n}\r\nconst errorMessages = {\r\n    // parse errors\r\n    [0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\r\n    [1 /* CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\r\n    [2 /* DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\r\n    [3 /* END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\r\n    [4 /* END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\r\n    [5 /* EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\r\n    [6 /* EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\r\n    [7 /* EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\r\n    [8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\r\n    [9 /* EOF_IN_TAG */]: 'Unexpected EOF in tag.',\r\n    [10 /* INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\r\n    [11 /* INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\r\n    [12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\r\n    [13 /* MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\r\n    [14 /* MISSING_END_TAG_NAME */]: 'End tag name was expected.',\r\n    [15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\r\n    [16 /* NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\r\n    [17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\r\n    [18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\r\n    [19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\r\n    [21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\r\n    [20 /* UNEXPECTED_NULL_CHARACTER */]: `Unexpected null cahracter.`,\r\n    [22 /* UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\r\n    // Vue-specific parse errors\r\n    [23 /* X_INVALID_END_TAG */]: 'Invalid end tag.',\r\n    [24 /* X_MISSING_END_TAG */]: 'Element is missing end tag.',\r\n    [25 /* X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\r\n    [26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\r\n        'Note that dynamic directive argument cannot contain spaces.',\r\n    // transform errors\r\n    [27 /* X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\r\n    [28 /* X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\r\n    [29 /* X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if.`,\r\n    [30 /* X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\r\n    [31 /* X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\r\n    [32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\r\n    [33 /* X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\r\n    [34 /* X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\r\n    [35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\r\n    [36 /* X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>.` +\r\n        `When there are multiple named slots, all slots should use <template> ` +\r\n        `syntax to avoid scope ambiguity.`,\r\n    [37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\r\n    [38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\r\n        `default slot. These children will be ignored.`,\r\n    [39 /* X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\r\n    [40 /* X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\r\n    [41 /* X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\r\n    [42 /* X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\r\n    [43 /* X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\r\n    [44 /* X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\r\n    // generic errors\r\n    [45 /* X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\r\n    [46 /* X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\r\n    [47 /* X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\r\n    [48 /* X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\r\n    // just to fullfill types\r\n    [49 /* __EXTEND_POINT__ */]: ``\r\n};\n\nconst FRAGMENT = Symbol((process.env.NODE_ENV !== 'production') ? `Fragment` : ``);\r\nconst TELEPORT = Symbol((process.env.NODE_ENV !== 'production') ? `Teleport` : ``);\r\nconst SUSPENSE = Symbol((process.env.NODE_ENV !== 'production') ? `Suspense` : ``);\r\nconst KEEP_ALIVE = Symbol((process.env.NODE_ENV !== 'production') ? `KeepAlive` : ``);\r\nconst BASE_TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `BaseTransition` : ``);\r\nconst OPEN_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `openBlock` : ``);\r\nconst CREATE_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createBlock` : ``);\r\nconst CREATE_ELEMENT_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createElementBlock` : ``);\r\nconst CREATE_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createVNode` : ``);\r\nconst CREATE_ELEMENT_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createElementVNode` : ``);\r\nconst CREATE_COMMENT = Symbol((process.env.NODE_ENV !== 'production') ? `createCommentVNode` : ``);\r\nconst CREATE_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `createTextVNode` : ``);\r\nconst CREATE_STATIC = Symbol((process.env.NODE_ENV !== 'production') ? `createStaticVNode` : ``);\r\nconst RESOLVE_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveComponent` : ``);\r\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDynamicComponent` : ``);\r\nconst RESOLVE_DIRECTIVE = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDirective` : ``);\r\nconst RESOLVE_FILTER = Symbol((process.env.NODE_ENV !== 'production') ? `resolveFilter` : ``);\r\nconst WITH_DIRECTIVES = Symbol((process.env.NODE_ENV !== 'production') ? `withDirectives` : ``);\r\nconst RENDER_LIST = Symbol((process.env.NODE_ENV !== 'production') ? `renderList` : ``);\r\nconst RENDER_SLOT = Symbol((process.env.NODE_ENV !== 'production') ? `renderSlot` : ``);\r\nconst CREATE_SLOTS = Symbol((process.env.NODE_ENV !== 'production') ? `createSlots` : ``);\r\nconst TO_DISPLAY_STRING = Symbol((process.env.NODE_ENV !== 'production') ? `toDisplayString` : ``);\r\nconst MERGE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `mergeProps` : ``);\r\nconst NORMALIZE_CLASS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeClass` : ``);\r\nconst NORMALIZE_STYLE = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeStyle` : ``);\r\nconst NORMALIZE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeProps` : ``);\r\nconst GUARD_REACTIVE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `guardReactiveProps` : ``);\r\nconst TO_HANDLERS = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlers` : ``);\r\nconst CAMELIZE = Symbol((process.env.NODE_ENV !== 'production') ? `camelize` : ``);\r\nconst CAPITALIZE = Symbol((process.env.NODE_ENV !== 'production') ? `capitalize` : ``);\r\nconst TO_HANDLER_KEY = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlerKey` : ``);\r\nconst SET_BLOCK_TRACKING = Symbol((process.env.NODE_ENV !== 'production') ? `setBlockTracking` : ``);\r\nconst PUSH_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `pushScopeId` : ``);\r\nconst POP_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `popScopeId` : ``);\r\nconst WITH_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `withScopeId` : ``);\r\nconst WITH_CTX = Symbol((process.env.NODE_ENV !== 'production') ? `withCtx` : ``);\r\nconst UNREF = Symbol((process.env.NODE_ENV !== 'production') ? `unref` : ``);\r\nconst IS_REF = Symbol((process.env.NODE_ENV !== 'production') ? `isRef` : ``);\r\nconst WITH_MEMO = Symbol((process.env.NODE_ENV !== 'production') ? `withMemo` : ``);\r\nconst IS_MEMO_SAME = Symbol((process.env.NODE_ENV !== 'production') ? `isMemoSame` : ``);\r\n// Name mapping for runtime helpers that need to be imported from 'vue' in\r\n// generated code. Make sure these are correctly exported in the runtime!\r\n// Using `any` here because TS doesn't allow symbols as index type.\r\nconst helperNameMap = {\r\n    [FRAGMENT]: `Fragment`,\r\n    [TELEPORT]: `Teleport`,\r\n    [SUSPENSE]: `Suspense`,\r\n    [KEEP_ALIVE]: `KeepAlive`,\r\n    [BASE_TRANSITION]: `BaseTransition`,\r\n    [OPEN_BLOCK]: `openBlock`,\r\n    [CREATE_BLOCK]: `createBlock`,\r\n    [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\r\n    [CREATE_VNODE]: `createVNode`,\r\n    [CREATE_ELEMENT_VNODE]: `createElementVNode`,\r\n    [CREATE_COMMENT]: `createCommentVNode`,\r\n    [CREATE_TEXT]: `createTextVNode`,\r\n    [CREATE_STATIC]: `createStaticVNode`,\r\n    [RESOLVE_COMPONENT]: `resolveComponent`,\r\n    [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\r\n    [RESOLVE_DIRECTIVE]: `resolveDirective`,\r\n    [RESOLVE_FILTER]: `resolveFilter`,\r\n    [WITH_DIRECTIVES]: `withDirectives`,\r\n    [RENDER_LIST]: `renderList`,\r\n    [RENDER_SLOT]: `renderSlot`,\r\n    [CREATE_SLOTS]: `createSlots`,\r\n    [TO_DISPLAY_STRING]: `toDisplayString`,\r\n    [MERGE_PROPS]: `mergeProps`,\r\n    [NORMALIZE_CLASS]: `normalizeClass`,\r\n    [NORMALIZE_STYLE]: `normalizeStyle`,\r\n    [NORMALIZE_PROPS]: `normalizeProps`,\r\n    [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\r\n    [TO_HANDLERS]: `toHandlers`,\r\n    [CAMELIZE]: `camelize`,\r\n    [CAPITALIZE]: `capitalize`,\r\n    [TO_HANDLER_KEY]: `toHandlerKey`,\r\n    [SET_BLOCK_TRACKING]: `setBlockTracking`,\r\n    [PUSH_SCOPE_ID]: `pushScopeId`,\r\n    [POP_SCOPE_ID]: `popScopeId`,\r\n    [WITH_SCOPE_ID]: `withScopeId`,\r\n    [WITH_CTX]: `withCtx`,\r\n    [UNREF]: `unref`,\r\n    [IS_REF]: `isRef`,\r\n    [WITH_MEMO]: `withMemo`,\r\n    [IS_MEMO_SAME]: `isMemoSame`\r\n};\r\nfunction registerRuntimeHelpers(helpers) {\r\n    Object.getOwnPropertySymbols(helpers).forEach(s => {\r\n        helperNameMap[s] = helpers[s];\r\n    });\r\n}\n\n// AST Utilities ---------------------------------------------------------------\r\n// Some expressions, e.g. sequence and conditional expressions, are never\r\n// associated with template nodes, so their source locations are just a stub.\r\n// Container types like CompoundExpression also don't need a real location.\r\nconst locStub = {\r\n    source: '',\r\n    start: { line: 1, column: 1, offset: 0 },\r\n    end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createRoot(children, loc = locStub) {\r\n    return {\r\n        type: 0 /* ROOT */,\r\n        children,\r\n        helpers: [],\r\n        components: [],\r\n        directives: [],\r\n        hoists: [],\r\n        imports: [],\r\n        cached: 0,\r\n        temps: 0,\r\n        codegenNode: undefined,\r\n        loc\r\n    };\r\n}\r\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\r\n    if (context) {\r\n        if (isBlock) {\r\n            context.helper(OPEN_BLOCK);\r\n            context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\r\n        }\r\n        else {\r\n            context.helper(getVNodeHelper(context.inSSR, isComponent));\r\n        }\r\n        if (directives) {\r\n            context.helper(WITH_DIRECTIVES);\r\n        }\r\n    }\r\n    return {\r\n        type: 13 /* VNODE_CALL */,\r\n        tag,\r\n        props,\r\n        children,\r\n        patchFlag,\r\n        dynamicProps,\r\n        directives,\r\n        isBlock,\r\n        disableTracking,\r\n        isComponent,\r\n        loc\r\n    };\r\n}\r\nfunction createArrayExpression(elements, loc = locStub) {\r\n    return {\r\n        type: 17 /* JS_ARRAY_EXPRESSION */,\r\n        loc,\r\n        elements\r\n    };\r\n}\r\nfunction createObjectExpression(properties, loc = locStub) {\r\n    return {\r\n        type: 15 /* JS_OBJECT_EXPRESSION */,\r\n        loc,\r\n        properties\r\n    };\r\n}\r\nfunction createObjectProperty(key, value) {\r\n    return {\r\n        type: 16 /* JS_PROPERTY */,\r\n        loc: locStub,\r\n        key: isString(key) ? createSimpleExpression(key, true) : key,\r\n        value\r\n    };\r\n}\r\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* NOT_CONSTANT */) {\r\n    return {\r\n        type: 4 /* SIMPLE_EXPRESSION */,\r\n        loc,\r\n        content,\r\n        isStatic,\r\n        constType: isStatic ? 3 /* CAN_STRINGIFY */ : constType\r\n    };\r\n}\r\nfunction createInterpolation(content, loc) {\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        loc,\r\n        content: isString(content)\r\n            ? createSimpleExpression(content, false, loc)\r\n            : content\r\n    };\r\n}\r\nfunction createCompoundExpression(children, loc = locStub) {\r\n    return {\r\n        type: 8 /* COMPOUND_EXPRESSION */,\r\n        loc,\r\n        children\r\n    };\r\n}\r\nfunction createCallExpression(callee, args = [], loc = locStub) {\r\n    return {\r\n        type: 14 /* JS_CALL_EXPRESSION */,\r\n        loc,\r\n        callee,\r\n        arguments: args\r\n    };\r\n}\r\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\r\n    return {\r\n        type: 18 /* JS_FUNCTION_EXPRESSION */,\r\n        params,\r\n        returns,\r\n        newline,\r\n        isSlot,\r\n        loc\r\n    };\r\n}\r\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\r\n    return {\r\n        type: 19 /* JS_CONDITIONAL_EXPRESSION */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        newline,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createCacheExpression(index, value, isVNode = false) {\r\n    return {\r\n        type: 20 /* JS_CACHE_EXPRESSION */,\r\n        index,\r\n        value,\r\n        isVNode,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createBlockStatement(body) {\r\n    return {\r\n        type: 21 /* JS_BLOCK_STATEMENT */,\r\n        body,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createTemplateLiteral(elements) {\r\n    return {\r\n        type: 22 /* JS_TEMPLATE_LITERAL */,\r\n        elements,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createIfStatement(test, consequent, alternate) {\r\n    return {\r\n        type: 23 /* JS_IF_STATEMENT */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createAssignmentExpression(left, right) {\r\n    return {\r\n        type: 24 /* JS_ASSIGNMENT_EXPRESSION */,\r\n        left,\r\n        right,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createSequenceExpression(expressions) {\r\n    return {\r\n        type: 25 /* JS_SEQUENCE_EXPRESSION */,\r\n        expressions,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createReturnStatement(returns) {\r\n    return {\r\n        type: 26 /* JS_RETURN_STATEMENT */,\r\n        returns,\r\n        loc: locStub\r\n    };\r\n}\n\nconst isStaticExp = (p) => p.type === 4 /* SIMPLE_EXPRESSION */ && p.isStatic;\r\nconst isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);\r\nfunction isCoreComponent(tag) {\r\n    if (isBuiltInType(tag, 'Teleport')) {\r\n        return TELEPORT;\r\n    }\r\n    else if (isBuiltInType(tag, 'Suspense')) {\r\n        return SUSPENSE;\r\n    }\r\n    else if (isBuiltInType(tag, 'KeepAlive')) {\r\n        return KEEP_ALIVE;\r\n    }\r\n    else if (isBuiltInType(tag, 'BaseTransition')) {\r\n        return BASE_TRANSITION;\r\n    }\r\n}\r\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\r\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\r\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\r\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\r\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\r\n/**\r\n * Simple lexer to check if an expression is a member expression. This is\r\n * lax and only checks validity at the root level (i.e. does not validate exps\r\n * inside square brackets), but it's ok since these are only used on template\r\n * expressions and false positives are invalid expressions in the first place.\r\n */\r\nconst isMemberExpression = (path) => {\r\n    // remove whitespaces around . or [ first\r\n    path = path.trim().replace(whitespaceRE, s => s.trim());\r\n    let state = 0 /* inMemberExp */;\r\n    let stateStack = [];\r\n    let currentOpenBracketCount = 0;\r\n    let currentOpenParensCount = 0;\r\n    let currentStringType = null;\r\n    for (let i = 0; i < path.length; i++) {\r\n        const char = path.charAt(i);\r\n        switch (state) {\r\n            case 0 /* inMemberExp */:\r\n                if (char === '[') {\r\n                    stateStack.push(state);\r\n                    state = 1 /* inBrackets */;\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === '(') {\r\n                    stateStack.push(state);\r\n                    state = 2 /* inParens */;\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\r\n                    return false;\r\n                }\r\n                break;\r\n            case 1 /* inBrackets */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `[`) {\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === `]`) {\r\n                    if (!--currentOpenBracketCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 2 /* inParens */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `(`) {\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (char === `)`) {\r\n                    // if the exp ends as a call then it should not be considered valid\r\n                    if (i === path.length - 1) {\r\n                        return false;\r\n                    }\r\n                    if (!--currentOpenParensCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 3 /* inString */:\r\n                if (char === currentStringType) {\r\n                    state = stateStack.pop();\r\n                    currentStringType = null;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    return !currentOpenBracketCount && !currentOpenParensCount;\r\n};\r\nfunction getInnerRange(loc, offset, length) {\r\n    const source = loc.source.substr(offset, length);\r\n    const newLoc = {\r\n        source,\r\n        start: advancePositionWithClone(loc.start, loc.source, offset),\r\n        end: loc.end\r\n    };\r\n    if (length != null) {\r\n        newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\r\n    }\r\n    return newLoc;\r\n}\r\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\r\n    return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);\r\n}\r\n// advance by mutation without cloning (for performance reasons), since this\r\n// gets called a lot in the parser\r\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\r\n    let linesCount = 0;\r\n    let lastNewLinePos = -1;\r\n    for (let i = 0; i < numberOfCharacters; i++) {\r\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\r\n            linesCount++;\r\n            lastNewLinePos = i;\r\n        }\r\n    }\r\n    pos.offset += numberOfCharacters;\r\n    pos.line += linesCount;\r\n    pos.column =\r\n        lastNewLinePos === -1\r\n            ? pos.column + numberOfCharacters\r\n            : numberOfCharacters - lastNewLinePos;\r\n    return pos;\r\n}\r\nfunction assert(condition, msg) {\r\n    /* istanbul ignore if */\r\n    if (!condition) {\r\n        throw new Error(msg || `unexpected compiler condition`);\r\n    }\r\n}\r\nfunction findDir(node, name, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 7 /* DIRECTIVE */ &&\r\n            (allowEmpty || p.exp) &&\r\n            (isString(name) ? p.name === name : name.test(p.name))) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (dynamicOnly)\r\n                continue;\r\n            if (p.name === name && (p.value || allowEmpty)) {\r\n                return p;\r\n            }\r\n        }\r\n        else if (p.name === 'bind' &&\r\n            (p.exp || allowEmpty) &&\r\n            isBindKey(p.arg, name)) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction isBindKey(arg, name) {\r\n    return !!(arg && isStaticExp(arg) && arg.content === name);\r\n}\r\nfunction hasDynamicKeyVBind(node) {\r\n    return node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n        p.name === 'bind' &&\r\n        (!p.arg || // v-bind=\"obj\"\r\n            p.arg.type !== 4 /* SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\r\n            !p.arg.isStatic) // v-bind:[foo]\r\n    );\r\n}\r\nfunction isText(node) {\r\n    return node.type === 5 /* INTERPOLATION */ || node.type === 2 /* TEXT */;\r\n}\r\nfunction isVSlot(p) {\r\n    return p.type === 7 /* DIRECTIVE */ && p.name === 'slot';\r\n}\r\nfunction isTemplateNode(node) {\r\n    return (node.type === 1 /* ELEMENT */ && node.tagType === 3 /* TEMPLATE */);\r\n}\r\nfunction isSlotOutlet(node) {\r\n    return node.type === 1 /* ELEMENT */ && node.tagType === 2 /* SLOT */;\r\n}\r\nfunction getVNodeHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\r\n}\r\nfunction getVNodeBlockHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\r\n}\r\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\r\nfunction getUnnormalizedProps(props, callPath = []) {\r\n    if (props &&\r\n        !isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const callee = props.callee;\r\n        if (!isString(callee) && propsHelperSet.has(callee)) {\r\n            return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\r\n        }\r\n    }\r\n    return [props, callPath];\r\n}\r\nfunction injectProp(node, prop, context) {\r\n    let propsWithInjection;\r\n    const originalProps = node.type === 13 /* VNODE_CALL */ ? node.props : node.arguments[2];\r\n    /**\r\n     * 1. mergeProps(...)\r\n     * 2. toHandlers(...)\r\n     * 3. normalizeProps(...)\r\n     * 4. normalizeProps(guardReactiveProps(...))\r\n     *\r\n     * we need to get the real props before normalization\r\n     */\r\n    let props = originalProps;\r\n    let callPath = [];\r\n    let parentCall;\r\n    if (props &&\r\n        !isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const ret = getUnnormalizedProps(props);\r\n        props = ret[0];\r\n        callPath = ret[1];\r\n        parentCall = callPath[callPath.length - 1];\r\n    }\r\n    if (props == null || isString(props)) {\r\n        propsWithInjection = createObjectExpression([prop]);\r\n    }\r\n    else if (props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        // merged props... add ours\r\n        // only inject key to object literal if it's the first argument so that\r\n        // if doesn't override user provided keys\r\n        const first = props.arguments[0];\r\n        if (!isString(first) && first.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n            first.properties.unshift(prop);\r\n        }\r\n        else {\r\n            if (props.callee === TO_HANDLERS) {\r\n                // #2366\r\n                propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n                    createObjectExpression([prop]),\r\n                    props\r\n                ]);\r\n            }\r\n            else {\r\n                props.arguments.unshift(createObjectExpression([prop]));\r\n            }\r\n        }\r\n        !propsWithInjection && (propsWithInjection = props);\r\n    }\r\n    else if (props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        let alreadyExists = false;\r\n        // check existing key to avoid overriding user provided keys\r\n        if (prop.key.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            const propKeyName = prop.key.content;\r\n            alreadyExists = props.properties.some(p => p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                p.key.content === propKeyName);\r\n        }\r\n        if (!alreadyExists) {\r\n            props.properties.unshift(prop);\r\n        }\r\n        propsWithInjection = props;\r\n    }\r\n    else {\r\n        // single v-bind with expression, return a merged replacement\r\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n            createObjectExpression([prop]),\r\n            props\r\n        ]);\r\n        // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\r\n        // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\r\n        // the `guardReactiveProps` will no longer be needed\r\n        if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\r\n            parentCall = callPath[callPath.length - 2];\r\n        }\r\n    }\r\n    if (node.type === 13 /* VNODE_CALL */) {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.props = propsWithInjection;\r\n        }\r\n    }\r\n    else {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.arguments[2] = propsWithInjection;\r\n        }\r\n    }\r\n}\r\nfunction toValidAssetId(name, type) {\r\n    return `_${type}_${name.replace(/[^\\w]/g, '_')}`;\r\n}\r\n// Check if a node contains expressions that reference current context scope ids\r\nfunction hasScopeRef(node, ids) {\r\n    if (!node || Object.keys(ids).length === 0) {\r\n        return false;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            for (let i = 0; i < node.props.length; i++) {\r\n                const p = node.props[i];\r\n                if (p.type === 7 /* DIRECTIVE */ &&\r\n                    (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\r\n                    return true;\r\n                }\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 11 /* FOR */:\r\n            if (hasScopeRef(node.source, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 9 /* IF */:\r\n            return node.branches.some(b => hasScopeRef(b, ids));\r\n        case 10 /* IF_BRANCH */:\r\n            if (hasScopeRef(node.condition, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return (!node.isStatic &&\r\n                isSimpleIdentifier(node.content) &&\r\n                !!ids[node.content]);\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            return node.children.some(c => isObject(c) && hasScopeRef(c, ids));\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return hasScopeRef(node.content, ids);\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return false;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) ;\r\n            return false;\r\n    }\r\n}\r\nfunction getMemoedVNodeCall(node) {\r\n    if (node.type === 14 /* JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\r\n        return node.arguments[1].returns;\r\n    }\r\n    else {\r\n        return node;\r\n    }\r\n}\r\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\r\n    if (!node.isBlock) {\r\n        node.isBlock = true;\r\n        removeHelper(getVNodeHelper(inSSR, node.isComponent));\r\n        helper(OPEN_BLOCK);\r\n        helper(getVNodeBlockHelper(inSSR, node.isComponent));\r\n    }\r\n}\n\nconst deprecationData = {\r\n    [\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */]: {\r\n        message: `Platform-native elements with \"is\" prop will no longer be ` +\r\n            `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\r\n            `prefixed with \"vue:\".`,\r\n        link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`\r\n    },\r\n    [\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */]: {\r\n        message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\r\n            `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\r\n            `\\`v-model:${key}\\`.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-model.html`\r\n    },\r\n    [\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */]: {\r\n        message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\r\n            `Vue 3 will automatically set a binding as DOM property when appropriate.`\r\n    },\r\n    [\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */]: {\r\n        message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\r\n            `object spread: it will now overwrite an existing non-mergeable attribute ` +\r\n            `that appears before v-bind in the case of conflict. ` +\r\n            `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\r\n            `You can also suppress this warning if the usage is intended.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-bind.html`\r\n    },\r\n    [\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */]: {\r\n        message: `.native modifier for v-on has been removed as is no longer necessary.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`\r\n    },\r\n    [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\r\n        message: `v-if / v-for precedence when used on the same element has changed ` +\r\n            `in Vue 3: v-if now takes higher precedence and will no longer have ` +\r\n            `access to v-for scope variables. It is best to avoid the ambiguity ` +\r\n            `with <template> tags or use a computed property that filters v-for ` +\r\n            `data source.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`\r\n    },\r\n    [\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */]: {\r\n        message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +\r\n            `Consider using function refs or refactor to avoid ref usage altogether.`,\r\n        link: `https://v3.vuejs.org/guide/migration/array-refs.html`\r\n    },\r\n    [\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */]: {\r\n        message: `<template> with no special directives will render as a native template ` +\r\n            `element instead of its inner content in Vue 3.`\r\n    },\r\n    [\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */]: {\r\n        message: `\"inline-template\" has been removed in Vue 3.`,\r\n        link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`\r\n    },\r\n    [\"COMPILER_FILTER\" /* COMPILER_FILTERS */]: {\r\n        message: `filters have been removed in Vue 3. ` +\r\n            `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\r\n            `Use method calls or computed properties instead.`,\r\n        link: `https://v3.vuejs.org/guide/migration/filters.html`\r\n    }\r\n};\r\nfunction getCompatValue(key, context) {\r\n    const config = context.options\r\n        ? context.options.compatConfig\r\n        : context.compatConfig;\r\n    const value = config && config[key];\r\n    if (key === 'MODE') {\r\n        return value || 3; // compiler defaults to v3 behavior\r\n    }\r\n    else {\r\n        return value;\r\n    }\r\n}\r\nfunction isCompatEnabled(key, context) {\r\n    const mode = getCompatValue('MODE', context);\r\n    const value = getCompatValue(key, context);\r\n    // in v3 mode, only enable if explicitly set to true\r\n    // otherwise enable for any non-false value\r\n    return mode === 3 ? value === true : value !== false;\r\n}\r\nfunction checkCompatEnabled(key, context, loc, ...args) {\r\n    const enabled = isCompatEnabled(key, context);\r\n    if ((process.env.NODE_ENV !== 'production') && enabled) {\r\n        warnDeprecation(key, context, loc, ...args);\r\n    }\r\n    return enabled;\r\n}\r\nfunction warnDeprecation(key, context, loc, ...args) {\r\n    const val = getCompatValue(key, context);\r\n    if (val === 'suppress-warning') {\r\n        return;\r\n    }\r\n    const { message, link } = deprecationData[key];\r\n    const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\r\n    const err = new SyntaxError(msg);\r\n    err.code = key;\r\n    if (loc)\r\n        err.loc = loc;\r\n    context.onWarn(err);\r\n}\n\n// The default decoder only provides escapes for characters reserved as part of\r\n// the template syntax, and is only used if the custom renderer did not provide\r\n// a platform-specific decoder.\r\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\r\nconst decodeMap = {\r\n    gt: '>',\r\n    lt: '<',\r\n    amp: '&',\r\n    apos: \"'\",\r\n    quot: '\"'\r\n};\r\nconst defaultParserOptions = {\r\n    delimiters: [`{{`, `}}`],\r\n    getNamespace: () => 0 /* HTML */,\r\n    getTextMode: () => 0 /* DATA */,\r\n    isVoidTag: NO,\r\n    isPreTag: NO,\r\n    isCustomElement: NO,\r\n    decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\r\n    onError: defaultOnError,\r\n    onWarn: defaultOnWarn,\r\n    comments: (process.env.NODE_ENV !== 'production')\r\n};\r\nfunction baseParse(content, options = {}) {\r\n    const context = createParserContext(content, options);\r\n    const start = getCursor(context);\r\n    return createRoot(parseChildren(context, 0 /* DATA */, []), getSelection(context, start));\r\n}\r\nfunction createParserContext(content, rawOptions) {\r\n    const options = extend({}, defaultParserOptions);\r\n    let key;\r\n    for (key in rawOptions) {\r\n        // @ts-ignore\r\n        options[key] =\r\n            rawOptions[key] === undefined\r\n                ? defaultParserOptions[key]\r\n                : rawOptions[key];\r\n    }\r\n    return {\r\n        options,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        originalSource: content,\r\n        source: content,\r\n        inPre: false,\r\n        inVPre: false,\r\n        onWarn: options.onWarn\r\n    };\r\n}\r\nfunction parseChildren(context, mode, ancestors) {\r\n    const parent = last(ancestors);\r\n    const ns = parent ? parent.ns : 0 /* HTML */;\r\n    const nodes = [];\r\n    while (!isEnd(context, mode, ancestors)) {\r\n        const s = context.source;\r\n        let node = undefined;\r\n        if (mode === 0 /* DATA */ || mode === 1 /* RCDATA */) {\r\n            if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\r\n                // '{{'\r\n                node = parseInterpolation(context, mode);\r\n            }\r\n            else if (mode === 0 /* DATA */ && s[0] === '<') {\r\n                // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\r\n                if (s.length === 1) {\r\n                    emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 1);\r\n                }\r\n                else if (s[1] === '!') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\r\n                    if (startsWith(s, '<!--')) {\r\n                        node = parseComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<!DOCTYPE')) {\r\n                        // Ignore DOCTYPE by a limitation.\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<![CDATA[')) {\r\n                        if (ns !== 0 /* HTML */) {\r\n                            node = parseCDATA(context, ancestors);\r\n                        }\r\n                        else {\r\n                            emitError(context, 1 /* CDATA_IN_HTML_CONTENT */);\r\n                            node = parseBogusComment(context);\r\n                        }\r\n                    }\r\n                    else {\r\n                        emitError(context, 11 /* INCORRECTLY_OPENED_COMMENT */);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (s[1] === '/') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\r\n                    if (s.length === 2) {\r\n                        emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 2);\r\n                    }\r\n                    else if (s[2] === '>') {\r\n                        emitError(context, 14 /* MISSING_END_TAG_NAME */, 2);\r\n                        advanceBy(context, 3);\r\n                        continue;\r\n                    }\r\n                    else if (/[a-z]/i.test(s[2])) {\r\n                        emitError(context, 23 /* X_INVALID_END_TAG */);\r\n                        parseTag(context, 1 /* End */, parent);\r\n                        continue;\r\n                    }\r\n                    else {\r\n                        emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (/[a-z]/i.test(s[1])) {\r\n                    node = parseElement(context, ancestors);\r\n                    // 2.x <template> with no directive compat\r\n                    if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context) &&\r\n                        node &&\r\n                        node.tag === 'template' &&\r\n                        !node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n                            isSpecialTemplateDirective(p.name))) {\r\n                        (process.env.NODE_ENV !== 'production') &&\r\n                            warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context, node.loc);\r\n                        node = node.children;\r\n                    }\r\n                }\r\n                else if (s[1] === '?') {\r\n                    emitError(context, 21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\r\n                    node = parseBogusComment(context);\r\n                }\r\n                else {\r\n                    emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\r\n                }\r\n            }\r\n        }\r\n        if (!node) {\r\n            node = parseText(context, mode);\r\n        }\r\n        if (isArray(node)) {\r\n            for (let i = 0; i < node.length; i++) {\r\n                pushNode(nodes, node[i]);\r\n            }\r\n        }\r\n        else {\r\n            pushNode(nodes, node);\r\n        }\r\n    }\r\n    // Whitespace handling strategy like v2\r\n    let removedWhitespace = false;\r\n    if (mode !== 2 /* RAWTEXT */ && mode !== 1 /* RCDATA */) {\r\n        const shouldCondense = context.options.whitespace !== 'preserve';\r\n        for (let i = 0; i < nodes.length; i++) {\r\n            const node = nodes[i];\r\n            if (!context.inPre && node.type === 2 /* TEXT */) {\r\n                if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\r\n                    const prev = nodes[i - 1];\r\n                    const next = nodes[i + 1];\r\n                    // Remove if:\r\n                    // - the whitespace is the first or last node, or:\r\n                    // - (condense mode) the whitespace is adjacent to a comment, or:\r\n                    // - (condense mode) the whitespace is between two elements AND contains newline\r\n                    if (!prev ||\r\n                        !next ||\r\n                        (shouldCondense &&\r\n                            (prev.type === 3 /* COMMENT */ ||\r\n                                next.type === 3 /* COMMENT */ ||\r\n                                (prev.type === 1 /* ELEMENT */ &&\r\n                                    next.type === 1 /* ELEMENT */ &&\r\n                                    /[\\r\\n]/.test(node.content))))) {\r\n                        removedWhitespace = true;\r\n                        nodes[i] = null;\r\n                    }\r\n                    else {\r\n                        // Otherwise, the whitespace is condensed into a single space\r\n                        node.content = ' ';\r\n                    }\r\n                }\r\n                else if (shouldCondense) {\r\n                    // in condense mode, consecutive whitespaces in text are condensed\r\n                    // down to a single space.\r\n                    node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\r\n                }\r\n            }\r\n            // Remove comment nodes if desired by configuration.\r\n            else if (node.type === 3 /* COMMENT */ && !context.options.comments) {\r\n                removedWhitespace = true;\r\n                nodes[i] = null;\r\n            }\r\n        }\r\n        if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\r\n            // remove leading newline per html spec\r\n            // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\r\n            const first = nodes[0];\r\n            if (first && first.type === 2 /* TEXT */) {\r\n                first.content = first.content.replace(/^\\r?\\n/, '');\r\n            }\r\n        }\r\n    }\r\n    return removedWhitespace ? nodes.filter(Boolean) : nodes;\r\n}\r\nfunction pushNode(nodes, node) {\r\n    if (node.type === 2 /* TEXT */) {\r\n        const prev = last(nodes);\r\n        // Merge if both this and the previous node are text and those are\r\n        // consecutive. This happens for cases like \"a < b\".\r\n        if (prev &&\r\n            prev.type === 2 /* TEXT */ &&\r\n            prev.loc.end.offset === node.loc.start.offset) {\r\n            prev.content += node.content;\r\n            prev.loc.end = node.loc.end;\r\n            prev.loc.source += node.loc.source;\r\n            return;\r\n        }\r\n    }\r\n    nodes.push(node);\r\n}\r\nfunction parseCDATA(context, ancestors) {\r\n    advanceBy(context, 9);\r\n    const nodes = parseChildren(context, 3 /* CDATA */, ancestors);\r\n    if (context.source.length === 0) {\r\n        emitError(context, 6 /* EOF_IN_CDATA */);\r\n    }\r\n    else {\r\n        advanceBy(context, 3);\r\n    }\r\n    return nodes;\r\n}\r\nfunction parseComment(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    // Regular comment.\r\n    const match = /--(\\!)?>/.exec(context.source);\r\n    if (!match) {\r\n        content = context.source.slice(4);\r\n        advanceBy(context, context.source.length);\r\n        emitError(context, 7 /* EOF_IN_COMMENT */);\r\n    }\r\n    else {\r\n        if (match.index <= 3) {\r\n            emitError(context, 0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\r\n        }\r\n        if (match[1]) {\r\n            emitError(context, 10 /* INCORRECTLY_CLOSED_COMMENT */);\r\n        }\r\n        content = context.source.slice(4, match.index);\r\n        // Advancing with reporting nested comments.\r\n        const s = context.source.slice(0, match.index);\r\n        let prevIndex = 1, nestedIndex = 0;\r\n        while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\r\n            advanceBy(context, nestedIndex - prevIndex + 1);\r\n            if (nestedIndex + 4 < s.length) {\r\n                emitError(context, 16 /* NESTED_COMMENT */);\r\n            }\r\n            prevIndex = nestedIndex + 1;\r\n        }\r\n        advanceBy(context, match.index + match[0].length - prevIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseBogusComment(context) {\r\n    const start = getCursor(context);\r\n    const contentStart = context.source[1] === '?' ? 1 : 2;\r\n    let content;\r\n    const closeIndex = context.source.indexOf('>');\r\n    if (closeIndex === -1) {\r\n        content = context.source.slice(contentStart);\r\n        advanceBy(context, context.source.length);\r\n    }\r\n    else {\r\n        content = context.source.slice(contentStart, closeIndex);\r\n        advanceBy(context, closeIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseElement(context, ancestors) {\r\n    // Start tag.\r\n    const wasInPre = context.inPre;\r\n    const wasInVPre = context.inVPre;\r\n    const parent = last(ancestors);\r\n    const element = parseTag(context, 0 /* Start */, parent);\r\n    const isPreBoundary = context.inPre && !wasInPre;\r\n    const isVPreBoundary = context.inVPre && !wasInVPre;\r\n    if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\r\n        // #4030 self-closing <pre> tag\r\n        if (isPreBoundary) {\r\n            context.inPre = false;\r\n        }\r\n        if (isVPreBoundary) {\r\n            context.inVPre = false;\r\n        }\r\n        return element;\r\n    }\r\n    // Children.\r\n    ancestors.push(element);\r\n    const mode = context.options.getTextMode(element, parent);\r\n    const children = parseChildren(context, mode, ancestors);\r\n    ancestors.pop();\r\n    // 2.x inline-template compat\r\n    {\r\n        const inlineTemplateProp = element.props.find(p => p.type === 6 /* ATTRIBUTE */ && p.name === 'inline-template');\r\n        if (inlineTemplateProp &&\r\n            checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\r\n            const loc = getSelection(context, element.loc.end);\r\n            inlineTemplateProp.value = {\r\n                type: 2 /* TEXT */,\r\n                content: loc.source,\r\n                loc\r\n            };\r\n        }\r\n    }\r\n    element.children = children;\r\n    // End tag.\r\n    if (startsWithEndTagOpen(context.source, element.tag)) {\r\n        parseTag(context, 1 /* End */, parent);\r\n    }\r\n    else {\r\n        emitError(context, 24 /* X_MISSING_END_TAG */, 0, element.loc.start);\r\n        if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\r\n            const first = children[0];\r\n            if (first && startsWith(first.loc.source, '<!--')) {\r\n                emitError(context, 8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\r\n            }\r\n        }\r\n    }\r\n    element.loc = getSelection(context, element.loc.start);\r\n    if (isPreBoundary) {\r\n        context.inPre = false;\r\n    }\r\n    if (isVPreBoundary) {\r\n        context.inVPre = false;\r\n    }\r\n    return element;\r\n}\r\nconst isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);\r\nfunction parseTag(context, type, parent) {\r\n    // Tag open.\r\n    const start = getCursor(context);\r\n    const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\r\n    const tag = match[1];\r\n    const ns = context.options.getNamespace(tag, parent);\r\n    advanceBy(context, match[0].length);\r\n    advanceSpaces(context);\r\n    // save current state in case we need to re-parse attributes with v-pre\r\n    const cursor = getCursor(context);\r\n    const currentSource = context.source;\r\n    // check <pre> tag\r\n    if (context.options.isPreTag(tag)) {\r\n        context.inPre = true;\r\n    }\r\n    // Attributes.\r\n    let props = parseAttributes(context, type);\r\n    // check v-pre\r\n    if (type === 0 /* Start */ &&\r\n        !context.inVPre &&\r\n        props.some(p => p.type === 7 /* DIRECTIVE */ && p.name === 'pre')) {\r\n        context.inVPre = true;\r\n        // reset context\r\n        extend(context, cursor);\r\n        context.source = currentSource;\r\n        // re-parse attrs and filter out v-pre itself\r\n        props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\r\n    }\r\n    // Tag close.\r\n    let isSelfClosing = false;\r\n    if (context.source.length === 0) {\r\n        emitError(context, 9 /* EOF_IN_TAG */);\r\n    }\r\n    else {\r\n        isSelfClosing = startsWith(context.source, '/>');\r\n        if (type === 1 /* End */ && isSelfClosing) {\r\n            emitError(context, 4 /* END_TAG_WITH_TRAILING_SOLIDUS */);\r\n        }\r\n        advanceBy(context, isSelfClosing ? 2 : 1);\r\n    }\r\n    if (type === 1 /* End */) {\r\n        return;\r\n    }\r\n    // 2.x deprecation checks\r\n    if ((process.env.NODE_ENV !== 'production') &&\r\n        isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\r\n        let hasIf = false;\r\n        let hasFor = false;\r\n        for (let i = 0; i < props.length; i++) {\r\n            const p = props[i];\r\n            if (p.type === 7 /* DIRECTIVE */) {\r\n                if (p.name === 'if') {\r\n                    hasIf = true;\r\n                }\r\n                else if (p.name === 'for') {\r\n                    hasFor = true;\r\n                }\r\n            }\r\n            if (hasIf && hasFor) {\r\n                warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\r\n            }\r\n        }\r\n    }\r\n    let tagType = 0 /* ELEMENT */;\r\n    if (!context.inVPre) {\r\n        if (tag === 'slot') {\r\n            tagType = 2 /* SLOT */;\r\n        }\r\n        else if (tag === 'template') {\r\n            if (props.some(p => p.type === 7 /* DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\r\n                tagType = 3 /* TEMPLATE */;\r\n            }\r\n        }\r\n        else if (isComponent(tag, props, context)) {\r\n            tagType = 1 /* COMPONENT */;\r\n        }\r\n    }\r\n    return {\r\n        type: 1 /* ELEMENT */,\r\n        ns,\r\n        tag,\r\n        tagType,\r\n        props,\r\n        isSelfClosing,\r\n        children: [],\r\n        loc: getSelection(context, start),\r\n        codegenNode: undefined // to be created during transform phase\r\n    };\r\n}\r\nfunction isComponent(tag, props, context) {\r\n    const options = context.options;\r\n    if (options.isCustomElement(tag)) {\r\n        return false;\r\n    }\r\n    if (tag === 'component' ||\r\n        /^[A-Z]/.test(tag) ||\r\n        isCoreComponent(tag) ||\r\n        (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\r\n        (options.isNativeTag && !options.isNativeTag(tag))) {\r\n        return true;\r\n    }\r\n    // at this point the tag should be a native tag, but check for potential \"is\"\r\n    // casting\r\n    for (let i = 0; i < props.length; i++) {\r\n        const p = props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.name === 'is' && p.value) {\r\n                if (p.value.content.startsWith('vue:')) {\r\n                    return true;\r\n                }\r\n                else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            // directive\r\n            // v-is (TODO Deprecate)\r\n            if (p.name === 'is') {\r\n                return true;\r\n            }\r\n            else if (\r\n            // :is on plain element - only treat as component in compat mode\r\n            p.name === 'bind' &&\r\n                isBindKey(p.arg, 'is') &&\r\n                true &&\r\n                checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseAttributes(context, type) {\r\n    const props = [];\r\n    const attributeNames = new Set();\r\n    while (context.source.length > 0 &&\r\n        !startsWith(context.source, '>') &&\r\n        !startsWith(context.source, '/>')) {\r\n        if (startsWith(context.source, '/')) {\r\n            emitError(context, 22 /* UNEXPECTED_SOLIDUS_IN_TAG */);\r\n            advanceBy(context, 1);\r\n            advanceSpaces(context);\r\n            continue;\r\n        }\r\n        if (type === 1 /* End */) {\r\n            emitError(context, 3 /* END_TAG_WITH_ATTRIBUTES */);\r\n        }\r\n        const attr = parseAttribute(context, attributeNames);\r\n        if (type === 0 /* Start */) {\r\n            props.push(attr);\r\n        }\r\n        if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\r\n            emitError(context, 15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\r\n        }\r\n        advanceSpaces(context);\r\n    }\r\n    return props;\r\n}\r\nfunction parseAttribute(context, nameSet) {\r\n    // Name.\r\n    const start = getCursor(context);\r\n    const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\r\n    const name = match[0];\r\n    if (nameSet.has(name)) {\r\n        emitError(context, 2 /* DUPLICATE_ATTRIBUTE */);\r\n    }\r\n    nameSet.add(name);\r\n    if (name[0] === '=') {\r\n        emitError(context, 19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\r\n    }\r\n    {\r\n        const pattern = /[\"'<]/g;\r\n        let m;\r\n        while ((m = pattern.exec(name))) {\r\n            emitError(context, 17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\r\n        }\r\n    }\r\n    advanceBy(context, name.length);\r\n    // Value\r\n    let value = undefined;\r\n    if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\r\n        advanceSpaces(context);\r\n        advanceBy(context, 1);\r\n        advanceSpaces(context);\r\n        value = parseAttributeValue(context);\r\n        if (!value) {\r\n            emitError(context, 13 /* MISSING_ATTRIBUTE_VALUE */);\r\n        }\r\n    }\r\n    const loc = getSelection(context, start);\r\n    if (!context.inVPre && /^(v-|:|\\.|@|#)/.test(name)) {\r\n        const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\r\n        let isPropShorthand = startsWith(name, '.');\r\n        let dirName = match[1] ||\r\n            (isPropShorthand || startsWith(name, ':')\r\n                ? 'bind'\r\n                : startsWith(name, '@')\r\n                    ? 'on'\r\n                    : 'slot');\r\n        let arg;\r\n        if (match[2]) {\r\n            const isSlot = dirName === 'slot';\r\n            const startOffset = name.lastIndexOf(match[2]);\r\n            const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\r\n            let content = match[2];\r\n            let isStatic = true;\r\n            if (content.startsWith('[')) {\r\n                isStatic = false;\r\n                if (!content.endsWith(']')) {\r\n                    emitError(context, 26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\r\n                }\r\n                content = content.substr(1, content.length - 2);\r\n            }\r\n            else if (isSlot) {\r\n                // #1241 special case for v-slot: vuetify relies extensively on slot\r\n                // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\r\n                // supports such usage so we are keeping it consistent with 2.x.\r\n                content += match[3] || '';\r\n            }\r\n            arg = {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content,\r\n                isStatic,\r\n                constType: isStatic\r\n                    ? 3 /* CAN_STRINGIFY */\r\n                    : 0 /* NOT_CONSTANT */,\r\n                loc\r\n            };\r\n        }\r\n        if (value && value.isQuoted) {\r\n            const valueLoc = value.loc;\r\n            valueLoc.start.offset++;\r\n            valueLoc.start.column++;\r\n            valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\r\n            valueLoc.source = valueLoc.source.slice(1, -1);\r\n        }\r\n        const modifiers = match[3] ? match[3].substr(1).split('.') : [];\r\n        if (isPropShorthand)\r\n            modifiers.push('prop');\r\n        // 2.x compat v-bind:foo.sync -> v-model:foo\r\n        if (dirName === 'bind' && arg) {\r\n            if (modifiers.includes('sync') &&\r\n                checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\r\n                dirName = 'model';\r\n                modifiers.splice(modifiers.indexOf('sync'), 1);\r\n            }\r\n            if ((process.env.NODE_ENV !== 'production') && modifiers.includes('prop')) {\r\n                checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */, context, loc);\r\n            }\r\n        }\r\n        return {\r\n            type: 7 /* DIRECTIVE */,\r\n            name: dirName,\r\n            exp: value && {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content: value.content,\r\n                isStatic: false,\r\n                // Treat as non-constant by default. This can be potentially set to\r\n                // other values by `transformExpression` to make it eligible for hoisting.\r\n                constType: 0 /* NOT_CONSTANT */,\r\n                loc: value.loc\r\n            },\r\n            arg,\r\n            modifiers,\r\n            loc\r\n        };\r\n    }\r\n    return {\r\n        type: 6 /* ATTRIBUTE */,\r\n        name,\r\n        value: value && {\r\n            type: 2 /* TEXT */,\r\n            content: value.content,\r\n            loc: value.loc\r\n        },\r\n        loc\r\n    };\r\n}\r\nfunction parseAttributeValue(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    const quote = context.source[0];\r\n    const isQuoted = quote === `\"` || quote === `'`;\r\n    if (isQuoted) {\r\n        // Quoted value.\r\n        advanceBy(context, 1);\r\n        const endIndex = context.source.indexOf(quote);\r\n        if (endIndex === -1) {\r\n            content = parseTextData(context, context.source.length, 4 /* ATTRIBUTE_VALUE */);\r\n        }\r\n        else {\r\n            content = parseTextData(context, endIndex, 4 /* ATTRIBUTE_VALUE */);\r\n            advanceBy(context, 1);\r\n        }\r\n    }\r\n    else {\r\n        // Unquoted\r\n        const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\r\n        if (!match) {\r\n            return undefined;\r\n        }\r\n        const unexpectedChars = /[\"'<=`]/g;\r\n        let m;\r\n        while ((m = unexpectedChars.exec(match[0]))) {\r\n            emitError(context, 18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\r\n        }\r\n        content = parseTextData(context, match[0].length, 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n    return { content, isQuoted, loc: getSelection(context, start) };\r\n}\r\nfunction parseInterpolation(context, mode) {\r\n    const [open, close] = context.options.delimiters;\r\n    const closeIndex = context.source.indexOf(close, open.length);\r\n    if (closeIndex === -1) {\r\n        emitError(context, 25 /* X_MISSING_INTERPOLATION_END */);\r\n        return undefined;\r\n    }\r\n    const start = getCursor(context);\r\n    advanceBy(context, open.length);\r\n    const innerStart = getCursor(context);\r\n    const innerEnd = getCursor(context);\r\n    const rawContentLength = closeIndex - open.length;\r\n    const rawContent = context.source.slice(0, rawContentLength);\r\n    const preTrimContent = parseTextData(context, rawContentLength, mode);\r\n    const content = preTrimContent.trim();\r\n    const startOffset = preTrimContent.indexOf(content);\r\n    if (startOffset > 0) {\r\n        advancePositionWithMutation(innerStart, rawContent, startOffset);\r\n    }\r\n    const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\r\n    advancePositionWithMutation(innerEnd, rawContent, endOffset);\r\n    advanceBy(context, close.length);\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        content: {\r\n            type: 4 /* SIMPLE_EXPRESSION */,\r\n            isStatic: false,\r\n            // Set `isConstant` to false by default and will decide in transformExpression\r\n            constType: 0 /* NOT_CONSTANT */,\r\n            content,\r\n            loc: getSelection(context, innerStart, innerEnd)\r\n        },\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseText(context, mode) {\r\n    const endTokens = ['<', context.options.delimiters[0]];\r\n    if (mode === 3 /* CDATA */) {\r\n        endTokens.push(']]>');\r\n    }\r\n    let endIndex = context.source.length;\r\n    for (let i = 0; i < endTokens.length; i++) {\r\n        const index = context.source.indexOf(endTokens[i], 1);\r\n        if (index !== -1 && endIndex > index) {\r\n            endIndex = index;\r\n        }\r\n    }\r\n    const start = getCursor(context);\r\n    const content = parseTextData(context, endIndex, mode);\r\n    return {\r\n        type: 2 /* TEXT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\n/**\r\n * Get text data with a given length from the current location.\r\n * This translates HTML entities in the text data.\r\n */\r\nfunction parseTextData(context, length, mode) {\r\n    const rawText = context.source.slice(0, length);\r\n    advanceBy(context, length);\r\n    if (mode === 2 /* RAWTEXT */ ||\r\n        mode === 3 /* CDATA */ ||\r\n        rawText.indexOf('&') === -1) {\r\n        return rawText;\r\n    }\r\n    else {\r\n        // DATA or RCDATA containing \"&\"\". Entity decoding required.\r\n        return context.options.decodeEntities(rawText, mode === 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n}\r\nfunction getCursor(context) {\r\n    const { column, line, offset } = context;\r\n    return { column, line, offset };\r\n}\r\nfunction getSelection(context, start, end) {\r\n    end = end || getCursor(context);\r\n    return {\r\n        start,\r\n        end,\r\n        source: context.originalSource.slice(start.offset, end.offset)\r\n    };\r\n}\r\nfunction last(xs) {\r\n    return xs[xs.length - 1];\r\n}\r\nfunction startsWith(source, searchString) {\r\n    return source.startsWith(searchString);\r\n}\r\nfunction advanceBy(context, numberOfCharacters) {\r\n    const { source } = context;\r\n    advancePositionWithMutation(context, source, numberOfCharacters);\r\n    context.source = source.slice(numberOfCharacters);\r\n}\r\nfunction advanceSpaces(context) {\r\n    const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\r\n    if (match) {\r\n        advanceBy(context, match[0].length);\r\n    }\r\n}\r\nfunction getNewPosition(context, start, numberOfCharacters) {\r\n    return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\r\n}\r\nfunction emitError(context, code, offset, loc = getCursor(context)) {\r\n    if (offset) {\r\n        loc.offset += offset;\r\n        loc.column += offset;\r\n    }\r\n    context.options.onError(createCompilerError(code, {\r\n        start: loc,\r\n        end: loc,\r\n        source: ''\r\n    }));\r\n}\r\nfunction isEnd(context, mode, ancestors) {\r\n    const s = context.source;\r\n    switch (mode) {\r\n        case 0 /* DATA */:\r\n            if (startsWith(s, '</')) {\r\n                // TODO: probably bad performance\r\n                for (let i = ancestors.length - 1; i >= 0; --i) {\r\n                    if (startsWithEndTagOpen(s, ancestors[i].tag)) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        case 1 /* RCDATA */:\r\n        case 2 /* RAWTEXT */: {\r\n            const parent = last(ancestors);\r\n            if (parent && startsWithEndTagOpen(s, parent.tag)) {\r\n                return true;\r\n            }\r\n            break;\r\n        }\r\n        case 3 /* CDATA */:\r\n            if (startsWith(s, ']]>')) {\r\n                return true;\r\n            }\r\n            break;\r\n    }\r\n    return !s;\r\n}\r\nfunction startsWithEndTagOpen(source, tag) {\r\n    return (startsWith(source, '</') &&\r\n        source.substr(2, tag.length).toLowerCase() === tag.toLowerCase() &&\r\n        /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\r\n}\n\nfunction hoistStatic(root, context) {\r\n    walk(root, context, \r\n    // Root node is unfortunately non-hoistable due to potential parent\r\n    // fallthrough attributes.\r\n    isSingleElementRoot(root, root.children[0]));\r\n}\r\nfunction isSingleElementRoot(root, child) {\r\n    const { children } = root;\r\n    return (children.length === 1 &&\r\n        child.type === 1 /* ELEMENT */ &&\r\n        !isSlotOutlet(child));\r\n}\r\nfunction walk(node, context, doNotHoistNode = false) {\r\n    // Some transforms, e.g. transformAssetUrls from @vue/compiler-sfc, replaces\r\n    // static bindings with expressions. These expressions are guaranteed to be\r\n    // constant so they are still eligible for hoisting, but they are only\r\n    // available at runtime and therefore cannot be evaluated ahead of time.\r\n    // This is only a concern for pre-stringification (via transformHoist by\r\n    // @vue/compiler-dom), but doing it here allows us to perform only one full\r\n    // walk of the AST and allow `stringifyStatic` to stop walking as soon as its\r\n    // stringficiation threshold is met.\r\n    let canStringify = true;\r\n    const { children } = node;\r\n    const originalCount = children.length;\r\n    let hoistedCount = 0;\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        // only plain elements & text calls are eligible for hoisting.\r\n        if (child.type === 1 /* ELEMENT */ &&\r\n            child.tagType === 0 /* ELEMENT */) {\r\n            const constantType = doNotHoistNode\r\n                ? 0 /* NOT_CONSTANT */\r\n                : getConstantType(child, context);\r\n            if (constantType > 0 /* NOT_CONSTANT */) {\r\n                if (constantType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (constantType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode.patchFlag =\r\n                        -1 /* HOISTED */ + ((process.env.NODE_ENV !== 'production') ? ` /* HOISTED */` : ``);\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                    continue;\r\n                }\r\n            }\r\n            else {\r\n                // node may contain dynamic children, but its props may be eligible for\r\n                // hoisting.\r\n                const codegenNode = child.codegenNode;\r\n                if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                    const flag = getPatchFlag(codegenNode);\r\n                    if ((!flag ||\r\n                        flag === 512 /* NEED_PATCH */ ||\r\n                        flag === 1 /* TEXT */) &&\r\n                        getGeneratedPropsConstantType(child, context) >=\r\n                            2 /* CAN_HOIST */) {\r\n                        const props = getNodeProps(child);\r\n                        if (props) {\r\n                            codegenNode.props = context.hoist(props);\r\n                        }\r\n                    }\r\n                    if (codegenNode.dynamicProps) {\r\n                        codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else if (child.type === 12 /* TEXT_CALL */) {\r\n            const contentType = getConstantType(child.content, context);\r\n            if (contentType > 0) {\r\n                if (contentType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (contentType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                }\r\n            }\r\n        }\r\n        // walk further\r\n        if (child.type === 1 /* ELEMENT */) {\r\n            const isComponent = child.tagType === 1 /* COMPONENT */;\r\n            if (isComponent) {\r\n                context.scopes.vSlot++;\r\n            }\r\n            walk(child, context);\r\n            if (isComponent) {\r\n                context.scopes.vSlot--;\r\n            }\r\n        }\r\n        else if (child.type === 11 /* FOR */) {\r\n            // Do not hoist v-for single child because it has to be a block\r\n            walk(child, context, child.children.length === 1);\r\n        }\r\n        else if (child.type === 9 /* IF */) {\r\n            for (let i = 0; i < child.branches.length; i++) {\r\n                // Do not hoist v-if single child because it has to be a block\r\n                walk(child.branches[i], context, child.branches[i].children.length === 1);\r\n            }\r\n        }\r\n    }\r\n    if (canStringify && hoistedCount && context.transformHoist) {\r\n        context.transformHoist(children, context, node);\r\n    }\r\n    // all children were hoisted - the entire children array is hoistable.\r\n    if (hoistedCount &&\r\n        hoistedCount === originalCount &&\r\n        node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 0 /* ELEMENT */ &&\r\n        node.codegenNode &&\r\n        node.codegenNode.type === 13 /* VNODE_CALL */ &&\r\n        isArray(node.codegenNode.children)) {\r\n        node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\r\n    }\r\n}\r\nfunction getConstantType(node, context) {\r\n    const { constantCache } = context;\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            if (node.tagType !== 0 /* ELEMENT */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const cached = constantCache.get(node);\r\n            if (cached !== undefined) {\r\n                return cached;\r\n            }\r\n            const codegenNode = node.codegenNode;\r\n            if (codegenNode.type !== 13 /* VNODE_CALL */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const flag = getPatchFlag(codegenNode);\r\n            if (!flag) {\r\n                let returnType = 3 /* CAN_STRINGIFY */;\r\n                // Element itself has no patch flag. However we still need to check:\r\n                // 1. Even for a node with no patch flag, it is possible for it to contain\r\n                // non-hoistable expressions that refers to scope variables, e.g. compiler\r\n                // injected keys or cached event handlers. Therefore we need to always\r\n                // check the codegenNode's props to be sure.\r\n                const generatedPropsType = getGeneratedPropsConstantType(node, context);\r\n                if (generatedPropsType === 0 /* NOT_CONSTANT */) {\r\n                    constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                if (generatedPropsType < returnType) {\r\n                    returnType = generatedPropsType;\r\n                }\r\n                // 2. its children.\r\n                for (let i = 0; i < node.children.length; i++) {\r\n                    const childType = getConstantType(node.children[i], context);\r\n                    if (childType === 0 /* NOT_CONSTANT */) {\r\n                        constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                        return 0 /* NOT_CONSTANT */;\r\n                    }\r\n                    if (childType < returnType) {\r\n                        returnType = childType;\r\n                    }\r\n                }\r\n                // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\r\n                // type, check if any of the props can cause the type to be lowered\r\n                // we can skip can_patch because it's guaranteed by the absence of a\r\n                // patchFlag.\r\n                if (returnType > 1 /* CAN_SKIP_PATCH */) {\r\n                    for (let i = 0; i < node.props.length; i++) {\r\n                        const p = node.props[i];\r\n                        if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind' && p.exp) {\r\n                            const expType = getConstantType(p.exp, context);\r\n                            if (expType === 0 /* NOT_CONSTANT */) {\r\n                                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                                return 0 /* NOT_CONSTANT */;\r\n                            }\r\n                            if (expType < returnType) {\r\n                                returnType = expType;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                // only svg/foreignObject could be block here, however if they are\r\n                // static then they don't need to be blocks since there will be no\r\n                // nested updates.\r\n                if (codegenNode.isBlock) {\r\n                    context.removeHelper(OPEN_BLOCK);\r\n                    context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\r\n                    codegenNode.isBlock = false;\r\n                    context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\r\n                }\r\n                constantCache.set(node, returnType);\r\n                return returnType;\r\n            }\r\n            else {\r\n                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return 3 /* CAN_STRINGIFY */;\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n        case 10 /* IF_BRANCH */:\r\n            return 0 /* NOT_CONSTANT */;\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return getConstantType(node.content, context);\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return node.constType;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            let returnType = 3 /* CAN_STRINGIFY */;\r\n            for (let i = 0; i < node.children.length; i++) {\r\n                const child = node.children[i];\r\n                if (isString(child) || isSymbol(child)) {\r\n                    continue;\r\n                }\r\n                const childType = getConstantType(child, context);\r\n                if (childType === 0 /* NOT_CONSTANT */) {\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                else if (childType < returnType) {\r\n                    returnType = childType;\r\n                }\r\n            }\r\n            return returnType;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) ;\r\n            return 0 /* NOT_CONSTANT */;\r\n    }\r\n}\r\nconst allowHoistedHelperSet = new Set([\r\n    NORMALIZE_CLASS,\r\n    NORMALIZE_STYLE,\r\n    NORMALIZE_PROPS,\r\n    GUARD_REACTIVE_PROPS\r\n]);\r\nfunction getConstantTypeOfHelperCall(value, context) {\r\n    if (value.type === 14 /* JS_CALL_EXPRESSION */ &&\r\n        !isString(value.callee) &&\r\n        allowHoistedHelperSet.has(value.callee)) {\r\n        const arg = value.arguments[0];\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            return getConstantType(arg, context);\r\n        }\r\n        else if (arg.type === 14 /* JS_CALL_EXPRESSION */) {\r\n            // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\r\n            return getConstantTypeOfHelperCall(arg, context);\r\n        }\r\n    }\r\n    return 0 /* NOT_CONSTANT */;\r\n}\r\nfunction getGeneratedPropsConstantType(node, context) {\r\n    let returnType = 3 /* CAN_STRINGIFY */;\r\n    const props = getNodeProps(node);\r\n    if (props && props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        const { properties } = props;\r\n        for (let i = 0; i < properties.length; i++) {\r\n            const { key, value } = properties[i];\r\n            const keyType = getConstantType(key, context);\r\n            if (keyType === 0 /* NOT_CONSTANT */) {\r\n                return keyType;\r\n            }\r\n            if (keyType < returnType) {\r\n                returnType = keyType;\r\n            }\r\n            if (value.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n                // some helper calls can be hoisted,\r\n                // such as the `normalizeProps` generated by the compiler for pre-normalize class,\r\n                // in this case we need to respect the ConstanType of the helper's argments\r\n                if (value.type === 14 /* JS_CALL_EXPRESSION */) {\r\n                    return getConstantTypeOfHelperCall(value, context);\r\n                }\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const valueType = getConstantType(value, context);\r\n            if (valueType === 0 /* NOT_CONSTANT */) {\r\n                return valueType;\r\n            }\r\n            if (valueType < returnType) {\r\n                returnType = valueType;\r\n            }\r\n        }\r\n    }\r\n    return returnType;\r\n}\r\nfunction getNodeProps(node) {\r\n    const codegenNode = node.codegenNode;\r\n    if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n        return codegenNode.props;\r\n    }\r\n}\r\nfunction getPatchFlag(node) {\r\n    const flag = node.patchFlag;\r\n    return flag ? parseInt(flag, 10) : undefined;\r\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\r\n    const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\r\n    const context = {\r\n        // options\r\n        selfName: nameMatch && capitalize(camelize$1(nameMatch[1])),\r\n        prefixIdentifiers,\r\n        hoistStatic,\r\n        cacheHandlers,\r\n        nodeTransforms,\r\n        directiveTransforms,\r\n        transformHoist,\r\n        isBuiltInComponent,\r\n        isCustomElement,\r\n        expressionPlugins,\r\n        scopeId,\r\n        slotted,\r\n        ssr,\r\n        inSSR,\r\n        ssrCssVars,\r\n        bindingMetadata,\r\n        inline,\r\n        isTS,\r\n        onError,\r\n        onWarn,\r\n        compatConfig,\r\n        // state\r\n        root,\r\n        helpers: new Map(),\r\n        components: new Set(),\r\n        directives: new Set(),\r\n        hoists: [],\r\n        imports: [],\r\n        constantCache: new Map(),\r\n        temps: 0,\r\n        cached: 0,\r\n        identifiers: Object.create(null),\r\n        scopes: {\r\n            vFor: 0,\r\n            vSlot: 0,\r\n            vPre: 0,\r\n            vOnce: 0\r\n        },\r\n        parent: null,\r\n        currentNode: root,\r\n        childIndex: 0,\r\n        inVOnce: false,\r\n        // methods\r\n        helper(name) {\r\n            const count = context.helpers.get(name) || 0;\r\n            context.helpers.set(name, count + 1);\r\n            return name;\r\n        },\r\n        removeHelper(name) {\r\n            const count = context.helpers.get(name);\r\n            if (count) {\r\n                const currentCount = count - 1;\r\n                if (!currentCount) {\r\n                    context.helpers.delete(name);\r\n                }\r\n                else {\r\n                    context.helpers.set(name, currentCount);\r\n                }\r\n            }\r\n        },\r\n        helperString(name) {\r\n            return `_${helperNameMap[context.helper(name)]}`;\r\n        },\r\n        replaceNode(node) {\r\n            /* istanbul ignore if */\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                if (!context.currentNode) {\r\n                    throw new Error(`Node being replaced is already removed.`);\r\n                }\r\n                if (!context.parent) {\r\n                    throw new Error(`Cannot replace root node.`);\r\n                }\r\n            }\r\n            context.parent.children[context.childIndex] = context.currentNode = node;\r\n        },\r\n        removeNode(node) {\r\n            if ((process.env.NODE_ENV !== 'production') && !context.parent) {\r\n                throw new Error(`Cannot remove root node.`);\r\n            }\r\n            const list = context.parent.children;\r\n            const removalIndex = node\r\n                ? list.indexOf(node)\r\n                : context.currentNode\r\n                    ? context.childIndex\r\n                    : -1;\r\n            /* istanbul ignore if */\r\n            if ((process.env.NODE_ENV !== 'production') && removalIndex < 0) {\r\n                throw new Error(`node being removed is not a child of current parent`);\r\n            }\r\n            if (!node || node === context.currentNode) {\r\n                // current node removed\r\n                context.currentNode = null;\r\n                context.onNodeRemoved();\r\n            }\r\n            else {\r\n                // sibling node removed\r\n                if (context.childIndex > removalIndex) {\r\n                    context.childIndex--;\r\n                    context.onNodeRemoved();\r\n                }\r\n            }\r\n            context.parent.children.splice(removalIndex, 1);\r\n        },\r\n        onNodeRemoved: () => { },\r\n        addIdentifiers(exp) {\r\n        },\r\n        removeIdentifiers(exp) {\r\n        },\r\n        hoist(exp) {\r\n            if (isString(exp))\r\n                exp = createSimpleExpression(exp);\r\n            context.hoists.push(exp);\r\n            const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* CAN_HOIST */);\r\n            identifier.hoisted = exp;\r\n            return identifier;\r\n        },\r\n        cache(exp, isVNode = false) {\r\n            return createCacheExpression(context.cached++, exp, isVNode);\r\n        }\r\n    };\r\n    {\r\n        context.filters = new Set();\r\n    }\r\n    return context;\r\n}\r\nfunction transform(root, options) {\r\n    const context = createTransformContext(root, options);\r\n    traverseNode(root, context);\r\n    if (options.hoistStatic) {\r\n        hoistStatic(root, context);\r\n    }\r\n    if (!options.ssr) {\r\n        createRootCodegen(root, context);\r\n    }\r\n    // finalize meta information\r\n    root.helpers = [...context.helpers.keys()];\r\n    root.components = [...context.components];\r\n    root.directives = [...context.directives];\r\n    root.imports = context.imports;\r\n    root.hoists = context.hoists;\r\n    root.temps = context.temps;\r\n    root.cached = context.cached;\r\n    {\r\n        root.filters = [...context.filters];\r\n    }\r\n}\r\nfunction createRootCodegen(root, context) {\r\n    const { helper } = context;\r\n    const { children } = root;\r\n    if (children.length === 1) {\r\n        const child = children[0];\r\n        // if the single child is an element, turn it into a block.\r\n        if (isSingleElementRoot(root, child) && child.codegenNode) {\r\n            // single element root is never hoisted so codegenNode will never be\r\n            // SimpleExpressionNode\r\n            const codegenNode = child.codegenNode;\r\n            if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                makeBlock(codegenNode, context);\r\n            }\r\n            root.codegenNode = codegenNode;\r\n        }\r\n        else {\r\n            // - single <slot/>, IfNode, ForNode: already blocks.\r\n            // - single text node: always patched.\r\n            // root codegen falls through via genNode()\r\n            root.codegenNode = child;\r\n        }\r\n    }\r\n    else if (children.length > 1) {\r\n        // root has multiple nodes - return a fragment block.\r\n        let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n        let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n        // check if the fragment actually contains a single valid child with\r\n        // the rest being comments\r\n        if ((process.env.NODE_ENV !== 'production') &&\r\n            children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n            patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n            patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n        }\r\n        root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, undefined, false /* isComponent */);\r\n    }\r\n    else ;\r\n}\r\nfunction traverseChildren(parent, context) {\r\n    let i = 0;\r\n    const nodeRemoved = () => {\r\n        i--;\r\n    };\r\n    for (; i < parent.children.length; i++) {\r\n        const child = parent.children[i];\r\n        if (isString(child))\r\n            continue;\r\n        context.parent = parent;\r\n        context.childIndex = i;\r\n        context.onNodeRemoved = nodeRemoved;\r\n        traverseNode(child, context);\r\n    }\r\n}\r\nfunction traverseNode(node, context) {\r\n    context.currentNode = node;\r\n    // apply transform plugins\r\n    const { nodeTransforms } = context;\r\n    const exitFns = [];\r\n    for (let i = 0; i < nodeTransforms.length; i++) {\r\n        const onExit = nodeTransforms[i](node, context);\r\n        if (onExit) {\r\n            if (isArray(onExit)) {\r\n                exitFns.push(...onExit);\r\n            }\r\n            else {\r\n                exitFns.push(onExit);\r\n            }\r\n        }\r\n        if (!context.currentNode) {\r\n            // node was removed\r\n            return;\r\n        }\r\n        else {\r\n            // node may have been replaced\r\n            node = context.currentNode;\r\n        }\r\n    }\r\n    switch (node.type) {\r\n        case 3 /* COMMENT */:\r\n            if (!context.ssr) {\r\n                // inject import for the Comment symbol, which is needed for creating\r\n                // comment nodes with `createVNode`\r\n                context.helper(CREATE_COMMENT);\r\n            }\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            // no need to traverse, but we need to inject toString helper\r\n            if (!context.ssr) {\r\n                context.helper(TO_DISPLAY_STRING);\r\n            }\r\n            break;\r\n        // for container types, further traverse downwards\r\n        case 9 /* IF */:\r\n            for (let i = 0; i < node.branches.length; i++) {\r\n                traverseNode(node.branches[i], context);\r\n            }\r\n            break;\r\n        case 10 /* IF_BRANCH */:\r\n        case 11 /* FOR */:\r\n        case 1 /* ELEMENT */:\r\n        case 0 /* ROOT */:\r\n            traverseChildren(node, context);\r\n            break;\r\n    }\r\n    // exit transforms\r\n    context.currentNode = node;\r\n    let i = exitFns.length;\r\n    while (i--) {\r\n        exitFns[i]();\r\n    }\r\n}\r\nfunction createStructuralDirectiveTransform(name, fn) {\r\n    const matches = isString(name)\r\n        ? (n) => n === name\r\n        : (n) => name.test(n);\r\n    return (node, context) => {\r\n        if (node.type === 1 /* ELEMENT */) {\r\n            const { props } = node;\r\n            // structural directive transforms are not concerned with slots\r\n            // as they are handled separately in vSlot.ts\r\n            if (node.tagType === 3 /* TEMPLATE */ && props.some(isVSlot)) {\r\n                return;\r\n            }\r\n            const exitFns = [];\r\n            for (let i = 0; i < props.length; i++) {\r\n                const prop = props[i];\r\n                if (prop.type === 7 /* DIRECTIVE */ && matches(prop.name)) {\r\n                    // structural directives are removed to avoid infinite recursion\r\n                    // also we remove them *before* applying so that it can further\r\n                    // traverse itself in case it moves the node around\r\n                    props.splice(i, 1);\r\n                    i--;\r\n                    const onExit = fn(node, prop, context);\r\n                    if (onExit)\r\n                        exitFns.push(onExit);\r\n                }\r\n            }\r\n            return exitFns;\r\n        }\r\n    };\r\n}\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\r\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssr = false, isTS = false, inSSR = false }) {\r\n    const context = {\r\n        mode,\r\n        prefixIdentifiers,\r\n        sourceMap,\r\n        filename,\r\n        scopeId,\r\n        optimizeImports,\r\n        runtimeGlobalName,\r\n        runtimeModuleName,\r\n        ssr,\r\n        isTS,\r\n        inSSR,\r\n        source: ast.loc.source,\r\n        code: ``,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        indentLevel: 0,\r\n        pure: false,\r\n        map: undefined,\r\n        helper(key) {\r\n            return `_${helperNameMap[key]}`;\r\n        },\r\n        push(code, node) {\r\n            context.code += code;\r\n        },\r\n        indent() {\r\n            newline(++context.indentLevel);\r\n        },\r\n        deindent(withoutNewLine = false) {\r\n            if (withoutNewLine) {\r\n                --context.indentLevel;\r\n            }\r\n            else {\r\n                newline(--context.indentLevel);\r\n            }\r\n        },\r\n        newline() {\r\n            newline(context.indentLevel);\r\n        }\r\n    };\r\n    function newline(n) {\r\n        context.push('\\n' + `  `.repeat(n));\r\n    }\r\n    return context;\r\n}\r\nfunction generate(ast, options = {}) {\r\n    const context = createCodegenContext(ast, options);\r\n    if (options.onContextCreated)\r\n        options.onContextCreated(context);\r\n    const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\r\n    const hasHelpers = ast.helpers.length > 0;\r\n    const useWithBlock = !prefixIdentifiers && mode !== 'module';\r\n    // preambles\r\n    // in setup() inline mode, the preamble is generated in a sub context\r\n    // and returned separately.\r\n    const preambleContext = context;\r\n    {\r\n        genFunctionPreamble(ast, preambleContext);\r\n    }\r\n    // enter render function\r\n    const functionName = ssr ? `ssrRender` : `render`;\r\n    const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\r\n    const signature = args.join(', ');\r\n    {\r\n        push(`function ${functionName}(${signature}) {`);\r\n    }\r\n    indent();\r\n    if (useWithBlock) {\r\n        push(`with (_ctx) {`);\r\n        indent();\r\n        // function mode const declarations should be inside with block\r\n        // also they should be renamed to avoid collision with user properties\r\n        if (hasHelpers) {\r\n            push(`const { ${ast.helpers\r\n                .map(s => `${helperNameMap[s]}: _${helperNameMap[s]}`)\r\n                .join(', ')} } = _Vue`);\r\n            push(`\\n`);\r\n            newline();\r\n        }\r\n    }\r\n    // generate asset resolution statements\r\n    if (ast.components.length) {\r\n        genAssets(ast.components, 'component', context);\r\n        if (ast.directives.length || ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.directives.length) {\r\n        genAssets(ast.directives, 'directive', context);\r\n        if (ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.filters && ast.filters.length) {\r\n        newline();\r\n        genAssets(ast.filters, 'filter', context);\r\n        newline();\r\n    }\r\n    if (ast.temps > 0) {\r\n        push(`let `);\r\n        for (let i = 0; i < ast.temps; i++) {\r\n            push(`${i > 0 ? `, ` : ``}_temp${i}`);\r\n        }\r\n    }\r\n    if (ast.components.length || ast.directives.length || ast.temps) {\r\n        push(`\\n`);\r\n        newline();\r\n    }\r\n    // generate the VNode tree expression\r\n    if (!ssr) {\r\n        push(`return `);\r\n    }\r\n    if (ast.codegenNode) {\r\n        genNode(ast.codegenNode, context);\r\n    }\r\n    else {\r\n        push(`null`);\r\n    }\r\n    if (useWithBlock) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    deindent();\r\n    push(`}`);\r\n    return {\r\n        ast,\r\n        code: context.code,\r\n        preamble: ``,\r\n        // SourceMapGenerator does have toJSON() method but it's not in the types\r\n        map: context.map ? context.map.toJSON() : undefined\r\n    };\r\n}\r\nfunction genFunctionPreamble(ast, context) {\r\n    const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName } = context;\r\n    const VueBinding = runtimeGlobalName;\r\n    const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\r\n    // Generate const declaration for helpers\r\n    // In prefix mode, we place the const declaration at top so it's done\r\n    // only once; But if we not prefixing, we place the declaration inside the\r\n    // with block so it doesn't incur the `in` check cost for every helper access.\r\n    if (ast.helpers.length > 0) {\r\n        {\r\n            // \"with\" mode.\r\n            // save Vue in a separate variable to avoid collision\r\n            push(`const _Vue = ${VueBinding}\\n`);\r\n            // in \"with\" mode, helpers are declared inside the with block to avoid\r\n            // has check cost, but hoists are lifted out of the function - we need\r\n            // to provide the helper here.\r\n            if (ast.hoists.length) {\r\n                const staticHelpers = [\r\n                    CREATE_VNODE,\r\n                    CREATE_ELEMENT_VNODE,\r\n                    CREATE_COMMENT,\r\n                    CREATE_TEXT,\r\n                    CREATE_STATIC\r\n                ]\r\n                    .filter(helper => ast.helpers.includes(helper))\r\n                    .map(aliasHelper)\r\n                    .join(', ');\r\n                push(`const { ${staticHelpers} } = _Vue\\n`);\r\n            }\r\n        }\r\n    }\r\n    genHoists(ast.hoists, context);\r\n    newline();\r\n    push(`return `);\r\n}\r\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\r\n    const resolver = helper(type === 'filter'\r\n        ? RESOLVE_FILTER\r\n        : type === 'component'\r\n            ? RESOLVE_COMPONENT\r\n            : RESOLVE_DIRECTIVE);\r\n    for (let i = 0; i < assets.length; i++) {\r\n        let id = assets[i];\r\n        // potential component implicit self-reference inferred from SFC filename\r\n        const maybeSelfReference = id.endsWith('__self');\r\n        if (maybeSelfReference) {\r\n            id = id.slice(0, -6);\r\n        }\r\n        push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\r\n        if (i < assets.length - 1) {\r\n            newline();\r\n        }\r\n    }\r\n}\r\nfunction genHoists(hoists, context) {\r\n    if (!hoists.length) {\r\n        return;\r\n    }\r\n    context.pure = true;\r\n    const { push, newline, helper, scopeId, mode } = context;\r\n    newline();\r\n    hoists.forEach((exp, i) => {\r\n        if (exp) {\r\n            push(`const _hoisted_${i + 1} = `);\r\n            genNode(exp, context);\r\n            newline();\r\n        }\r\n    });\r\n    context.pure = false;\r\n}\r\nfunction isText$1(n) {\r\n    return (isString(n) ||\r\n        n.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n        n.type === 2 /* TEXT */ ||\r\n        n.type === 5 /* INTERPOLATION */ ||\r\n        n.type === 8 /* COMPOUND_EXPRESSION */);\r\n}\r\nfunction genNodeListAsArray(nodes, context) {\r\n    const multilines = nodes.length > 3 ||\r\n        (((process.env.NODE_ENV !== 'production')) && nodes.some(n => isArray(n) || !isText$1(n)));\r\n    context.push(`[`);\r\n    multilines && context.indent();\r\n    genNodeList(nodes, context, multilines);\r\n    multilines && context.deindent();\r\n    context.push(`]`);\r\n}\r\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\r\n    const { push, newline } = context;\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        const node = nodes[i];\r\n        if (isString(node)) {\r\n            push(node);\r\n        }\r\n        else if (isArray(node)) {\r\n            genNodeListAsArray(node, context);\r\n        }\r\n        else {\r\n            genNode(node, context);\r\n        }\r\n        if (i < nodes.length - 1) {\r\n            if (multilines) {\r\n                comma && push(',');\r\n                newline();\r\n            }\r\n            else {\r\n                comma && push(', ');\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction genNode(node, context) {\r\n    if (isString(node)) {\r\n        context.push(node);\r\n        return;\r\n    }\r\n    if (isSymbol(node)) {\r\n        context.push(context.helper(node));\r\n        return;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n            (process.env.NODE_ENV !== 'production') &&\r\n                assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\r\n                    `Apply appropriate transforms first.`);\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 2 /* TEXT */:\r\n            genText(node, context);\r\n            break;\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            genExpression(node, context);\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            genInterpolation(node, context);\r\n            break;\r\n        case 12 /* TEXT_CALL */:\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            genCompoundExpression(node, context);\r\n            break;\r\n        case 3 /* COMMENT */:\r\n            genComment(node, context);\r\n            break;\r\n        case 13 /* VNODE_CALL */:\r\n            genVNodeCall(node, context);\r\n            break;\r\n        case 14 /* JS_CALL_EXPRESSION */:\r\n            genCallExpression(node, context);\r\n            break;\r\n        case 15 /* JS_OBJECT_EXPRESSION */:\r\n            genObjectExpression(node, context);\r\n            break;\r\n        case 17 /* JS_ARRAY_EXPRESSION */:\r\n            genArrayExpression(node, context);\r\n            break;\r\n        case 18 /* JS_FUNCTION_EXPRESSION */:\r\n            genFunctionExpression(node, context);\r\n            break;\r\n        case 19 /* JS_CONDITIONAL_EXPRESSION */:\r\n            genConditionalExpression(node, context);\r\n            break;\r\n        case 20 /* JS_CACHE_EXPRESSION */:\r\n            genCacheExpression(node, context);\r\n            break;\r\n        case 21 /* JS_BLOCK_STATEMENT */:\r\n            genNodeList(node.body, context, true, false);\r\n            break;\r\n        // SSR only types\r\n        case 22 /* JS_TEMPLATE_LITERAL */:\r\n            break;\r\n        case 23 /* JS_IF_STATEMENT */:\r\n            break;\r\n        case 24 /* JS_ASSIGNMENT_EXPRESSION */:\r\n            break;\r\n        case 25 /* JS_SEQUENCE_EXPRESSION */:\r\n            break;\r\n        case 26 /* JS_RETURN_STATEMENT */:\r\n            break;\r\n        /* istanbul ignore next */\r\n        case 10 /* IF_BRANCH */:\r\n            // noop\r\n            break;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                assert(false, `unhandled codegen node type: ${node.type}`);\r\n                // make sure we exhaust all possible types\r\n                const exhaustiveCheck = node;\r\n                return exhaustiveCheck;\r\n            }\r\n    }\r\n}\r\nfunction genText(node, context) {\r\n    context.push(JSON.stringify(node.content), node);\r\n}\r\nfunction genExpression(node, context) {\r\n    const { content, isStatic } = node;\r\n    context.push(isStatic ? JSON.stringify(content) : content, node);\r\n}\r\nfunction genInterpolation(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure)\r\n        push(PURE_ANNOTATION);\r\n    push(`${helper(TO_DISPLAY_STRING)}(`);\r\n    genNode(node.content, context);\r\n    push(`)`);\r\n}\r\nfunction genCompoundExpression(node, context) {\r\n    for (let i = 0; i < node.children.length; i++) {\r\n        const child = node.children[i];\r\n        if (isString(child)) {\r\n            context.push(child);\r\n        }\r\n        else {\r\n            genNode(child, context);\r\n        }\r\n    }\r\n}\r\nfunction genExpressionAsPropertyKey(node, context) {\r\n    const { push } = context;\r\n    if (node.type === 8 /* COMPOUND_EXPRESSION */) {\r\n        push(`[`);\r\n        genCompoundExpression(node, context);\r\n        push(`]`);\r\n    }\r\n    else if (node.isStatic) {\r\n        // only quote keys if necessary\r\n        const text = isSimpleIdentifier(node.content)\r\n            ? node.content\r\n            : JSON.stringify(node.content);\r\n        push(text, node);\r\n    }\r\n    else {\r\n        push(`[${node.content}]`, node);\r\n    }\r\n}\r\nfunction genComment(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\r\n}\r\nfunction genVNodeCall(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\r\n    if (directives) {\r\n        push(helper(WITH_DIRECTIVES) + `(`);\r\n    }\r\n    if (isBlock) {\r\n        push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\r\n    }\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    const callHelper = isBlock\r\n        ? getVNodeBlockHelper(context.inSSR, isComponent)\r\n        : getVNodeHelper(context.inSSR, isComponent);\r\n    push(helper(callHelper) + `(`, node);\r\n    genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\r\n    push(`)`);\r\n    if (isBlock) {\r\n        push(`)`);\r\n    }\r\n    if (directives) {\r\n        push(`, `);\r\n        genNode(directives, context);\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genNullableArgs(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i] != null)\r\n            break;\r\n    }\r\n    return args.slice(0, i + 1).map(arg => arg || `null`);\r\n}\r\n// JavaScript\r\nfunction genCallExpression(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const callee = isString(node.callee) ? node.callee : helper(node.callee);\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(callee + `(`, node);\r\n    genNodeList(node.arguments, context);\r\n    push(`)`);\r\n}\r\nfunction genObjectExpression(node, context) {\r\n    const { push, indent, deindent, newline } = context;\r\n    const { properties } = node;\r\n    if (!properties.length) {\r\n        push(`{}`, node);\r\n        return;\r\n    }\r\n    const multilines = properties.length > 1 ||\r\n        (((process.env.NODE_ENV !== 'production')) &&\r\n            properties.some(p => p.value.type !== 4 /* SIMPLE_EXPRESSION */));\r\n    push(multilines ? `{` : `{ `);\r\n    multilines && indent();\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const { key, value } = properties[i];\r\n        // key\r\n        genExpressionAsPropertyKey(key, context);\r\n        push(`: `);\r\n        // value\r\n        genNode(value, context);\r\n        if (i < properties.length - 1) {\r\n            // will only reach this if it's multilines\r\n            push(`,`);\r\n            newline();\r\n        }\r\n    }\r\n    multilines && deindent();\r\n    push(multilines ? `}` : ` }`);\r\n}\r\nfunction genArrayExpression(node, context) {\r\n    genNodeListAsArray(node.elements, context);\r\n}\r\nfunction genFunctionExpression(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    const { params, returns, body, newline, isSlot } = node;\r\n    if (isSlot) {\r\n        // wrap slot functions with owner context\r\n        push(`_${helperNameMap[WITH_CTX]}(`);\r\n    }\r\n    push(`(`, node);\r\n    if (isArray(params)) {\r\n        genNodeList(params, context);\r\n    }\r\n    else if (params) {\r\n        genNode(params, context);\r\n    }\r\n    push(`) => `);\r\n    if (newline || body) {\r\n        push(`{`);\r\n        indent();\r\n    }\r\n    if (returns) {\r\n        if (newline) {\r\n            push(`return `);\r\n        }\r\n        if (isArray(returns)) {\r\n            genNodeListAsArray(returns, context);\r\n        }\r\n        else {\r\n            genNode(returns, context);\r\n        }\r\n    }\r\n    else if (body) {\r\n        genNode(body, context);\r\n    }\r\n    if (newline || body) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    if (isSlot) {\r\n        if (node.isNonScopedSlot) {\r\n            push(`, undefined, true`);\r\n        }\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genConditionalExpression(node, context) {\r\n    const { test, consequent, alternate, newline: needNewline } = node;\r\n    const { push, indent, deindent, newline } = context;\r\n    if (test.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        const needsParens = !isSimpleIdentifier(test.content);\r\n        needsParens && push(`(`);\r\n        genExpression(test, context);\r\n        needsParens && push(`)`);\r\n    }\r\n    else {\r\n        push(`(`);\r\n        genNode(test, context);\r\n        push(`)`);\r\n    }\r\n    needNewline && indent();\r\n    context.indentLevel++;\r\n    needNewline || push(` `);\r\n    push(`? `);\r\n    genNode(consequent, context);\r\n    context.indentLevel--;\r\n    needNewline && newline();\r\n    needNewline || push(` `);\r\n    push(`: `);\r\n    const isNested = alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */;\r\n    if (!isNested) {\r\n        context.indentLevel++;\r\n    }\r\n    genNode(alternate, context);\r\n    if (!isNested) {\r\n        context.indentLevel--;\r\n    }\r\n    needNewline && deindent(true /* without newline */);\r\n}\r\nfunction genCacheExpression(node, context) {\r\n    const { push, helper, indent, deindent, newline } = context;\r\n    push(`_cache[${node.index}] || (`);\r\n    if (node.isVNode) {\r\n        indent();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\r\n        newline();\r\n    }\r\n    push(`_cache[${node.index}] = `);\r\n    genNode(node.value, context);\r\n    if (node.isVNode) {\r\n        push(`,`);\r\n        newline();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(1),`);\r\n        newline();\r\n        push(`_cache[${node.index}]`);\r\n        deindent();\r\n    }\r\n    push(`)`);\r\n}\n\n// these keywords should not appear inside expressions, but operators like\r\n// typeof, instanceof and in are allowed\r\nconst prohibitedKeywordRE = new RegExp('\\\\b' +\r\n    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n        'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n        'extends,finally,continue,debugger,function,arguments,typeof,void')\r\n        .split(',')\r\n        .join('\\\\b|\\\\b') +\r\n    '\\\\b');\r\n// strip strings in expressions\r\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\r\n/**\r\n * Validate a non-prefixed expression.\r\n * This is only called when using the in-browser runtime compiler since it\r\n * doesn't prefix expressions.\r\n */\r\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\r\n    const exp = node.content;\r\n    // empty expressions are validated per-directive since some directives\r\n    // do allow empty expressions.\r\n    if (!exp.trim()) {\r\n        return;\r\n    }\r\n    try {\r\n        new Function(asRawStatements\r\n            ? ` ${exp} `\r\n            : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`);\r\n    }\r\n    catch (e) {\r\n        let message = e.message;\r\n        const keywordMatch = exp\r\n            .replace(stripStringRE, '')\r\n            .match(prohibitedKeywordRE);\r\n        if (keywordMatch) {\r\n            message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\r\n        }\r\n        context.onError(createCompilerError(43 /* X_INVALID_EXPRESSION */, node.loc, undefined, message));\r\n    }\r\n}\n\nconst transformExpression = (node, context) => {\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        node.content = processExpression(node.content, context);\r\n    }\r\n    else if (node.type === 1 /* ELEMENT */) {\r\n        // handle directives on element\r\n        for (let i = 0; i < node.props.length; i++) {\r\n            const dir = node.props[i];\r\n            // do not process for v-on & v-for since they are special handled\r\n            if (dir.type === 7 /* DIRECTIVE */ && dir.name !== 'for') {\r\n                const exp = dir.exp;\r\n                const arg = dir.arg;\r\n                // do not process exp if this is v-on:arg - we need special handling\r\n                // for wrapping inline statements.\r\n                if (exp &&\r\n                    exp.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                    !(dir.name === 'on' && arg)) {\r\n                    dir.exp = processExpression(exp, context, \r\n                    // slot args must be processed as function params\r\n                    dir.name === 'slot');\r\n                }\r\n                if (arg && arg.type === 4 /* SIMPLE_EXPRESSION */ && !arg.isStatic) {\r\n                    dir.arg = processExpression(arg, context);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n// Important: since this function uses Node.js only dependencies, it should\r\n// always be used with a leading !true check so that it can be\r\n// tree-shaken from the browser build.\r\nfunction processExpression(node, context, \r\n// some expressions like v-slot props & v-for aliases should be parsed as\r\n// function params\r\nasParams = false, \r\n// v-on handler values may contain multiple statements\r\nasRawStatements = false) {\r\n    {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            // simple in-browser validation (same logic in 2.x)\r\n            validateBrowserExpression(node, context, asParams, asRawStatements);\r\n        }\r\n        return node;\r\n    }\r\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\r\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\r\n        // #1587: We need to dynamically increment the key based on the current\r\n        // node's sibling nodes, since chained v-if/else branches are\r\n        // rendered at the same depth\r\n        const siblings = context.parent.children;\r\n        let i = siblings.indexOf(ifNode);\r\n        let key = 0;\r\n        while (i-- >= 0) {\r\n            const sibling = siblings[i];\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                key += sibling.branches.length;\r\n            }\r\n        }\r\n        // Exit callback. Complete the codegenNode when all children have been\r\n        // transformed.\r\n        return () => {\r\n            if (isRoot) {\r\n                ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\r\n            }\r\n            else {\r\n                // attach this branch's codegen node to the v-if root.\r\n                const parentCondition = getParentCondition(ifNode.codegenNode);\r\n                parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processIf(node, dir, context, processCodegen) {\r\n    if (dir.name !== 'else' &&\r\n        (!dir.exp || !dir.exp.content.trim())) {\r\n        const loc = dir.exp ? dir.exp.loc : node.loc;\r\n        context.onError(createCompilerError(27 /* X_V_IF_NO_EXPRESSION */, dir.loc));\r\n        dir.exp = createSimpleExpression(`true`, false, loc);\r\n    }\r\n    if ((process.env.NODE_ENV !== 'production') && true && dir.exp) {\r\n        validateBrowserExpression(dir.exp, context);\r\n    }\r\n    if (dir.name === 'if') {\r\n        const branch = createIfBranch(node, dir);\r\n        const ifNode = {\r\n            type: 9 /* IF */,\r\n            loc: node.loc,\r\n            branches: [branch]\r\n        };\r\n        context.replaceNode(ifNode);\r\n        if (processCodegen) {\r\n            return processCodegen(ifNode, branch, true);\r\n        }\r\n    }\r\n    else {\r\n        // locate the adjacent v-if\r\n        const siblings = context.parent.children;\r\n        const comments = [];\r\n        let i = siblings.indexOf(node);\r\n        while (i-- >= -1) {\r\n            const sibling = siblings[i];\r\n            if ((process.env.NODE_ENV !== 'production') && sibling && sibling.type === 3 /* COMMENT */) {\r\n                context.removeNode(sibling);\r\n                comments.unshift(sibling);\r\n                continue;\r\n            }\r\n            if (sibling &&\r\n                sibling.type === 2 /* TEXT */ &&\r\n                !sibling.content.trim().length) {\r\n                context.removeNode(sibling);\r\n                continue;\r\n            }\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                // move the node to the if node's branches\r\n                context.removeNode();\r\n                const branch = createIfBranch(node, dir);\r\n                if ((process.env.NODE_ENV !== 'production') &&\r\n                    comments.length &&\r\n                    // #3619 ignore comments if the v-if is direct child of <transition>\r\n                    !(context.parent &&\r\n                        context.parent.type === 1 /* ELEMENT */ &&\r\n                        isBuiltInType(context.parent.tag, 'transition'))) {\r\n                    branch.children = [...comments, ...branch.children];\r\n                }\r\n                // check if user is forcing same key on different branches\r\n                if ((process.env.NODE_ENV !== 'production') || !true) {\r\n                    const key = branch.userKey;\r\n                    if (key) {\r\n                        sibling.branches.forEach(({ userKey }) => {\r\n                            if (isSameKey(userKey, key)) {\r\n                                context.onError(createCompilerError(28 /* X_V_IF_SAME_KEY */, branch.userKey.loc));\r\n                            }\r\n                        });\r\n                    }\r\n                }\r\n                sibling.branches.push(branch);\r\n                const onExit = processCodegen && processCodegen(sibling, branch, false);\r\n                // since the branch was removed, it will not be traversed.\r\n                // make sure to traverse here.\r\n                traverseNode(branch, context);\r\n                // call on exit\r\n                if (onExit)\r\n                    onExit();\r\n                // make sure to reset currentNode after traversal to indicate this\r\n                // node has been removed.\r\n                context.currentNode = null;\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));\r\n            }\r\n            break;\r\n        }\r\n    }\r\n}\r\nfunction createIfBranch(node, dir) {\r\n    return {\r\n        type: 10 /* IF_BRANCH */,\r\n        loc: node.loc,\r\n        condition: dir.name === 'else' ? undefined : dir.exp,\r\n        children: node.tagType === 3 /* TEMPLATE */ && !findDir(node, 'for')\r\n            ? node.children\r\n            : [node],\r\n        userKey: findProp(node, `key`)\r\n    };\r\n}\r\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\r\n    if (branch.condition) {\r\n        return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \r\n        // make sure to pass in asBlock: true so that the comment node call\r\n        // closes the current block.\r\n        createCallExpression(context.helper(CREATE_COMMENT), [\r\n            (process.env.NODE_ENV !== 'production') ? '\"v-if\"' : '\"\"',\r\n            'true'\r\n        ]));\r\n    }\r\n    else {\r\n        return createChildrenCodegenNode(branch, keyIndex, context);\r\n    }\r\n}\r\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\r\n    const { helper } = context;\r\n    const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* CAN_HOIST */));\r\n    const { children } = branch;\r\n    const firstChild = children[0];\r\n    const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;\r\n    if (needFragmentWrapper) {\r\n        if (children.length === 1 && firstChild.type === 11 /* FOR */) {\r\n            // optimize away nested fragments when child is a ForNode\r\n            const vnodeCall = firstChild.codegenNode;\r\n            injectProp(vnodeCall, keyProperty, context);\r\n            return vnodeCall;\r\n        }\r\n        else {\r\n            let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n            let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n            // check if the fragment actually contains a single valid child with\r\n            // the rest being comments\r\n            if ((process.env.NODE_ENV !== 'production') &&\r\n                children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n                patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n                patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n            }\r\n            return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, false, false /* isComponent */, branch.loc);\r\n        }\r\n    }\r\n    else {\r\n        const ret = firstChild.codegenNode;\r\n        const vnodeCall = getMemoedVNodeCall(ret);\r\n        // Change createVNode to createBlock.\r\n        if (vnodeCall.type === 13 /* VNODE_CALL */) {\r\n            makeBlock(vnodeCall, context);\r\n        }\r\n        // inject branch key\r\n        injectProp(vnodeCall, keyProperty, context);\r\n        return ret;\r\n    }\r\n}\r\nfunction isSameKey(a, b) {\r\n    if (!a || a.type !== b.type) {\r\n        return false;\r\n    }\r\n    if (a.type === 6 /* ATTRIBUTE */) {\r\n        if (a.value.content !== b.value.content) {\r\n            return false;\r\n        }\r\n    }\r\n    else {\r\n        // directive\r\n        const exp = a.exp;\r\n        const branchExp = b.exp;\r\n        if (exp.type !== branchExp.type) {\r\n            return false;\r\n        }\r\n        if (exp.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n            exp.isStatic !== branchExp.isStatic ||\r\n            exp.content !== branchExp.content) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction getParentCondition(node) {\r\n    while (true) {\r\n        if (node.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n            if (node.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                node = node.alternate;\r\n            }\r\n            else {\r\n                return node;\r\n            }\r\n        }\r\n        else if (node.type === 20 /* JS_CACHE_EXPRESSION */) {\r\n            node = node.value;\r\n        }\r\n    }\r\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\r\n    const { helper, removeHelper } = context;\r\n    return processFor(node, dir, context, forNode => {\r\n        // create the loop render function expression now, and add the\r\n        // iterator on exit after all children have been traversed\r\n        const renderExp = createCallExpression(helper(RENDER_LIST), [\r\n            forNode.source\r\n        ]);\r\n        const memo = findDir(node, 'memo');\r\n        const keyProp = findProp(node, `key`);\r\n        const keyExp = keyProp &&\r\n            (keyProp.type === 6 /* ATTRIBUTE */\r\n                ? createSimpleExpression(keyProp.value.content, true)\r\n                : keyProp.exp);\r\n        const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\r\n        const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n            forNode.source.constType > 0 /* NOT_CONSTANT */;\r\n        const fragmentFlag = isStableFragment\r\n            ? 64 /* STABLE_FRAGMENT */\r\n            : keyProp\r\n                ? 128 /* KEYED_FRAGMENT */\r\n                : 256 /* UNKEYED_FRAGMENT */;\r\n        forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\r\n            ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[fragmentFlag]} */` : ``), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\r\n        return () => {\r\n            // finish the codegen now that all children have been traversed\r\n            let childBlock;\r\n            const isTemplate = isTemplateNode(node);\r\n            const { children } = forNode;\r\n            // check <template v-for> key placement\r\n            if (((process.env.NODE_ENV !== 'production') || !true) && isTemplate) {\r\n                node.children.some(c => {\r\n                    if (c.type === 1 /* ELEMENT */) {\r\n                        const key = findProp(c, 'key');\r\n                        if (key) {\r\n                            context.onError(createCompilerError(32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\r\n                            return true;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;\r\n            const slotOutlet = isSlotOutlet(node)\r\n                ? node\r\n                : isTemplate &&\r\n                    node.children.length === 1 &&\r\n                    isSlotOutlet(node.children[0])\r\n                    ? node.children[0] // api-extractor somehow fails to infer this\r\n                    : null;\r\n            if (slotOutlet) {\r\n                // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\r\n                childBlock = slotOutlet.codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    // <template v-for=\"...\" :key=\"...\"><slot/></template>\r\n                    // we need to inject the key to the renderSlot() call.\r\n                    // the props for renderSlot is passed as the 3rd argument.\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n            }\r\n            else if (needFragmentWrapper) {\r\n                // <template v-for=\"...\"> with text or multi-elements\r\n                // should generate a fragment block for each loop\r\n                childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* STABLE_FRAGMENT */ +\r\n                    ((process.env.NODE_ENV !== 'production')\r\n                        ? ` /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`\r\n                        : ``), undefined, undefined, true, undefined, false /* isComponent */);\r\n            }\r\n            else {\r\n                // Normal element v-for. Directly use the child's codegenNode\r\n                // but mark it as a block.\r\n                childBlock = children[0]\r\n                    .codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n                if (childBlock.isBlock !== !isStableFragment) {\r\n                    if (childBlock.isBlock) {\r\n                        // switch from block to vnode\r\n                        removeHelper(OPEN_BLOCK);\r\n                        removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                    else {\r\n                        // switch from vnode to block\r\n                        removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                }\r\n                childBlock.isBlock = !isStableFragment;\r\n                if (childBlock.isBlock) {\r\n                    helper(OPEN_BLOCK);\r\n                    helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n                else {\r\n                    helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n            }\r\n            if (memo) {\r\n                const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\r\n                    createSimpleExpression(`_cached`)\r\n                ]));\r\n                loop.body = createBlockStatement([\r\n                    createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\r\n                    createCompoundExpression([\r\n                        `if (_cached`,\r\n                        ...(keyExp ? [` && _cached.key === `, keyExp] : []),\r\n                        ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\r\n                    ]),\r\n                    createCompoundExpression([`const _item = `, childBlock]),\r\n                    createSimpleExpression(`_item.memo = _memo`),\r\n                    createSimpleExpression(`return _item`)\r\n                ]);\r\n                renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\r\n            }\r\n            else {\r\n                renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processFor(node, dir, context, processCodegen) {\r\n    if (!dir.exp) {\r\n        context.onError(createCompilerError(30 /* X_V_FOR_NO_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const parseResult = parseForExpression(\r\n    // can only be simple expression because vFor transform is applied\r\n    // before expression transform.\r\n    dir.exp, context);\r\n    if (!parseResult) {\r\n        context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const { addIdentifiers, removeIdentifiers, scopes } = context;\r\n    const { source, value, key, index } = parseResult;\r\n    const forNode = {\r\n        type: 11 /* FOR */,\r\n        loc: dir.loc,\r\n        source,\r\n        valueAlias: value,\r\n        keyAlias: key,\r\n        objectIndexAlias: index,\r\n        parseResult,\r\n        children: isTemplateNode(node) ? node.children : [node]\r\n    };\r\n    context.replaceNode(forNode);\r\n    // bookkeeping\r\n    scopes.vFor++;\r\n    const onExit = processCodegen && processCodegen(forNode);\r\n    return () => {\r\n        scopes.vFor--;\r\n        if (onExit)\r\n            onExit();\r\n    };\r\n}\r\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\r\n// This regex doesn't cover the case if key or index aliases have destructuring,\r\n// but those do not make sense in the first place, so this works in practice.\r\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\r\nconst stripParensRE = /^\\(|\\)$/g;\r\nfunction parseForExpression(input, context) {\r\n    const loc = input.loc;\r\n    const exp = input.content;\r\n    const inMatch = exp.match(forAliasRE);\r\n    if (!inMatch)\r\n        return;\r\n    const [, LHS, RHS] = inMatch;\r\n    const result = {\r\n        source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\r\n        value: undefined,\r\n        key: undefined,\r\n        index: undefined\r\n    };\r\n    if ((process.env.NODE_ENV !== 'production') && true) {\r\n        validateBrowserExpression(result.source, context);\r\n    }\r\n    let valueContent = LHS.trim().replace(stripParensRE, '').trim();\r\n    const trimmedOffset = LHS.indexOf(valueContent);\r\n    const iteratorMatch = valueContent.match(forIteratorRE);\r\n    if (iteratorMatch) {\r\n        valueContent = valueContent.replace(forIteratorRE, '').trim();\r\n        const keyContent = iteratorMatch[1].trim();\r\n        let keyOffset;\r\n        if (keyContent) {\r\n            keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\r\n            result.key = createAliasExpression(loc, keyContent, keyOffset);\r\n            if ((process.env.NODE_ENV !== 'production') && true) {\r\n                validateBrowserExpression(result.key, context, true);\r\n            }\r\n        }\r\n        if (iteratorMatch[2]) {\r\n            const indexContent = iteratorMatch[2].trim();\r\n            if (indexContent) {\r\n                result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\r\n                    ? keyOffset + keyContent.length\r\n                    : trimmedOffset + valueContent.length));\r\n                if ((process.env.NODE_ENV !== 'production') && true) {\r\n                    validateBrowserExpression(result.index, context, true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (valueContent) {\r\n        result.value = createAliasExpression(loc, valueContent, trimmedOffset);\r\n        if ((process.env.NODE_ENV !== 'production') && true) {\r\n            validateBrowserExpression(result.value, context, true);\r\n        }\r\n    }\r\n    return result;\r\n}\r\nfunction createAliasExpression(range, content, offset) {\r\n    return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\r\n}\r\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\r\n    return createParamsList([value, key, index, ...memoArgs]);\r\n}\r\nfunction createParamsList(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i])\r\n            break;\r\n    }\r\n    return args\r\n        .slice(0, i + 1)\r\n        .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\r\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\r\n// A NodeTransform that:\r\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\r\n//    by transformExpression. This is only applied in non-browser builds with\r\n//    { prefixIdentifiers: true }.\r\n// 2. Track v-slot depths so that we know a slot is inside another slot.\r\n//    Note the exit callback is executed before buildSlots() on the same node,\r\n//    so only nested slots see positive numbers.\r\nconst trackSlotScopes = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        (node.tagType === 1 /* COMPONENT */ ||\r\n            node.tagType === 3 /* TEMPLATE */)) {\r\n        // We are only checking non-empty v-slot here\r\n        // since we only care about slots that introduce scope variables.\r\n        const vSlot = findDir(node, 'slot');\r\n        if (vSlot) {\r\n            vSlot.exp;\r\n            context.scopes.vSlot++;\r\n            return () => {\r\n                context.scopes.vSlot--;\r\n            };\r\n        }\r\n    }\r\n};\r\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\r\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\r\nconst trackVForSlotScopes = (node, context) => {\r\n    let vFor;\r\n    if (isTemplateNode(node) &&\r\n        node.props.some(isVSlot) &&\r\n        (vFor = findDir(node, 'for'))) {\r\n        const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\r\n        if (result) {\r\n            const { value, key, index } = result;\r\n            const { addIdentifiers, removeIdentifiers } = context;\r\n            value && addIdentifiers(value);\r\n            key && addIdentifiers(key);\r\n            index && addIdentifiers(index);\r\n            return () => {\r\n                value && removeIdentifiers(value);\r\n                key && removeIdentifiers(key);\r\n                index && removeIdentifiers(index);\r\n            };\r\n        }\r\n    }\r\n};\r\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\r\n// Instead of being a DirectiveTransform, v-slot processing is called during\r\n// transformElement to build the slots object for a component.\r\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\r\n    context.helper(WITH_CTX);\r\n    const { children, loc } = node;\r\n    const slotsProperties = [];\r\n    const dynamicSlots = [];\r\n    // If the slot is inside a v-for or another v-slot, force it to be dynamic\r\n    // since it likely uses a scope variable.\r\n    let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\r\n    // 1. Check for slot with slotProps on component itself.\r\n    //    <Comp v-slot=\"{ prop }\"/>\r\n    const onComponentSlot = findDir(node, 'slot', true);\r\n    if (onComponentSlot) {\r\n        const { arg, exp } = onComponentSlot;\r\n        if (arg && !isStaticExp(arg)) {\r\n            hasDynamicSlots = true;\r\n        }\r\n        slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\r\n    }\r\n    // 2. Iterate through children and check for template slots\r\n    //    <template v-slot:foo=\"{ prop }\">\r\n    let hasTemplateSlots = false;\r\n    let hasNamedDefaultSlot = false;\r\n    const implicitDefaultChildren = [];\r\n    const seenSlotNames = new Set();\r\n    for (let i = 0; i < children.length; i++) {\r\n        const slotElement = children[i];\r\n        let slotDir;\r\n        if (!isTemplateNode(slotElement) ||\r\n            !(slotDir = findDir(slotElement, 'slot', true))) {\r\n            // not a <template v-slot>, skip.\r\n            if (slotElement.type !== 3 /* COMMENT */) {\r\n                implicitDefaultChildren.push(slotElement);\r\n            }\r\n            continue;\r\n        }\r\n        if (onComponentSlot) {\r\n            // already has on-component slot - this is incorrect usage.\r\n            context.onError(createCompilerError(36 /* X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\r\n            break;\r\n        }\r\n        hasTemplateSlots = true;\r\n        const { children: slotChildren, loc: slotLoc } = slotElement;\r\n        const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\r\n        // check if name is dynamic.\r\n        let staticSlotName;\r\n        if (isStaticExp(slotName)) {\r\n            staticSlotName = slotName ? slotName.content : `default`;\r\n        }\r\n        else {\r\n            hasDynamicSlots = true;\r\n        }\r\n        const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\r\n        // check if this slot is conditional (v-if/v-for)\r\n        let vIf;\r\n        let vElse;\r\n        let vFor;\r\n        if ((vIf = findDir(slotElement, 'if'))) {\r\n            hasDynamicSlots = true;\r\n            dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback));\r\n        }\r\n        else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\r\n            // find adjacent v-if\r\n            let j = i;\r\n            let prev;\r\n            while (j--) {\r\n                prev = children[j];\r\n                if (prev.type !== 3 /* COMMENT */) {\r\n                    break;\r\n                }\r\n            }\r\n            if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\r\n                // remove node\r\n                children.splice(i, 1);\r\n                i--;\r\n                // attach this slot to previous conditional\r\n                let conditional = dynamicSlots[dynamicSlots.length - 1];\r\n                while (conditional.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                    conditional = conditional.alternate;\r\n                }\r\n                conditional.alternate = vElse.exp\r\n                    ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback)\r\n                    : buildDynamicSlot(slotName, slotFunction);\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\r\n            }\r\n        }\r\n        else if ((vFor = findDir(slotElement, 'for'))) {\r\n            hasDynamicSlots = true;\r\n            const parseResult = vFor.parseResult ||\r\n                parseForExpression(vFor.exp, context);\r\n            if (parseResult) {\r\n                // Render the dynamic slots as an array and add it to the createSlot()\r\n                // args. The runtime knows how to handle it appropriately.\r\n                dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\r\n                    parseResult.source,\r\n                    createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\r\n                ]));\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\r\n            }\r\n        }\r\n        else {\r\n            // check duplicate static names\r\n            if (staticSlotName) {\r\n                if (seenSlotNames.has(staticSlotName)) {\r\n                    context.onError(createCompilerError(37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\r\n                    continue;\r\n                }\r\n                seenSlotNames.add(staticSlotName);\r\n                if (staticSlotName === 'default') {\r\n                    hasNamedDefaultSlot = true;\r\n                }\r\n            }\r\n            slotsProperties.push(createObjectProperty(slotName, slotFunction));\r\n        }\r\n    }\r\n    if (!onComponentSlot) {\r\n        const buildDefaultSlotProperty = (props, children) => {\r\n            const fn = buildSlotFn(props, children, loc);\r\n            if (context.compatConfig) {\r\n                fn.isNonScopedSlot = true;\r\n            }\r\n            return createObjectProperty(`default`, fn);\r\n        };\r\n        if (!hasTemplateSlots) {\r\n            // implicit default slot (on component)\r\n            slotsProperties.push(buildDefaultSlotProperty(undefined, children));\r\n        }\r\n        else if (implicitDefaultChildren.length &&\r\n            // #3766\r\n            // with whitespace: 'preserve', whitespaces between slots will end up in\r\n            // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\r\n            implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\r\n            // implicit default slot (mixed with named slots)\r\n            if (hasNamedDefaultSlot) {\r\n                context.onError(createCompilerError(38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\r\n            }\r\n            else {\r\n                slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\r\n            }\r\n        }\r\n    }\r\n    const slotFlag = hasDynamicSlots\r\n        ? 2 /* DYNAMIC */\r\n        : hasForwardedSlots(node.children)\r\n            ? 3 /* FORWARDED */\r\n            : 1 /* STABLE */;\r\n    let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \r\n    // 2 = compiled but dynamic = can skip normalization, but must run diff\r\n    // 1 = compiled and static = can skip normalization AND diff as optimized\r\n    createSimpleExpression(slotFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${slotFlagsText[slotFlag]} */` : ``), false))), loc);\r\n    if (dynamicSlots.length) {\r\n        slots = createCallExpression(context.helper(CREATE_SLOTS), [\r\n            slots,\r\n            createArrayExpression(dynamicSlots)\r\n        ]);\r\n    }\r\n    return {\r\n        slots,\r\n        hasDynamicSlots\r\n    };\r\n}\r\nfunction buildDynamicSlot(name, fn) {\r\n    return createObjectExpression([\r\n        createObjectProperty(`name`, name),\r\n        createObjectProperty(`fn`, fn)\r\n    ]);\r\n}\r\nfunction hasForwardedSlots(children) {\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        switch (child.type) {\r\n            case 1 /* ELEMENT */:\r\n                if (child.tagType === 2 /* SLOT */ ||\r\n                    hasForwardedSlots(child.children)) {\r\n                    return true;\r\n                }\r\n                break;\r\n            case 9 /* IF */:\r\n                if (hasForwardedSlots(child.branches))\r\n                    return true;\r\n                break;\r\n            case 10 /* IF_BRANCH */:\r\n            case 11 /* FOR */:\r\n                if (hasForwardedSlots(child.children))\r\n                    return true;\r\n                break;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction isNonWhitespaceContent(node) {\r\n    if (node.type !== 2 /* TEXT */ && node.type !== 12 /* TEXT_CALL */)\r\n        return true;\r\n    return node.type === 2 /* TEXT */\r\n        ? !!node.content.trim()\r\n        : isNonWhitespaceContent(node.content);\r\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\r\n// import, which should be used instead of a resolveDirective call.\r\nconst directiveImportMap = new WeakMap();\r\n// generate a JavaScript AST for this element's codegen\r\nconst transformElement = (node, context) => {\r\n    // perform the work on exit, after all child expressions have been\r\n    // processed and merged.\r\n    return function postTransformElement() {\r\n        node = context.currentNode;\r\n        if (!(node.type === 1 /* ELEMENT */ &&\r\n            (node.tagType === 0 /* ELEMENT */ ||\r\n                node.tagType === 1 /* COMPONENT */))) {\r\n            return;\r\n        }\r\n        const { tag, props } = node;\r\n        const isComponent = node.tagType === 1 /* COMPONENT */;\r\n        // The goal of the transform is to create a codegenNode implementing the\r\n        // VNodeCall interface.\r\n        let vnodeTag = isComponent\r\n            ? resolveComponentType(node, context)\r\n            : `\"${tag}\"`;\r\n        const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\r\n        let vnodeProps;\r\n        let vnodeChildren;\r\n        let vnodePatchFlag;\r\n        let patchFlag = 0;\r\n        let vnodeDynamicProps;\r\n        let dynamicPropNames;\r\n        let vnodeDirectives;\r\n        let shouldUseBlock = \r\n        // dynamic component may resolve to plain elements\r\n        isDynamicComponent ||\r\n            vnodeTag === TELEPORT ||\r\n            vnodeTag === SUSPENSE ||\r\n            (!isComponent &&\r\n                // <svg> and <foreignObject> must be forced into blocks so that block\r\n                // updates inside get proper isSVG flag at runtime. (#639, #643)\r\n                // This is technically web-specific, but splitting the logic out of core\r\n                // leads to too much unnecessary complexity.\r\n                (tag === 'svg' ||\r\n                    tag === 'foreignObject' ||\r\n                    // #938: elements with dynamic keys should be forced into blocks\r\n                    findProp(node, 'key', true)));\r\n        // props\r\n        if (props.length > 0) {\r\n            const propsBuildResult = buildProps(node, context);\r\n            vnodeProps = propsBuildResult.props;\r\n            patchFlag = propsBuildResult.patchFlag;\r\n            dynamicPropNames = propsBuildResult.dynamicPropNames;\r\n            const directives = propsBuildResult.directives;\r\n            vnodeDirectives =\r\n                directives && directives.length\r\n                    ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\r\n                    : undefined;\r\n        }\r\n        // children\r\n        if (node.children.length > 0) {\r\n            if (vnodeTag === KEEP_ALIVE) {\r\n                // Although a built-in component, we compile KeepAlive with raw children\r\n                // instead of slot functions so that it can be used inside Transition\r\n                // or other Transition-wrapping HOCs.\r\n                // To ensure correct updates with block optimizations, we need to:\r\n                // 1. Force keep-alive into a block. This avoids its children being\r\n                //    collected by a parent block.\r\n                shouldUseBlock = true;\r\n                // 2. Force keep-alive to always be updated, since it uses raw children.\r\n                patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                if ((process.env.NODE_ENV !== 'production') && node.children.length > 1) {\r\n                    context.onError(createCompilerError(44 /* X_KEEP_ALIVE_INVALID_CHILDREN */, {\r\n                        start: node.children[0].loc.start,\r\n                        end: node.children[node.children.length - 1].loc.end,\r\n                        source: ''\r\n                    }));\r\n                }\r\n            }\r\n            const shouldBuildAsSlots = isComponent &&\r\n                // Teleport is not a real component and has dedicated runtime handling\r\n                vnodeTag !== TELEPORT &&\r\n                // explained above.\r\n                vnodeTag !== KEEP_ALIVE;\r\n            if (shouldBuildAsSlots) {\r\n                const { slots, hasDynamicSlots } = buildSlots(node, context);\r\n                vnodeChildren = slots;\r\n                if (hasDynamicSlots) {\r\n                    patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                }\r\n            }\r\n            else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\r\n                const child = node.children[0];\r\n                const type = child.type;\r\n                // check for dynamic text children\r\n                const hasDynamicTextChild = type === 5 /* INTERPOLATION */ ||\r\n                    type === 8 /* COMPOUND_EXPRESSION */;\r\n                if (hasDynamicTextChild &&\r\n                    getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                    patchFlag |= 1 /* TEXT */;\r\n                }\r\n                // pass directly if the only child is a text node\r\n                // (plain / interpolation / expression)\r\n                if (hasDynamicTextChild || type === 2 /* TEXT */) {\r\n                    vnodeChildren = child;\r\n                }\r\n                else {\r\n                    vnodeChildren = node.children;\r\n                }\r\n            }\r\n            else {\r\n                vnodeChildren = node.children;\r\n            }\r\n        }\r\n        // patchFlag & dynamicPropNames\r\n        if (patchFlag !== 0) {\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                if (patchFlag < 0) {\r\n                    // special flags (negative and mutually exclusive)\r\n                    vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\r\n                }\r\n                else {\r\n                    // bitwise flags\r\n                    const flagNames = Object.keys(PatchFlagNames)\r\n                        .map(Number)\r\n                        .filter(n => n > 0 && patchFlag & n)\r\n                        .map(n => PatchFlagNames[n])\r\n                        .join(`, `);\r\n                    vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\r\n                }\r\n            }\r\n            else {\r\n                vnodePatchFlag = String(patchFlag);\r\n            }\r\n            if (dynamicPropNames && dynamicPropNames.length) {\r\n                vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\r\n            }\r\n        }\r\n        node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\r\n    };\r\n};\r\nfunction resolveComponentType(node, context, ssr = false) {\r\n    let { tag } = node;\r\n    // 1. dynamic component\r\n    const isExplicitDynamic = isComponentTag(tag);\r\n    const isProp = findProp(node, 'is');\r\n    if (isProp) {\r\n        if (isExplicitDynamic ||\r\n            (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))) {\r\n            const exp = isProp.type === 6 /* ATTRIBUTE */\r\n                ? isProp.value && createSimpleExpression(isProp.value.content, true)\r\n                : isProp.exp;\r\n            if (exp) {\r\n                return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n                    exp\r\n                ]);\r\n            }\r\n        }\r\n        else if (isProp.type === 6 /* ATTRIBUTE */ &&\r\n            isProp.value.content.startsWith('vue:')) {\r\n            // <button is=\"vue:xxx\">\r\n            // if not <component>, only is value that starts with \"vue:\" will be\r\n            // treated as component by the parse phase and reach here, unless it's\r\n            // compat mode where all is values are considered components\r\n            tag = isProp.value.content.slice(4);\r\n        }\r\n    }\r\n    // 1.5 v-is (TODO: Deprecate)\r\n    const isDir = !isExplicitDynamic && findDir(node, 'is');\r\n    if (isDir && isDir.exp) {\r\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n            isDir.exp\r\n        ]);\r\n    }\r\n    // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\r\n    const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\r\n    if (builtIn) {\r\n        // built-ins are simply fallthroughs / have special handling during ssr\r\n        // so we don't need to import their runtime equivalents\r\n        if (!ssr)\r\n            context.helper(builtIn);\r\n        return builtIn;\r\n    }\r\n    // 5. user component (resolve)\r\n    context.helper(RESOLVE_COMPONENT);\r\n    context.components.add(tag);\r\n    return toValidAssetId(tag, `component`);\r\n}\r\nfunction buildProps(node, context, props = node.props, ssr = false) {\r\n    const { tag, loc: elementLoc } = node;\r\n    const isComponent = node.tagType === 1 /* COMPONENT */;\r\n    let properties = [];\r\n    const mergeArgs = [];\r\n    const runtimeDirectives = [];\r\n    // patchFlag analysis\r\n    let patchFlag = 0;\r\n    let hasRef = false;\r\n    let hasClassBinding = false;\r\n    let hasStyleBinding = false;\r\n    let hasHydrationEventBinding = false;\r\n    let hasDynamicKeys = false;\r\n    let hasVnodeHook = false;\r\n    const dynamicPropNames = [];\r\n    const analyzePatchFlag = ({ key, value }) => {\r\n        if (isStaticExp(key)) {\r\n            const name = key.content;\r\n            const isEventHandler = isOn(name);\r\n            if (!isComponent &&\r\n                isEventHandler &&\r\n                // omit the flag for click handlers because hydration gives click\r\n                // dedicated fast path.\r\n                name.toLowerCase() !== 'onclick' &&\r\n                // omit v-model handlers\r\n                name !== 'onUpdate:modelValue' &&\r\n                // omit onVnodeXXX hooks\r\n                !isReservedProp(name)) {\r\n                hasHydrationEventBinding = true;\r\n            }\r\n            if (isEventHandler && isReservedProp(name)) {\r\n                hasVnodeHook = true;\r\n            }\r\n            if (value.type === 20 /* JS_CACHE_EXPRESSION */ ||\r\n                ((value.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n                    value.type === 8 /* COMPOUND_EXPRESSION */) &&\r\n                    getConstantType(value, context) > 0)) {\r\n                // skip if the prop is a cached handler or has constant value\r\n                return;\r\n            }\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n            }\r\n            else if (name === 'class') {\r\n                hasClassBinding = true;\r\n            }\r\n            else if (name === 'style') {\r\n                hasStyleBinding = true;\r\n            }\r\n            else if (name !== 'key' && !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n            // treat the dynamic class and style binding of the component as dynamic props\r\n            if (isComponent &&\r\n                (name === 'class' || name === 'style') &&\r\n                !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n        }\r\n        else {\r\n            hasDynamicKeys = true;\r\n        }\r\n    };\r\n    for (let i = 0; i < props.length; i++) {\r\n        // static attribute\r\n        const prop = props[i];\r\n        if (prop.type === 6 /* ATTRIBUTE */) {\r\n            const { loc, name, value } = prop;\r\n            let isStatic = true;\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n            }\r\n            // skip is on <component>, or is=\"vue:xxx\"\r\n            if (name === 'is' &&\r\n                (isComponentTag(tag) ||\r\n                    (value && value.content.startsWith('vue:')) ||\r\n                    (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context)))) {\r\n                continue;\r\n            }\r\n            properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\r\n        }\r\n        else {\r\n            // directives\r\n            const { name, arg, exp, loc } = prop;\r\n            const isVBind = name === 'bind';\r\n            const isVOn = name === 'on';\r\n            // skip v-slot - it is handled by its dedicated transform.\r\n            if (name === 'slot') {\r\n                if (!isComponent) {\r\n                    context.onError(createCompilerError(39 /* X_V_SLOT_MISPLACED */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            // skip v-once/v-memo - they are handled by dedicated transforms.\r\n            if (name === 'once' || name === 'memo') {\r\n                continue;\r\n            }\r\n            // skip v-is and :is on <component>\r\n            if (name === 'is' ||\r\n                (isVBind &&\r\n                    isBindKey(arg, 'is') &&\r\n                    (isComponentTag(tag) ||\r\n                        (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))))) {\r\n                continue;\r\n            }\r\n            // skip v-on in SSR compilation\r\n            if (isVOn && ssr) {\r\n                continue;\r\n            }\r\n            // special case for v-bind and v-on with no argument\r\n            if (!arg && (isVBind || isVOn)) {\r\n                hasDynamicKeys = true;\r\n                if (exp) {\r\n                    if (properties.length) {\r\n                        mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n                        properties = [];\r\n                    }\r\n                    if (isVBind) {\r\n                        {\r\n                            // 2.x v-bind object order compat\r\n                            if ((process.env.NODE_ENV !== 'production')) {\r\n                                const hasOverridableKeys = mergeArgs.some(arg => {\r\n                                    if (arg.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n                                        return arg.properties.some(({ key }) => {\r\n                                            if (key.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n                                                !key.isStatic) {\r\n                                                return true;\r\n                                            }\r\n                                            return (key.content !== 'class' &&\r\n                                                key.content !== 'style' &&\r\n                                                !isOn(key.content));\r\n                                        });\r\n                                    }\r\n                                    else {\r\n                                        // dynamic expression\r\n                                        return true;\r\n                                    }\r\n                                });\r\n                                if (hasOverridableKeys) {\r\n                                    checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\r\n                                }\r\n                            }\r\n                            if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context)) {\r\n                                mergeArgs.unshift(exp);\r\n                                continue;\r\n                            }\r\n                        }\r\n                        mergeArgs.push(exp);\r\n                    }\r\n                    else {\r\n                        // v-on=\"obj\" -> toHandlers(obj)\r\n                        mergeArgs.push({\r\n                            type: 14 /* JS_CALL_EXPRESSION */,\r\n                            loc,\r\n                            callee: context.helper(TO_HANDLERS),\r\n                            arguments: [exp]\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    context.onError(createCompilerError(isVBind\r\n                        ? 33 /* X_V_BIND_NO_EXPRESSION */\r\n                        : 34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            const directiveTransform = context.directiveTransforms[name];\r\n            if (directiveTransform) {\r\n                // has built-in directive transform.\r\n                const { props, needRuntime } = directiveTransform(prop, node, context);\r\n                !ssr && props.forEach(analyzePatchFlag);\r\n                properties.push(...props);\r\n                if (needRuntime) {\r\n                    runtimeDirectives.push(prop);\r\n                    if (isSymbol(needRuntime)) {\r\n                        directiveImportMap.set(prop, needRuntime);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                // no built-in transform, this is a user custom directive.\r\n                runtimeDirectives.push(prop);\r\n            }\r\n        }\r\n        if (prop.type === 6 /* ATTRIBUTE */ &&\r\n            prop.name === 'ref' &&\r\n            context.scopes.vFor > 0 &&\r\n            checkCompatEnabled(\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */, context, prop.loc)) {\r\n            properties.push(createObjectProperty(createSimpleExpression('refInFor', true), createSimpleExpression('true', false)));\r\n        }\r\n    }\r\n    let propsExpression = undefined;\r\n    // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\r\n    if (mergeArgs.length) {\r\n        if (properties.length) {\r\n            mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n        }\r\n        if (mergeArgs.length > 1) {\r\n            propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\r\n        }\r\n        else {\r\n            // single v-bind with nothing else - no need for a mergeProps call\r\n            propsExpression = mergeArgs[0];\r\n        }\r\n    }\r\n    else if (properties.length) {\r\n        propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\r\n    }\r\n    // patchFlag analysis\r\n    if (hasDynamicKeys) {\r\n        patchFlag |= 16 /* FULL_PROPS */;\r\n    }\r\n    else {\r\n        if (hasClassBinding && !isComponent) {\r\n            patchFlag |= 2 /* CLASS */;\r\n        }\r\n        if (hasStyleBinding && !isComponent) {\r\n            patchFlag |= 4 /* STYLE */;\r\n        }\r\n        if (dynamicPropNames.length) {\r\n            patchFlag |= 8 /* PROPS */;\r\n        }\r\n        if (hasHydrationEventBinding) {\r\n            patchFlag |= 32 /* HYDRATE_EVENTS */;\r\n        }\r\n    }\r\n    if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */) &&\r\n        (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\r\n        patchFlag |= 512 /* NEED_PATCH */;\r\n    }\r\n    // pre-normalize props, SSR is skipped for now\r\n    if (!context.inSSR && propsExpression) {\r\n        switch (propsExpression.type) {\r\n            case 15 /* JS_OBJECT_EXPRESSION */:\r\n                // means that there is no v-bind,\r\n                // but still need to deal with dynamic key binding\r\n                let classKeyIndex = -1;\r\n                let styleKeyIndex = -1;\r\n                let hasDynamicKey = false;\r\n                for (let i = 0; i < propsExpression.properties.length; i++) {\r\n                    const key = propsExpression.properties[i].key;\r\n                    if (isStaticExp(key)) {\r\n                        if (key.content === 'class') {\r\n                            classKeyIndex = i;\r\n                        }\r\n                        else if (key.content === 'style') {\r\n                            styleKeyIndex = i;\r\n                        }\r\n                    }\r\n                    else if (!key.isHandlerKey) {\r\n                        hasDynamicKey = true;\r\n                    }\r\n                }\r\n                const classProp = propsExpression.properties[classKeyIndex];\r\n                const styleProp = propsExpression.properties[styleKeyIndex];\r\n                // no dynamic key\r\n                if (!hasDynamicKey) {\r\n                    if (classProp && !isStaticExp(classProp.value)) {\r\n                        classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\r\n                    }\r\n                    if (styleProp &&\r\n                        !isStaticExp(styleProp.value) &&\r\n                        // the static style is compiled into an object,\r\n                        // so use `hasStyleBinding` to ensure that it is a dynamic style binding\r\n                        hasStyleBinding) {\r\n                        styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\r\n                    }\r\n                }\r\n                else {\r\n                    // dynamic key binding, wrap with `normalizeProps`\r\n                    propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\r\n                }\r\n                break;\r\n            case 14 /* JS_CALL_EXPRESSION */:\r\n                // mergeProps call, do nothing\r\n                break;\r\n            default:\r\n                // single v-bind\r\n                propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\r\n                    createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\r\n                        propsExpression\r\n                    ])\r\n                ]);\r\n                break;\r\n        }\r\n    }\r\n    return {\r\n        props: propsExpression,\r\n        directives: runtimeDirectives,\r\n        patchFlag,\r\n        dynamicPropNames\r\n    };\r\n}\r\n// Dedupe props in an object literal.\r\n// Literal duplicated attributes would have been warned during the parse phase,\r\n// however, it's possible to encounter duplicated `onXXX` handlers with different\r\n// modifiers. We also need to merge static and dynamic class / style attributes.\r\n// - onXXX handlers / style: merge into array\r\n// - class: merge into single expression with concatenation\r\nfunction dedupeProperties(properties) {\r\n    const knownProps = new Map();\r\n    const deduped = [];\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const prop = properties[i];\r\n        // dynamic keys are always allowed\r\n        if (prop.key.type === 8 /* COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\r\n            deduped.push(prop);\r\n            continue;\r\n        }\r\n        const name = prop.key.content;\r\n        const existing = knownProps.get(name);\r\n        if (existing) {\r\n            if (name === 'style' || name === 'class' || name.startsWith('on')) {\r\n                mergeAsArray(existing, prop);\r\n            }\r\n            // unexpected duplicate, should have emitted error during parse\r\n        }\r\n        else {\r\n            knownProps.set(name, prop);\r\n            deduped.push(prop);\r\n        }\r\n    }\r\n    return deduped;\r\n}\r\nfunction mergeAsArray(existing, incoming) {\r\n    if (existing.value.type === 17 /* JS_ARRAY_EXPRESSION */) {\r\n        existing.value.elements.push(incoming.value);\r\n    }\r\n    else {\r\n        existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\r\n    }\r\n}\r\nfunction buildDirectiveArgs(dir, context) {\r\n    const dirArgs = [];\r\n    const runtime = directiveImportMap.get(dir);\r\n    if (runtime) {\r\n        // built-in directive with runtime\r\n        dirArgs.push(context.helperString(runtime));\r\n    }\r\n    else {\r\n        {\r\n            // inject statement for resolving directive\r\n            context.helper(RESOLVE_DIRECTIVE);\r\n            context.directives.add(dir.name);\r\n            dirArgs.push(toValidAssetId(dir.name, `directive`));\r\n        }\r\n    }\r\n    const { loc } = dir;\r\n    if (dir.exp)\r\n        dirArgs.push(dir.exp);\r\n    if (dir.arg) {\r\n        if (!dir.exp) {\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        dirArgs.push(dir.arg);\r\n    }\r\n    if (Object.keys(dir.modifiers).length) {\r\n        if (!dir.arg) {\r\n            if (!dir.exp) {\r\n                dirArgs.push(`void 0`);\r\n            }\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        const trueExpression = createSimpleExpression(`true`, false, loc);\r\n        dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\r\n    }\r\n    return createArrayExpression(dirArgs, dir.loc);\r\n}\r\nfunction stringifyDynamicPropNames(props) {\r\n    let propsNamesString = `[`;\r\n    for (let i = 0, l = props.length; i < l; i++) {\r\n        propsNamesString += JSON.stringify(props[i]);\r\n        if (i < l - 1)\r\n            propsNamesString += ', ';\r\n    }\r\n    return propsNamesString + `]`;\r\n}\r\nfunction isComponentTag(tag) {\r\n    return tag[0].toLowerCase() + tag.slice(1) === 'component';\r\n}\n\n(process.env.NODE_ENV !== 'production')\r\n    ? Object.freeze({})\r\n    : {};\r\n(process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\n\nconst transformSlotOutlet = (node, context) => {\r\n    if (isSlotOutlet(node)) {\r\n        const { children, loc } = node;\r\n        const { slotName, slotProps } = processSlotOutlet(node, context);\r\n        const slotArgs = [\r\n            context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\r\n            slotName\r\n        ];\r\n        if (slotProps) {\r\n            slotArgs.push(slotProps);\r\n        }\r\n        if (children.length) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            slotArgs.push(createFunctionExpression([], children, false, false, loc));\r\n        }\r\n        if (context.scopeId && !context.slotted) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            if (!children.length) {\r\n                slotArgs.push(`undefined`);\r\n            }\r\n            slotArgs.push(`true`);\r\n        }\r\n        node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\r\n    }\r\n};\r\nfunction processSlotOutlet(node, context) {\r\n    let slotName = `\"default\"`;\r\n    let slotProps = undefined;\r\n    const nonNameProps = [];\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.value) {\r\n                if (p.name === 'name') {\r\n                    slotName = JSON.stringify(p.value.content);\r\n                }\r\n                else {\r\n                    p.name = camelize(p.name);\r\n                    nonNameProps.push(p);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            if (p.name === 'bind' && isBindKey(p.arg, 'name')) {\r\n                if (p.exp)\r\n                    slotName = p.exp;\r\n            }\r\n            else {\r\n                if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\r\n                    p.arg.content = camelize(p.arg.content);\r\n                }\r\n                nonNameProps.push(p);\r\n            }\r\n        }\r\n    }\r\n    if (nonNameProps.length > 0) {\r\n        const { props, directives } = buildProps(node, context, nonNameProps);\r\n        slotProps = props;\r\n        if (directives.length) {\r\n            context.onError(createCompilerError(35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\r\n        }\r\n    }\r\n    return {\r\n        slotName,\r\n        slotProps\r\n    };\r\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^\\s*function(?:\\s+[\\w$]+)?\\s*\\(/;\r\nconst transformOn = (dir, node, context, augmentor) => {\r\n    const { loc, modifiers, arg } = dir;\r\n    if (!dir.exp && !modifiers.length) {\r\n        context.onError(createCompilerError(34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n    }\r\n    let eventName;\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            const rawName = arg.content;\r\n            // for all event listeners, auto convert it to camelCase. See issue #2249\r\n            eventName = createSimpleExpression(toHandlerKey(camelize$1(rawName)), true, arg.loc);\r\n        }\r\n        else {\r\n            // #2388\r\n            eventName = createCompoundExpression([\r\n                `${context.helperString(TO_HANDLER_KEY)}(`,\r\n                arg,\r\n                `)`\r\n            ]);\r\n        }\r\n    }\r\n    else {\r\n        // already a compound expression.\r\n        eventName = arg;\r\n        eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\r\n        eventName.children.push(`)`);\r\n    }\r\n    // handler processing\r\n    let exp = dir.exp;\r\n    if (exp && !exp.content.trim()) {\r\n        exp = undefined;\r\n    }\r\n    let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\r\n    if (exp) {\r\n        const isMemberExp = isMemberExpression(exp.content);\r\n        const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\r\n        const hasMultipleStatements = exp.content.includes(`;`);\r\n        if ((process.env.NODE_ENV !== 'production') && true) {\r\n            validateBrowserExpression(exp, context, false, hasMultipleStatements);\r\n        }\r\n        if (isInlineStatement || (shouldCache && isMemberExp)) {\r\n            // wrap inline statement in a function expression\r\n            exp = createCompoundExpression([\r\n                `${isInlineStatement\r\n                    ? `$event`\r\n                    : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\r\n                exp,\r\n                hasMultipleStatements ? `}` : `)`\r\n            ]);\r\n        }\r\n    }\r\n    let ret = {\r\n        props: [\r\n            createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\r\n        ]\r\n    };\r\n    // apply extended compiler augmentor\r\n    if (augmentor) {\r\n        ret = augmentor(ret);\r\n    }\r\n    if (shouldCache) {\r\n        // cache handlers so that it's always the same handler being passed down.\r\n        // this avoids unnecessary re-renders when users use inline handlers on\r\n        // components.\r\n        ret.props[0].value = context.cache(ret.props[0].value);\r\n    }\r\n    // mark the key as handler for props normalization check\r\n    ret.props.forEach(p => (p.key.isHandlerKey = true));\r\n    return ret;\r\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\r\n// codegen for the entire props object. This transform here is only for v-bind\r\n// *with* args.\r\nconst transformBind = (dir, _node, context) => {\r\n    const { exp, modifiers, loc } = dir;\r\n    const arg = dir.arg;\r\n    if (arg.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n        arg.children.unshift(`(`);\r\n        arg.children.push(`) || \"\"`);\r\n    }\r\n    else if (!arg.isStatic) {\r\n        arg.content = `${arg.content} || \"\"`;\r\n    }\r\n    // .sync is replaced by v-model:arg\r\n    if (modifiers.includes('camel')) {\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            if (arg.isStatic) {\r\n                arg.content = camelize$1(arg.content);\r\n            }\r\n            else {\r\n                arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\r\n            }\r\n        }\r\n        else {\r\n            arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\r\n            arg.children.push(`)`);\r\n        }\r\n    }\r\n    if (!context.inSSR) {\r\n        if (modifiers.includes('prop')) {\r\n            injectPrefix(arg, '.');\r\n        }\r\n        if (modifiers.includes('attr')) {\r\n            injectPrefix(arg, '^');\r\n        }\r\n    }\r\n    if (!exp ||\r\n        (exp.type === 4 /* SIMPLE_EXPRESSION */ && !exp.content.trim())) {\r\n        context.onError(createCompilerError(33 /* X_V_BIND_NO_EXPRESSION */, loc));\r\n        return {\r\n            props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\r\n        };\r\n    }\r\n    return {\r\n        props: [createObjectProperty(arg, exp)]\r\n    };\r\n};\r\nconst injectPrefix = (arg, prefix) => {\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            arg.content = prefix + arg.content;\r\n        }\r\n        else {\r\n            arg.content = `\\`${prefix}\\${${arg.content}}\\``;\r\n        }\r\n    }\r\n    else {\r\n        arg.children.unshift(`'${prefix}' + (`);\r\n        arg.children.push(`)`);\r\n    }\r\n};\n\n// Merge adjacent text nodes and expressions into a single expression\r\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\r\nconst transformText = (node, context) => {\r\n    if (node.type === 0 /* ROOT */ ||\r\n        node.type === 1 /* ELEMENT */ ||\r\n        node.type === 11 /* FOR */ ||\r\n        node.type === 10 /* IF_BRANCH */) {\r\n        // perform the transform on node exit so that all expressions have already\r\n        // been processed.\r\n        return () => {\r\n            const children = node.children;\r\n            let currentContainer = undefined;\r\n            let hasText = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child)) {\r\n                    hasText = true;\r\n                    for (let j = i + 1; j < children.length; j++) {\r\n                        const next = children[j];\r\n                        if (isText(next)) {\r\n                            if (!currentContainer) {\r\n                                currentContainer = children[i] = {\r\n                                    type: 8 /* COMPOUND_EXPRESSION */,\r\n                                    loc: child.loc,\r\n                                    children: [child]\r\n                                };\r\n                            }\r\n                            // merge adjacent text node into current\r\n                            currentContainer.children.push(` + `, next);\r\n                            children.splice(j, 1);\r\n                            j--;\r\n                        }\r\n                        else {\r\n                            currentContainer = undefined;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (!hasText ||\r\n                // if this is a plain element with a single text child, leave it\r\n                // as-is since the runtime has dedicated fast path for this by directly\r\n                // setting textContent of the element.\r\n                // for component root it's always normalized anyway.\r\n                (children.length === 1 &&\r\n                    (node.type === 0 /* ROOT */ ||\r\n                        (node.type === 1 /* ELEMENT */ &&\r\n                            node.tagType === 0 /* ELEMENT */ &&\r\n                            // #3756\r\n                            // custom directives can potentially add DOM elements arbitrarily,\r\n                            // we need to avoid setting textContent of the element at runtime\r\n                            // to avoid accidentally overwriting the DOM elements added\r\n                            // by the user through custom directives.\r\n                            !node.props.find(p => p.type === 7 /* DIRECTIVE */ &&\r\n                                !context.directiveTransforms[p.name]) &&\r\n                            // in compat mode, <template> tags with no special directives\r\n                            // will be rendered as a fragment so its children must be\r\n                            // converted into vnodes.\r\n                            !(node.tag === 'template'))))) {\r\n                return;\r\n            }\r\n            // pre-convert text nodes into createTextVNode(text) calls to avoid\r\n            // runtime normalization.\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child) || child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                    const callArgs = [];\r\n                    // createTextVNode defaults to single whitespace, so if it is a\r\n                    // single space the code could be an empty call to save bytes.\r\n                    if (child.type !== 2 /* TEXT */ || child.content !== ' ') {\r\n                        callArgs.push(child);\r\n                    }\r\n                    // mark dynamic text with flag so it gets patched inside a block\r\n                    if (!context.ssr &&\r\n                        getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                        callArgs.push(1 /* TEXT */ +\r\n                            ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[1 /* TEXT */]} */` : ``));\r\n                    }\r\n                    children[i] = {\r\n                        type: 12 /* TEXT_CALL */,\r\n                        content: child,\r\n                        loc: child.loc,\r\n                        codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\r\n                    };\r\n                }\r\n            }\r\n        };\r\n    }\r\n};\n\nconst seen = new WeakSet();\r\nconst transformOnce = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ && findDir(node, 'once', true)) {\r\n        if (seen.has(node) || context.inVOnce) {\r\n            return;\r\n        }\r\n        seen.add(node);\r\n        context.inVOnce = true;\r\n        context.helper(SET_BLOCK_TRACKING);\r\n        return () => {\r\n            context.inVOnce = false;\r\n            const cur = context.currentNode;\r\n            if (cur.codegenNode) {\r\n                cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\r\n            }\r\n        };\r\n    }\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n    const { exp, arg } = dir;\r\n    if (!exp) {\r\n        context.onError(createCompilerError(40 /* X_V_MODEL_NO_EXPRESSION */, dir.loc));\r\n        return createTransformProps();\r\n    }\r\n    const rawExp = exp.loc.source;\r\n    const expString = exp.type === 4 /* SIMPLE_EXPRESSION */ ? exp.content : rawExp;\r\n    // im SFC <script setup> inline mode, the exp may have been transformed into\r\n    // _unref(exp)\r\n    context.bindingMetadata[rawExp];\r\n    const maybeRef = !true    /* SETUP_CONST */;\r\n    if (!expString.trim() || (!isMemberExpression(expString) && !maybeRef)) {\r\n        context.onError(createCompilerError(41 /* X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\r\n        return createTransformProps();\r\n    }\r\n    const propName = arg ? arg : createSimpleExpression('modelValue', true);\r\n    const eventName = arg\r\n        ? isStaticExp(arg)\r\n            ? `onUpdate:${arg.content}`\r\n            : createCompoundExpression(['\"onUpdate:\" + ', arg])\r\n        : `onUpdate:modelValue`;\r\n    let assignmentExp;\r\n    const eventArg = context.isTS ? `($event: any)` : `$event`;\r\n    {\r\n        assignmentExp = createCompoundExpression([\r\n            `${eventArg} => (`,\r\n            exp,\r\n            ` = $event)`\r\n        ]);\r\n    }\r\n    const props = [\r\n        // modelValue: foo\r\n        createObjectProperty(propName, dir.exp),\r\n        // \"onUpdate:modelValue\": $event => (foo = $event)\r\n        createObjectProperty(eventName, assignmentExp)\r\n    ];\r\n    // modelModifiers: { foo: true, \"bar-baz\": true }\r\n    if (dir.modifiers.length && node.tagType === 1 /* COMPONENT */) {\r\n        const modifiers = dir.modifiers\r\n            .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\r\n            .join(`, `);\r\n        const modifiersKey = arg\r\n            ? isStaticExp(arg)\r\n                ? `${arg.content}Modifiers`\r\n                : createCompoundExpression([arg, ' + \"Modifiers\"'])\r\n            : `modelModifiers`;\r\n        props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* CAN_HOIST */)));\r\n    }\r\n    return createTransformProps(props);\r\n};\r\nfunction createTransformProps(props = []) {\r\n    return { props };\r\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\r\nconst transformFilter = (node, context) => {\r\n    if (!isCompatEnabled(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context)) {\r\n        return;\r\n    }\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        // filter rewrite is applied before expression transform so only\r\n        // simple expressions are possible at this stage\r\n        rewriteFilter(node.content, context);\r\n    }\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        node.props.forEach((prop) => {\r\n            if (prop.type === 7 /* DIRECTIVE */ &&\r\n                prop.name !== 'for' &&\r\n                prop.exp) {\r\n                rewriteFilter(prop.exp, context);\r\n            }\r\n        });\r\n    }\r\n};\r\nfunction rewriteFilter(node, context) {\r\n    if (node.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        parseFilter(node, context);\r\n    }\r\n    else {\r\n        for (let i = 0; i < node.children.length; i++) {\r\n            const child = node.children[i];\r\n            if (typeof child !== 'object')\r\n                continue;\r\n            if (child.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                parseFilter(child, context);\r\n            }\r\n            else if (child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                rewriteFilter(node, context);\r\n            }\r\n            else if (child.type === 5 /* INTERPOLATION */) {\r\n                rewriteFilter(child.content, context);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseFilter(node, context) {\r\n    const exp = node.content;\r\n    let inSingle = false;\r\n    let inDouble = false;\r\n    let inTemplateString = false;\r\n    let inRegex = false;\r\n    let curly = 0;\r\n    let square = 0;\r\n    let paren = 0;\r\n    let lastFilterIndex = 0;\r\n    let c, prev, i, expression, filters = [];\r\n    for (i = 0; i < exp.length; i++) {\r\n        prev = c;\r\n        c = exp.charCodeAt(i);\r\n        if (inSingle) {\r\n            if (c === 0x27 && prev !== 0x5c)\r\n                inSingle = false;\r\n        }\r\n        else if (inDouble) {\r\n            if (c === 0x22 && prev !== 0x5c)\r\n                inDouble = false;\r\n        }\r\n        else if (inTemplateString) {\r\n            if (c === 0x60 && prev !== 0x5c)\r\n                inTemplateString = false;\r\n        }\r\n        else if (inRegex) {\r\n            if (c === 0x2f && prev !== 0x5c)\r\n                inRegex = false;\r\n        }\r\n        else if (c === 0x7c && // pipe\r\n            exp.charCodeAt(i + 1) !== 0x7c &&\r\n            exp.charCodeAt(i - 1) !== 0x7c &&\r\n            !curly &&\r\n            !square &&\r\n            !paren) {\r\n            if (expression === undefined) {\r\n                // first filter, end of expression\r\n                lastFilterIndex = i + 1;\r\n                expression = exp.slice(0, i).trim();\r\n            }\r\n            else {\r\n                pushFilter();\r\n            }\r\n        }\r\n        else {\r\n            switch (c) {\r\n                case 0x22:\r\n                    inDouble = true;\r\n                    break; // \"\r\n                case 0x27:\r\n                    inSingle = true;\r\n                    break; // '\r\n                case 0x60:\r\n                    inTemplateString = true;\r\n                    break; // `\r\n                case 0x28:\r\n                    paren++;\r\n                    break; // (\r\n                case 0x29:\r\n                    paren--;\r\n                    break; // )\r\n                case 0x5b:\r\n                    square++;\r\n                    break; // [\r\n                case 0x5d:\r\n                    square--;\r\n                    break; // ]\r\n                case 0x7b:\r\n                    curly++;\r\n                    break; // {\r\n                case 0x7d:\r\n                    curly--;\r\n                    break; // }\r\n            }\r\n            if (c === 0x2f) {\r\n                // /\r\n                let j = i - 1;\r\n                let p;\r\n                // find first non-whitespace prev char\r\n                for (; j >= 0; j--) {\r\n                    p = exp.charAt(j);\r\n                    if (p !== ' ')\r\n                        break;\r\n                }\r\n                if (!p || !validDivisionCharRE.test(p)) {\r\n                    inRegex = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (expression === undefined) {\r\n        expression = exp.slice(0, i).trim();\r\n    }\r\n    else if (lastFilterIndex !== 0) {\r\n        pushFilter();\r\n    }\r\n    function pushFilter() {\r\n        filters.push(exp.slice(lastFilterIndex, i).trim());\r\n        lastFilterIndex = i + 1;\r\n    }\r\n    if (filters.length) {\r\n        (process.env.NODE_ENV !== 'production') &&\r\n            warnDeprecation(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context, node.loc);\r\n        for (i = 0; i < filters.length; i++) {\r\n            expression = wrapFilter(expression, filters[i], context);\r\n        }\r\n        node.content = expression;\r\n    }\r\n}\r\nfunction wrapFilter(exp, filter, context) {\r\n    context.helper(RESOLVE_FILTER);\r\n    const i = filter.indexOf('(');\r\n    if (i < 0) {\r\n        context.filters.add(filter);\r\n        return `${toValidAssetId(filter, 'filter')}(${exp})`;\r\n    }\r\n    else {\r\n        const name = filter.slice(0, i);\r\n        const args = filter.slice(i + 1);\r\n        context.filters.add(name);\r\n        return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\r\n    }\r\n}\n\nconst seen$1 = new WeakSet();\r\nconst transformMemo = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        const dir = findDir(node, 'memo');\r\n        if (!dir || seen$1.has(node)) {\r\n            return;\r\n        }\r\n        seen$1.add(node);\r\n        return () => {\r\n            const codegenNode = node.codegenNode ||\r\n                context.currentNode.codegenNode;\r\n            if (codegenNode && codegenNode.type === 13 /* VNODE_CALL */) {\r\n                // non-component sub tree should be turned into a block\r\n                if (node.tagType !== 1 /* COMPONENT */) {\r\n                    makeBlock(codegenNode, context);\r\n                }\r\n                node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\r\n                    dir.exp,\r\n                    createFunctionExpression(undefined, codegenNode),\r\n                    `_cache`,\r\n                    String(context.cached++)\r\n                ]);\r\n            }\r\n        };\r\n    }\r\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\r\n    return [\r\n        [\r\n            transformOnce,\r\n            transformIf,\r\n            transformMemo,\r\n            transformFor,\r\n            ...([transformFilter] ),\r\n            ...((process.env.NODE_ENV !== 'production')\r\n                    ? [transformExpression]\r\n                    : []),\r\n            transformSlotOutlet,\r\n            transformElement,\r\n            trackSlotScopes,\r\n            transformText\r\n        ],\r\n        {\r\n            on: transformOn,\r\n            bind: transformBind,\r\n            model: transformModel\r\n        }\r\n    ];\r\n}\r\n// we name it `baseCompile` so that higher order compilers like\r\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\r\nfunction baseCompile(template, options = {}) {\r\n    const onError = options.onError || defaultOnError;\r\n    const isModuleMode = options.mode === 'module';\r\n    /* istanbul ignore if */\r\n    {\r\n        if (options.prefixIdentifiers === true) {\r\n            onError(createCompilerError(45 /* X_PREFIX_ID_NOT_SUPPORTED */));\r\n        }\r\n        else if (isModuleMode) {\r\n            onError(createCompilerError(46 /* X_MODULE_MODE_NOT_SUPPORTED */));\r\n        }\r\n    }\r\n    const prefixIdentifiers = !true ;\r\n    if (options.cacheHandlers) {\r\n        onError(createCompilerError(47 /* X_CACHE_HANDLER_NOT_SUPPORTED */));\r\n    }\r\n    if (options.scopeId && !isModuleMode) {\r\n        onError(createCompilerError(48 /* X_SCOPE_ID_NOT_SUPPORTED */));\r\n    }\r\n    const ast = isString(template) ? baseParse(template, options) : template;\r\n    const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\r\n    transform(ast, extend({}, options, {\r\n        prefixIdentifiers,\r\n        nodeTransforms: [\r\n            ...nodeTransforms,\r\n            ...(options.nodeTransforms || []) // user transforms\r\n        ],\r\n        directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\r\n        )\r\n    }));\r\n    return generate(ast, extend({}, options, {\r\n        prefixIdentifiers\r\n    }));\r\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexport { BASE_TRANSITION, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, UNREF, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, WITH_SCOPE_ID, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildProps, buildSlots, checkCompatEnabled, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, findDir, findProp, generate, getBaseTransformPreset, getInnerRange, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isBindKey, isBuiltInType, isCoreComponent, isMemberExpression, isSimpleIdentifier, isSlotOutlet, isStaticExp, isTemplateNode, isText, isVSlot, locStub, makeBlock, noopDirectiveTransform, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel, transformOn, traverseNode, warnDeprecation };\n", "import { registerRuntimeHelpers, isBuiltInType, createSimpleExpression, createCompilerError, createObjectProperty, createCallExpression, TO_DISPLAY_STRING, transformModel as transformModel$1, findProp, hasDynamicKeyVBind, transformOn as transformOn$1, createCompoundExpression, isStaticExp, checkCompatEnabled, noopDirectiveTransform, baseCompile, baseParse } from '@vue/compiler-core';\nexport * from '@vue/compiler-core';\nimport { isVoidTag, isHTMLTag, isSVGTag, makeMap, parseStringStyle, capitalize, extend } from '@vue/shared';\n\nconst V_MODEL_RADIO = Symbol((process.env.NODE_ENV !== 'production') ? `vModelRadio` : ``);\r\nconst V_MODEL_CHECKBOX = Symbol((process.env.NODE_ENV !== 'production') ? `vModelCheckbox` : ``);\r\nconst V_MODEL_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `vModelText` : ``);\r\nconst V_MODEL_SELECT = Symbol((process.env.NODE_ENV !== 'production') ? `vModelSelect` : ``);\r\nconst V_MODEL_DYNAMIC = Symbol((process.env.NODE_ENV !== 'production') ? `vModelDynamic` : ``);\r\nconst V_ON_WITH_MODIFIERS = Symbol((process.env.NODE_ENV !== 'production') ? `vOnModifiersGuard` : ``);\r\nconst V_ON_WITH_KEYS = Symbol((process.env.NODE_ENV !== 'production') ? `vOnKeysGuard` : ``);\r\nconst V_SHOW = Symbol((process.env.NODE_ENV !== 'production') ? `vShow` : ``);\r\nconst TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `Transition` : ``);\r\nconst TRANSITION_GROUP = Symbol((process.env.NODE_ENV !== 'production') ? `TransitionGroup` : ``);\r\nregisterRuntimeHelpers({\r\n    [V_MODEL_RADIO]: `vModelRadio`,\r\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\r\n    [V_MODEL_TEXT]: `vModelText`,\r\n    [V_MODEL_SELECT]: `vModelSelect`,\r\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\r\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\r\n    [V_ON_WITH_KEYS]: `withKeys`,\r\n    [V_SHOW]: `vShow`,\r\n    [TRANSITION]: `Transition`,\r\n    [TRANSITION_GROUP]: `TransitionGroup`\r\n});\n\n/* eslint-disable no-restricted-globals */\r\nlet decoder;\r\nfunction decodeHtmlBrowser(raw, asAttr = false) {\r\n    if (!decoder) {\r\n        decoder = document.createElement('div');\r\n    }\r\n    if (asAttr) {\r\n        decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, '&quot;')}\">`;\r\n        return decoder.children[0].getAttribute('foo');\r\n    }\r\n    else {\r\n        decoder.innerHTML = raw;\r\n        return decoder.textContent;\r\n    }\r\n}\n\nconst isRawTextContainer = /*#__PURE__*/ makeMap('style,iframe,script,noscript', true);\r\nconst parserOptions = {\r\n    isVoidTag,\r\n    isNativeTag: tag => isHTMLTag(tag) || isSVGTag(tag),\r\n    isPreTag: tag => tag === 'pre',\r\n    decodeEntities: decodeHtmlBrowser ,\r\n    isBuiltInComponent: (tag) => {\r\n        if (isBuiltInType(tag, `Transition`)) {\r\n            return TRANSITION;\r\n        }\r\n        else if (isBuiltInType(tag, `TransitionGroup`)) {\r\n            return TRANSITION_GROUP;\r\n        }\r\n    },\r\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\r\n    getNamespace(tag, parent) {\r\n        let ns = parent ? parent.ns : 0 /* HTML */;\r\n        if (parent && ns === 2 /* MATH_ML */) {\r\n            if (parent.tag === 'annotation-xml') {\r\n                if (tag === 'svg') {\r\n                    return 1 /* SVG */;\r\n                }\r\n                if (parent.props.some(a => a.type === 6 /* ATTRIBUTE */ &&\r\n                    a.name === 'encoding' &&\r\n                    a.value != null &&\r\n                    (a.value.content === 'text/html' ||\r\n                        a.value.content === 'application/xhtml+xml'))) {\r\n                    ns = 0 /* HTML */;\r\n                }\r\n            }\r\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\r\n                tag !== 'mglyph' &&\r\n                tag !== 'malignmark') {\r\n                ns = 0 /* HTML */;\r\n            }\r\n        }\r\n        else if (parent && ns === 1 /* SVG */) {\r\n            if (parent.tag === 'foreignObject' ||\r\n                parent.tag === 'desc' ||\r\n                parent.tag === 'title') {\r\n                ns = 0 /* HTML */;\r\n            }\r\n        }\r\n        if (ns === 0 /* HTML */) {\r\n            if (tag === 'svg') {\r\n                return 1 /* SVG */;\r\n            }\r\n            if (tag === 'math') {\r\n                return 2 /* MATH_ML */;\r\n            }\r\n        }\r\n        return ns;\r\n    },\r\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\r\n    getTextMode({ tag, ns }) {\r\n        if (ns === 0 /* HTML */) {\r\n            if (tag === 'textarea' || tag === 'title') {\r\n                return 1 /* RCDATA */;\r\n            }\r\n            if (isRawTextContainer(tag)) {\r\n                return 2 /* RAWTEXT */;\r\n            }\r\n        }\r\n        return 0 /* DATA */;\r\n    }\r\n};\n\n// Parse inline CSS strings for static style attributes into an object.\r\n// This is a NodeTransform since it works on the static `style` attribute and\r\n// converts it into a dynamic equivalent:\r\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\r\n// It is then processed by `transformElement` and included in the generated\r\n// props.\r\nconst transformStyle = node => {\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        node.props.forEach((p, i) => {\r\n            if (p.type === 6 /* ATTRIBUTE */ && p.name === 'style' && p.value) {\r\n                // replace p with an expression node\r\n                node.props[i] = {\r\n                    type: 7 /* DIRECTIVE */,\r\n                    name: `bind`,\r\n                    arg: createSimpleExpression(`style`, true, p.loc),\r\n                    exp: parseInlineCSS(p.value.content, p.loc),\r\n                    modifiers: [],\r\n                    loc: p.loc\r\n                };\r\n            }\r\n        });\r\n    }\r\n};\r\nconst parseInlineCSS = (cssText, loc) => {\r\n    const normalized = parseStringStyle(cssText);\r\n    return createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* CAN_STRINGIFY */);\r\n};\n\nfunction createDOMCompilerError(code, loc) {\r\n    return createCompilerError(code, loc, (process.env.NODE_ENV !== 'production') || !true ? DOMErrorMessages : undefined);\r\n}\r\nconst DOMErrorMessages = {\r\n    [49 /* X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\r\n    [50 /* X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\r\n    [51 /* X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\r\n    [52 /* X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\r\n    [53 /* X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\r\n    [54 /* X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\r\n    [55 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\r\n    [56 /* X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\r\n    [57 /* X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\r\n    [58 /* X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\r\n    [59 /* X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\r\n};\n\nconst transformVHtml = (dir, node, context) => {\r\n    const { exp, loc } = dir;\r\n    if (!exp) {\r\n        context.onError(createDOMCompilerError(49 /* X_V_HTML_NO_EXPRESSION */, loc));\r\n    }\r\n    if (node.children.length) {\r\n        context.onError(createDOMCompilerError(50 /* X_V_HTML_WITH_CHILDREN */, loc));\r\n        node.children.length = 0;\r\n    }\r\n    return {\r\n        props: [\r\n            createObjectProperty(createSimpleExpression(`innerHTML`, true, loc), exp || createSimpleExpression('', true))\r\n        ]\r\n    };\r\n};\n\nconst transformVText = (dir, node, context) => {\r\n    const { exp, loc } = dir;\r\n    if (!exp) {\r\n        context.onError(createDOMCompilerError(51 /* X_V_TEXT_NO_EXPRESSION */, loc));\r\n    }\r\n    if (node.children.length) {\r\n        context.onError(createDOMCompilerError(52 /* X_V_TEXT_WITH_CHILDREN */, loc));\r\n        node.children.length = 0;\r\n    }\r\n    return {\r\n        props: [\r\n            createObjectProperty(createSimpleExpression(`textContent`, true), exp\r\n                ? createCallExpression(context.helperString(TO_DISPLAY_STRING), [exp], loc)\r\n                : createSimpleExpression('', true))\r\n        ]\r\n    };\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n    const baseResult = transformModel$1(dir, node, context);\r\n    // base transform has errors OR component v-model (only need props)\r\n    if (!baseResult.props.length || node.tagType === 1 /* COMPONENT */) {\r\n        return baseResult;\r\n    }\r\n    if (dir.arg) {\r\n        context.onError(createDOMCompilerError(54 /* X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\r\n    }\r\n    function checkDuplicatedValue() {\r\n        const value = findProp(node, 'value');\r\n        if (value) {\r\n            context.onError(createDOMCompilerError(56 /* X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\r\n        }\r\n    }\r\n    const { tag } = node;\r\n    const isCustomElement = context.isCustomElement(tag);\r\n    if (tag === 'input' ||\r\n        tag === 'textarea' ||\r\n        tag === 'select' ||\r\n        isCustomElement) {\r\n        let directiveToUse = V_MODEL_TEXT;\r\n        let isInvalidType = false;\r\n        if (tag === 'input' || isCustomElement) {\r\n            const type = findProp(node, `type`);\r\n            if (type) {\r\n                if (type.type === 7 /* DIRECTIVE */) {\r\n                    // :type=\"foo\"\r\n                    directiveToUse = V_MODEL_DYNAMIC;\r\n                }\r\n                else if (type.value) {\r\n                    switch (type.value.content) {\r\n                        case 'radio':\r\n                            directiveToUse = V_MODEL_RADIO;\r\n                            break;\r\n                        case 'checkbox':\r\n                            directiveToUse = V_MODEL_CHECKBOX;\r\n                            break;\r\n                        case 'file':\r\n                            isInvalidType = true;\r\n                            context.onError(createDOMCompilerError(55 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\r\n                            break;\r\n                        default:\r\n                            // text type\r\n                            (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else if (hasDynamicKeyVBind(node)) {\r\n                // element has bindings with dynamic keys, which can possibly contain\r\n                // \"type\".\r\n                directiveToUse = V_MODEL_DYNAMIC;\r\n            }\r\n            else {\r\n                // text type\r\n                (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\r\n            }\r\n        }\r\n        else if (tag === 'select') {\r\n            directiveToUse = V_MODEL_SELECT;\r\n        }\r\n        else {\r\n            // textarea\r\n            (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\r\n        }\r\n        // inject runtime directive\r\n        // by returning the helper symbol via needRuntime\r\n        // the import will replaced a resolveDirective call.\r\n        if (!isInvalidType) {\r\n            baseResult.needRuntime = context.helper(directiveToUse);\r\n        }\r\n    }\r\n    else {\r\n        context.onError(createDOMCompilerError(53 /* X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\r\n    }\r\n    // native vmodel doesn't need the `modelValue` props since they are also\r\n    // passed to the runtime as `binding.value`. removing it reduces code size.\r\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n        p.key.content === 'modelValue'));\r\n    return baseResult;\r\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`);\r\nconst isNonKeyModifier = /*#__PURE__*/ makeMap(\r\n// event propagation management\r\n`stop,prevent,self,` +\r\n    // system modifiers + exact\r\n    `ctrl,shift,alt,meta,exact,` +\r\n    // mouse\r\n    `middle`);\r\n// left & right could be mouse or key modifiers based on event type\r\nconst maybeKeyModifier = /*#__PURE__*/ makeMap('left,right');\r\nconst isKeyboardEvent = /*#__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`, true);\r\nconst resolveModifiers = (key, modifiers, context, loc) => {\r\n    const keyModifiers = [];\r\n    const nonKeyModifiers = [];\r\n    const eventOptionModifiers = [];\r\n    for (let i = 0; i < modifiers.length; i++) {\r\n        const modifier = modifiers[i];\r\n        if (modifier === 'native' &&\r\n            checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */, context, loc)) {\r\n            eventOptionModifiers.push(modifier);\r\n        }\r\n        else if (isEventOptionModifier(modifier)) {\r\n            // eventOptionModifiers: modifiers for addEventListener() options,\r\n            // e.g. .passive & .capture\r\n            eventOptionModifiers.push(modifier);\r\n        }\r\n        else {\r\n            // runtimeModifiers: modifiers that needs runtime guards\r\n            if (maybeKeyModifier(modifier)) {\r\n                if (isStaticExp(key)) {\r\n                    if (isKeyboardEvent(key.content)) {\r\n                        keyModifiers.push(modifier);\r\n                    }\r\n                    else {\r\n                        nonKeyModifiers.push(modifier);\r\n                    }\r\n                }\r\n                else {\r\n                    keyModifiers.push(modifier);\r\n                    nonKeyModifiers.push(modifier);\r\n                }\r\n            }\r\n            else {\r\n                if (isNonKeyModifier(modifier)) {\r\n                    nonKeyModifiers.push(modifier);\r\n                }\r\n                else {\r\n                    keyModifiers.push(modifier);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return {\r\n        keyModifiers,\r\n        nonKeyModifiers,\r\n        eventOptionModifiers\r\n    };\r\n};\r\nconst transformClick = (key, event) => {\r\n    const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === 'onclick';\r\n    return isStaticClick\r\n        ? createSimpleExpression(event, true)\r\n        : key.type !== 4 /* SIMPLE_EXPRESSION */\r\n            ? createCompoundExpression([\r\n                `(`,\r\n                key,\r\n                `) === \"onClick\" ? \"${event}\" : (`,\r\n                key,\r\n                `)`\r\n            ])\r\n            : key;\r\n};\r\nconst transformOn = (dir, node, context) => {\r\n    return transformOn$1(dir, node, context, baseResult => {\r\n        const { modifiers } = dir;\r\n        if (!modifiers.length)\r\n            return baseResult;\r\n        let { key, value: handlerExp } = baseResult.props[0];\r\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\r\n        // normalize click.right and click.middle since they don't actually fire\r\n        if (nonKeyModifiers.includes('right')) {\r\n            key = transformClick(key, `onContextmenu`);\r\n        }\r\n        if (nonKeyModifiers.includes('middle')) {\r\n            key = transformClick(key, `onMouseup`);\r\n        }\r\n        if (nonKeyModifiers.length) {\r\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\r\n                handlerExp,\r\n                JSON.stringify(nonKeyModifiers)\r\n            ]);\r\n        }\r\n        if (keyModifiers.length &&\r\n            // if event name is dynamic, always wrap with keys guard\r\n            (!isStaticExp(key) || isKeyboardEvent(key.content))) {\r\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\r\n                handlerExp,\r\n                JSON.stringify(keyModifiers)\r\n            ]);\r\n        }\r\n        if (eventOptionModifiers.length) {\r\n            const modifierPostfix = eventOptionModifiers.map(capitalize).join('');\r\n            key = isStaticExp(key)\r\n                ? createSimpleExpression(`${key.content}${modifierPostfix}`, true)\r\n                : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\r\n        }\r\n        return {\r\n            props: [createObjectProperty(key, handlerExp)]\r\n        };\r\n    });\r\n};\n\nconst transformShow = (dir, node, context) => {\r\n    const { exp, loc } = dir;\r\n    if (!exp) {\r\n        context.onError(createDOMCompilerError(57 /* X_V_SHOW_NO_EXPRESSION */, loc));\r\n    }\r\n    return {\r\n        props: [],\r\n        needRuntime: context.helper(V_SHOW)\r\n    };\r\n};\n\nconst warnTransitionChildren = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 1 /* COMPONENT */) {\r\n        const component = context.isBuiltInComponent(node.tag);\r\n        if (component === TRANSITION) {\r\n            return () => {\r\n                if (node.children.length && hasMultipleChildren(node)) {\r\n                    context.onError(createDOMCompilerError(58 /* X_TRANSITION_INVALID_CHILDREN */, {\r\n                        start: node.children[0].loc.start,\r\n                        end: node.children[node.children.length - 1].loc.end,\r\n                        source: ''\r\n                    }));\r\n                }\r\n            };\r\n        }\r\n    }\r\n};\r\nfunction hasMultipleChildren(node) {\r\n    // #1352 filter out potential comment nodes.\r\n    const children = (node.children = node.children.filter(c => c.type !== 3 /* COMMENT */));\r\n    const child = children[0];\r\n    return (children.length !== 1 ||\r\n        child.type === 11 /* FOR */ ||\r\n        (child.type === 9 /* IF */ && child.branches.some(hasMultipleChildren)));\r\n}\n\nconst ignoreSideEffectTags = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 0 /* ELEMENT */ &&\r\n        (node.tag === 'script' || node.tag === 'style')) {\r\n        context.onError(createDOMCompilerError(59 /* X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\r\n        context.removeNode();\r\n    }\r\n};\n\nconst DOMNodeTransforms = [\r\n    transformStyle,\r\n    ...((process.env.NODE_ENV !== 'production') ? [warnTransitionChildren] : [])\r\n];\r\nconst DOMDirectiveTransforms = {\r\n    cloak: noopDirectiveTransform,\r\n    html: transformVHtml,\r\n    text: transformVText,\r\n    model: transformModel,\r\n    on: transformOn,\r\n    show: transformShow\r\n};\r\nfunction compile(template, options = {}) {\r\n    return baseCompile(template, extend({}, parserOptions, options, {\r\n        nodeTransforms: [\r\n            // ignore <script> and <tag>\r\n            // this is not put inside DOMNodeTransforms because that list is used\r\n            // by compiler-ssr to generate vnode fallback branches\r\n            ignoreSideEffectTags,\r\n            ...DOMNodeTransforms,\r\n            ...(options.nodeTransforms || [])\r\n        ],\r\n        directiveTransforms: extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\r\n        transformHoist: null \r\n    }));\r\n}\r\nfunction parse(template, options = {}) {\r\n    return baseParse(template, extend({}, parserOptions, options));\r\n}\n\nexport { DOMDirectiveTransforms, DOMNodeTransforms, TRANSITION, TRANSITION_GROUP, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, compile, createDOMCompilerError, parse, parserOptions, transformStyle };\n", "import type { ElementNode } from '@vue/compiler-core'\nimport { parse as fallback } from '@vue/compiler-dom'\nimport type {\n  CompilerError,\n  SFCBlock,\n  SFCParseOptions,\n  SFCScriptBlock,\n  SFCStyleBlock,\n  SFCTemplateBlock,\n} from '@vue/compiler-sfc'\nimport { first, last } from '@vuedx/shared'\nimport { NodeTypes } from '@vuedx/template-ast-types'\n\nexport interface SFCParseResult {\n  descriptor: SFCDescriptor\n  errors: Array<CompilerError | SyntaxError>\n}\n\nexport interface SFCDescriptor {\n  script: SFCScriptBlock | null\n  scriptSetup: SFCScriptBlock | null\n  template: SFCTemplateBlock | null\n  styles: SFCStyleBlock[]\n  customBlocks: SFCBlock[]\n}\n\nexport type Parser = Pick<Required<SFCParseOptions>['compiler'], 'parse'>\n\nlet isParsingBrokenTemplate = false\n\nexport function parse(\n  source: string,\n  compiler: Parser = {\n    parse: fallback,\n  },\n): SFCParseResult {\n  const descriptor: SFCDescriptor = {\n    script: null,\n    scriptSetup: null,\n    template: null,\n    styles: [],\n    customBlocks: [],\n  }\n  const errors: Array<CompilerError | SyntaxError> = []\n  const ast = compiler.parse(source, {\n    // there are no components at SFC parsing level\n    isNativeTag: () => true,\n    decodeEntities: (string) => string,\n    // preserve all whitespace\n    isPreTag: () => true,\n    getTextMode: ({ tag, props }, parent) => {\n      // all top level elements except <template> are parsed as raw text\n      // containers\n      if (\n        (parent == null && tag !== 'template') ||\n        // <template lang=\"xxx\"> should also be treated as raw text\n        (tag === 'template' &&\n          props.some(\n            (p) =>\n              p.type === NodeTypes.ATTRIBUTE &&\n              p.name === 'lang' &&\n              p.value != null &&\n              p.value.content.length > 0 &&\n              p.value.content !== 'html',\n          ))\n      ) {\n        return 2 /* RAWTEXT */\n      } else {\n        return 0 /* DATA */\n      }\n    },\n    onError: (e) => {\n      errors.push(e)\n    },\n  })\n\n  ast.children.forEach((node) => {\n    if (node.type !== 1 /* ELEMENT */) {\n      return\n    }\n\n    switch (node.tag) {\n      case 'template':\n        if (descriptor.template == null) {\n          descriptor.template = createBlock(node, source) as SFCTemplateBlock\n        } else {\n          errors.push(createDuplicateBlockError(node))\n        }\n        break\n      case 'script':\n        {\n          const scriptBlock = createBlock(node, source) as SFCScriptBlock\n          const isSetup = scriptBlock.attrs['setup'] != null\n          if (isSetup) {\n            if (descriptor.scriptSetup == null) {\n              descriptor.scriptSetup = scriptBlock\n            } else {\n              errors.push(createDuplicateBlockError(node, isSetup))\n            }\n          } else {\n            if (descriptor.script == null) {\n              descriptor.script = scriptBlock\n            } else {\n              errors.push(createDuplicateBlockError(node, isSetup))\n            }\n          }\n        }\n        break\n      case 'style':\n        {\n          const styleBlock = createBlock(node, source) as SFCStyleBlock\n          descriptor.styles.push(styleBlock)\n        }\n        break\n      default:\n        descriptor.customBlocks.push(createBlock(node, source))\n        break\n    }\n  })\n\n  if (descriptor.template != null && !isParsingBrokenTemplate) {\n    const start = descriptor.template.loc.start.offset\n    const end = source.lastIndexOf('</template')\n    if (end < descriptor.template.loc.end.offset) {\n      // There is an parsing error in the template.\n      const proxy =\n        source.slice(0, start) +\n        placeholder(source.slice(start, end)) +\n        source.slice(end)\n\n      isParsingBrokenTemplate = true\n      try {\n        const result = parse(proxy, compiler)\n\n        if (result.descriptor.template != null) {\n          result.descriptor.template.content = source.slice(start, end)\n          result.descriptor.template.loc.source = source.slice(start, end)\n        }\n\n        return result\n      } finally {\n        isParsingBrokenTemplate = false\n      }\n    }\n  }\n\n  if (descriptor.scriptSetup != null) {\n    if (descriptor.scriptSetup.src != null) {\n      errors.push(\n        new SyntaxError(\n          `<script setup> cannot use the \"src\" attribute because ` +\n            `its syntax will be ambiguous outside of the component.`,\n        ),\n      )\n      descriptor.scriptSetup = null\n    }\n    if (descriptor.script?.src != null) {\n      errors.push(\n        new SyntaxError(\n          `<script> cannot use the \"src\" attribute when <script setup> is ` +\n            `also present because they must be processed together.`,\n        ),\n      )\n      descriptor.script = null\n    }\n  }\n\n  return { descriptor, errors }\n}\nfunction createDuplicateBlockError(\n  node: ElementNode,\n  isScriptSetup = false,\n): CompilerError {\n  const err = new SyntaxError(\n    `Single file component can contain only one <${node.tag}${\n      isScriptSetup ? ` setup` : ``\n    }> element`,\n  ) as CompilerError\n  err.loc = node.loc\n  return err\n}\nfunction createBlock(node: ElementNode, source: string): SFCBlock {\n  const type = node.tag\n  let { start, end } = node.loc\n  let content = ''\n  if (node.children.length > 0) {\n    start = first(node.children).loc.start\n    end = last(node.children).loc.end\n    content = source.slice(start.offset, end.offset)\n  } else {\n    const offset = node.loc.source.indexOf(`</`)\n    if (offset > -1) {\n      start = {\n        line: start.line,\n        column: start.column + offset,\n        offset: start.offset + offset,\n      }\n    }\n    end = { ...start }\n  }\n  const loc = {\n    source: content,\n    start,\n    end,\n  }\n  const attrs: Record<string, string | true> = {}\n  const block: SFCBlock = {\n    type,\n    content,\n    loc,\n    attrs,\n  }\n  node.props.forEach((p) => {\n    if (p.type === NodeTypes.ATTRIBUTE) {\n      attrs[p.name] =\n        p.value != null && p.value.content.trim() !== ''\n          ? p.value.content\n          : true\n\n      if (p.name === 'lang') {\n        if (p.value != null) block.lang = p.value.content\n      } else if (p.name === 'src') {\n        if (p.value != null) block.src = p.value.content\n      } else if (type === 'style') {\n        if (p.name === 'scoped') {\n          ;(block as SFCStyleBlock).scoped = true\n        } else if (p.name === 'module') {\n          ;(block as SFCStyleBlock).module = attrs[p.name]\n        }\n      } else if (type === 'script' && p.name === 'setup') {\n        ;(block as SFCScriptBlock).setup = attrs['setup']\n      }\n    }\n  })\n  return block\n}\n\nfunction placeholder(content: string): string {\n  let output = ''\n  const nl = '\\n'.charCodeAt(0)\n  for (let i = 0; i < content.length; i++) {\n    output += content.charCodeAt(i) === nl ? '\\n' : ' '\n  }\n  return output\n}\n", "import TypeScript from 'typescript/lib/tsserverlibrary'\nimport { TransformScriptOptions } from './TransformScriptOptions'\n\nexport function createProgram(\n  ts: typeof TypeScript,\n  source: string,\n  fileName: string = 'input.ts',\n  lang: TransformScriptOptions['lang'] = 'ts',\n  previous?: TypeScript.Program,\n): TypeScript.Program {\n  const compilerHost: TypeScript.CompilerHost = {\n    fileExists: () => true,\n    getCanonicalFileName: (filename) => filename,\n    getCurrentDirectory: () => '',\n    getDefaultLibFileName: () => 'lib.d.ts',\n    getNewLine: () => '\\n',\n    getSourceFile: (id) => {\n      if (id !== fileName) return\n\n      return ts.createSourceFile(\n        id,\n        source,\n        ts.ScriptTarget.Latest,\n        true,\n        getScriptKind(lang),\n      )\n    },\n    readFile: () => undefined,\n    useCaseSensitiveFileNames: () => true,\n    writeFile: () => undefined,\n  }\n\n  const program = ts.createProgram(\n    [fileName],\n    {\n      noResolve: true,\n      target: ts.ScriptTarget.Latest,\n      jsx: lang.endsWith('x') ? ts.JsxEmit.Preserve : undefined,\n    },\n    compilerHost,\n    previous,\n  )\n\n  return program\n\n  function getScriptKind(\n    lang: TransformScriptOptions['lang'],\n  ): TypeScript.ScriptKind {\n    switch (lang) {\n      case 'js':\n        return ts.ScriptKind.JS\n      case 'ts':\n        return ts.ScriptKind.TS\n      case 'tsx':\n        return ts.ScriptKind.TSX\n      case 'jsx':\n        return ts.ScriptKind.JSX\n      default:\n        throw new Error(`Unknown lang`)\n    }\n  }\n}\n", "import { first } from '@vuedx/shared'\nimport TypeScript from 'typescript/lib/tsserverlibrary'\n\nexport interface KnownIdentifier {\n  name: string\n  kind:\n    | 'variable'\n    | 'function'\n    | 'class'\n    | 'enum'\n    | 'ref'\n    | 'maybeRef'\n    | 'external'\n    | 'externalRef'\n    | 'externalMaybeRef'\n}\n\nexport function findIdentifiers(\n  ts: typeof TypeScript,\n  program: TypeScript.Program,\n  sourceFile: TypeScript.SourceFile,\n): KnownIdentifier[] {\n  const checker = program.getTypeChecker()\n  const identifiers: KnownIdentifier[] = []\n\n  checker\n    .getSymbolsInScope(\n      sourceFile,\n      (ts.SymbolFlags.FunctionScopedVariable |\n        ts.SymbolFlags.BlockScopedVariable |\n        ts.SymbolFlags.Function |\n        ts.SymbolFlags.Class |\n        ts.SymbolFlags.ConstEnum |\n        ts.SymbolFlags.RegularEnum |\n        ts.SymbolFlags.Alias) &\n        ~(\n          ts.SymbolFlags.Interface |\n          ts.SymbolFlags.TypeLiteral |\n          ts.SymbolFlags.TypeParameter |\n          ts.SymbolFlags.TypeAlias\n        ),\n    )\n    .forEach((sym) => {\n      const name = sym.getName()\n      const flags = sym.getFlags()\n      const kind: KnownIdentifier['kind'] =\n        (flags & ts.SymbolFlags.Function) !== 0\n          ? 'function'\n          : (flags & ts.SymbolFlags.Class) !== 0\n          ? 'class'\n          : (flags & ts.SymbolFlags.ConstEnum) !== 0 ||\n            (flags & ts.SymbolFlags.RegularEnum) !== 0\n          ? 'enum'\n          : (flags & ts.SymbolFlags.Alias) !== 0\n          ? 'externalMaybeRef'\n          : 'maybeRef'\n\n      if (\n        kind === 'maybeRef' &&\n        sym.valueDeclaration != null &&\n        ts.isVariableDeclaration(sym.valueDeclaration) &&\n        sym.valueDeclaration.initializer != null\n      ) {\n        const { initializer, type } = sym.valueDeclaration\n\n        if (type == null) {\n          if (\n            !(\n              ts.isCallExpression(initializer) || ts.isIdentifier(initializer)\n            ) ||\n            (ts.isCallExpression(initializer) &&\n              ts.isIdentifier(initializer.expression) &&\n              ['defineProps', 'defineEmits'].includes(\n                initializer.expression.getText(),\n              ))\n          ) {\n            return identifiers.push({ name, kind: 'variable' })\n          }\n        }\n      }\n\n      if (\n        kind === 'externalMaybeRef' &&\n        sym.declarations != null &&\n        sym.declarations.length > 0\n      ) {\n        const declaration = first(sym.declarations)\n        if (ts.isImportClause(declaration)) {\n          if (declaration.isTypeOnly) return\n          if (\n            ts.isStringLiteral(declaration.parent.moduleSpecifier) &&\n            declaration.parent.moduleSpecifier.text.endsWith('.vue')\n          ) {\n            return identifiers.push({ name, kind: 'external' })\n          }\n        } else if (ts.isNamespaceImport(declaration)) {\n          if (declaration.parent.isTypeOnly) return\n        } else if (ts.isImportSpecifier(declaration)) {\n          if (declaration.isTypeOnly) return\n          if (declaration.parent.parent.isTypeOnly) return\n        }\n      }\n\n      return identifiers.push({ name, kind })\n    })\n\n  return identifiers\n}\n", "import {\n  DecodedSourceMap,\n  getComponentName,\n  invariant,\n  SourceTransformer,\n} from '@vuedx/shared'\nimport type TypeScript from 'typescript/lib/tsserverlibrary'\nimport { createProgram } from './createProgram'\nimport { findIdentifiers, KnownIdentifier } from './findIdentifiers'\nimport { TransformScriptOptions } from './TransformScriptOptions'\nexport interface TransformScriptResult {\n  code: string\n  map: DecodedSourceMap\n  identifiers: KnownIdentifier[]\n  componentIdentifier: string\n  name: string\n  inheritAttrs: boolean\n}\n\nexport function transformScript(\n  source: string,\n  options: TransformScriptOptions,\n): TransformScriptResult {\n  const key = `${options.fileName}:script:program`\n  const ts = options.lib\n  const inputFile = `input.${options.lang}`\n  const program = createProgram(\n    ts,\n    source,\n    inputFile,\n    options.lang,\n    options.cache?.get(key) as TypeScript.Program,\n  )\n  options.cache?.set(key, program)\n  const sourceFile = program.getSourceFile(inputFile)\n  invariant(sourceFile != null, 'Source file not found.')\n\n  let defaultExport: TypeScript.ExportAssignment | undefined\n  let inheritAttrs: boolean = true\n  let name: string = getComponentName(options.fileName)\n\n  const vars = {\n    defineComponent: `${options.internalIdentifierPrefix}defineComponent`,\n    Component: `${options.internalIdentifierPrefix}_Script_Component`,\n  }\n\n  const code = new SourceTransformer(inputFile, source)\n\n  findNodes(sourceFile)\n\n  const identifiers = findIdentifiers(ts, program, sourceFile)\n\n  if (defaultExport != null) {\n    const needsDefineComponent = ts.isObjectLiteralExpression(\n      defaultExport.expression,\n    )\n\n    code.clone(0, defaultExport.getFullStart())\n    code.nextLine()\n    code.append(`const ${vars.Component} = `)\n    if (needsDefineComponent) {\n      code.append(`${vars.defineComponent}(`)\n    }\n    code.clone(\n      defaultExport.expression.getFullStart(),\n      defaultExport.expression.getEnd(),\n    )\n    if (needsDefineComponent) {\n      code.append(');')\n      code.nextLine()\n    }\n    code.clone(defaultExport.expression.getEnd(), source.length)\n  } else {\n    code.nextLine()\n    code.clone(0, source.length)\n    code.nextLine()\n    code.append(`const ${vars.Component} = ${vars.defineComponent}({});`)\n  }\n\n  code.nextLine()\n\n  const result = code.end()\n\n  return {\n    code: result.code,\n    map: result.map,\n    identifiers,\n    componentIdentifier: vars.Component,\n    name,\n    inheritAttrs,\n  }\n\n  function findNodes(sourceFile: TypeScript.SourceFile): void {\n    sourceFile.statements.forEach((statement) => {\n      if (ts.isExportAssignment(statement)) {\n        defaultExport = statement\n      }\n\n      if (ts.canHaveModifiers(statement)) {\n        const modifiers = ts.getModifiers(statement)\n        if (\n          modifiers?.some(\n            (modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword,\n          ) === true\n        ) {\n          if (ts.isVariableStatement(statement)) {\n            statement.declarationList.declarations.forEach((declaration) => {\n              if (ts.isIdentifier(declaration.name)) {\n                if (\n                  declaration.name.text === 'name' &&\n                  declaration.initializer != null &&\n                  ts.isStringLiteral(declaration.initializer)\n                ) {\n                  name = declaration.initializer.getText().slice(1, -1)\n                } else if (\n                  declaration.name.text === 'inheritAttrs' &&\n                  declaration.initializer != null\n                ) {\n                  inheritAttrs =\n                    declaration.initializer.kind === ts.SyntaxKind.TrueKeyword\n                }\n              }\n            })\n          }\n        }\n      }\n    })\n  }\n}\n", "import {\n  DecodedSourceMap,\n  first,\n  invariant,\n  SourceTransformer,\n} from '@vuedx/shared'\nimport type TypeScript from 'typescript/lib/tsserverlibrary'\nimport { createProgram } from './createProgram'\nimport { findIdentifiers, KnownIdentifier } from './findIdentifiers'\nimport { TransformScriptOptions } from './TransformScriptOptions'\nexport interface TransformScriptSetupResult {\n  code: string\n  map: DecodedSourceMap\n  identifiers: KnownIdentifier[]\n  scopeIdentifier: string\n  privateComponentIdentifier: string\n  publicComponentIdentifier: string\n  exports: Record<string, string>\n}\n\nexport interface TransformScriptSetupOptions extends TransformScriptOptions {\n  generic?: string\n  attrsIdentifier: string\n  slotsIdentifier: string\n}\n\nexport function transformScriptSetup(\n  source: string,\n  options: TransformScriptSetupOptions,\n): TransformScriptSetupResult {\n  const key = `${options.fileName}:scriptSetup:program`\n  const ts = options.lib\n  const inputFile = `input.${options.lang}`\n  const program = createProgram(\n    ts,\n    source,\n    inputFile,\n    options.lang,\n    options.cache?.get(key) as TypeScript.Program,\n  )\n  options.cache?.set(key, program)\n  const sourceFile = program.getSourceFile(inputFile)\n  invariant(sourceFile != null, 'Source file not found.')\n\n  let firstStatement: TypeScript.Statement | undefined\n  let internalPropsIdentifier: TypeScript.Identifier | undefined\n  let internalPropsInitializer: TypeScript.Expression | undefined\n  let propsIdentifier: TypeScript.Identifier | undefined\n  let propsType: TypeScript.TypeNode | undefined\n  let propsOptions: TypeScript.Node | undefined\n  let emitsType: TypeScript.Node | undefined\n  let emitsOptions: TypeScript.Node | undefined\n  let exposeOptions: TypeScript.Node | undefined\n  const exportedNodes: Array<\n    | TypeScript.ExportDeclaration\n    | TypeScript.TypeAliasDeclaration\n    | TypeScript.InterfaceDeclaration\n    | TypeScript.EnumDeclaration\n  > = []\n  const exportedNames: Record<string, string> = {}\n  const _ = options.internalIdentifierPrefix\n  const vars = {\n    internalProps: `${_}ScriptSetup_internalProps`,\n    internalComponent: `${_}ScriptSetup_ComponentPrivate`,\n    publicComponent: `${_}ScriptSetup_Component`,\n    scope: `${_}ScriptSetup_scope`,\n    emits: `${_}ScriptSetup_emits`,\n    props: `${_}ScriptSetup_props`,\n    expose: `${_}ScriptSetup_expose`,\n  }\n  const generic = options.generic != null ? `<${options.generic}>` : ''\n  const code = new SourceTransformer(inputFile, source)\n\n  findNodes(sourceFile)\n\n  const identifiers = findIdentifiers(ts, program, sourceFile)\n\n  const offset =\n    firstStatement == null ? source.length : firstStatement.getFullStart()\n\n  if (exportedNodes.length > 0) {\n    genExportedNodes(0, offset)\n  } else {\n    code.clone(0, offset)\n  }\n  const { line } = code.sourceLineColumnMapper.positionAt(offset)\n\n  // wrap setup code in a function\n  code.append(`\\n`, { mappings: [[[0, 0, line + 1, 0]]] })\n\n  code.append(`function ${vars.scope}${generic}() {`, {\n    mappings: [[[0, 0, line + 1, 0]]],\n  })\n\n  if (exportedNodes.length > 0) {\n    genExportedNodes(offset, source.length)\n  } else {\n    code.clone(offset, source.length)\n  }\n\n  code.nextLine()\n\n  if (exportedNodes.length > 0) {\n    for (const node of exportedNodes) {\n      if (ts.isExportDeclaration(node)) {\n        if (node.exportClause != null && ts.isNamedExports(node.exportClause)) {\n          for (const specifier of node.exportClause.elements) {\n            const name = (specifier.propertyName ?? specifier.name).getText()\n            const internalName = `${options.internalIdentifierPrefix}_export_${name}`\n            exportedNames[name] = internalName\n            // TODO: check if typeof is required or not.\n            code.append(\n              `const ${internalName} = null as unknown as typeof ${specifier.name.getText()};`,\n            )\n            code.nextLine()\n          }\n        }\n      } else {\n        const name = node.name.getText()\n        const internalName = `${options.internalIdentifierPrefix}_export_${name}`\n        exportedNames[name] = internalName\n        code.append(`const ${internalName} = null as unknown as ${name};`)\n        code.nextLine()\n      }\n    }\n  }\n\n  // define private props (withDefaults)\n  if (internalPropsIdentifier == null && internalPropsInitializer != null) {\n    code.clone(offset, internalPropsInitializer.getStart())\n    code.append(`const ${vars.internalProps} = `)\n    code.clone(\n      internalPropsInitializer.getStart(),\n      internalPropsInitializer.getEnd(),\n    )\n    code.append(';\\n')\n  } else if (\n    internalPropsIdentifier == null &&\n    internalPropsInitializer == null\n  ) {\n    code.append(`const ${vars.internalProps} = {};\\n`)\n  }\n  code.append(\n    `const ${vars.internalComponent} = ${_}defineComponent((_: typeof ${\n      internalPropsIdentifier?.getText() ?? vars.internalProps\n    })=> {});\\n`,\n  )\n\n  // define expose\n  let expose = ''\n  if (exposeOptions != null) {\n    code.append(`const ${vars.expose} = (`)\n    code.clone(exposeOptions.getStart(), exposeOptions.getEnd())\n    code.append(`);\\n`)\n    code.append(\n      `const ${vars.expose}_API = null as unknown as new () => typeof ${vars.expose};\\n`,\n    )\n    expose = ` extends ${vars.expose}_API`\n  }\n\n  // define props\n  if (propsIdentifier != null) {\n    code.append(`const ${vars.props} = ${propsIdentifier.text};\\n`)\n  } else if (propsType != null) {\n    code.append(`const ${vars.props} = defineProps<`)\n    code.clone(propsType.getStart(), propsType.getEnd())\n    code.append(`>();\\n`)\n  } else if (propsOptions != null) {\n    code.append(`const ${vars.props} = defineProps(`)\n    code.clone(propsOptions.getStart(), propsOptions.getEnd())\n    code.append(`);\\n`)\n  } else {\n    code.append(`const ${vars.props} = defineProps({});\\n`)\n  }\n\n  // define emits\n  if (emitsType != null) {\n    code.append(\n      `const ${vars.emits} = ({} as unknown as ${options.typeIdentifier}.internal.EmitTypeToEmits<`,\n    )\n    code.clone(emitsType.getStart(), emitsType.getEnd())\n    code.append(`>);\\n`)\n  } else if (emitsOptions != null) {\n    code.append(`const ${vars.emits} = (`)\n    code.clone(emitsOptions.getStart(), emitsOptions.getEnd())\n    code.append(`);\\n`)\n  } else {\n    code.append(`const ${vars.emits} = ({});\\n`)\n  }\n\n  // define public component\n  code.append(`class ${vars.publicComponent}${generic}${expose} {\\n`)\n  // define $props using mergeAttrs\n  code.append(\n    `$props = null as unknown as ${options.typeIdentifier}.internal.MergeAttrs<`,\n  )\n  // <props>\n  if (propsType != null) {\n    code.clone(propsType.getStart(), propsType.getEnd())\n  } else {\n    code.append(`typeof ${vars.props}`)\n  }\n  // <emits>\n  code.append(` & ${options.typeIdentifier}.internal.EmitsToProps<`)\n  if (emitsType != null) {\n    code.append(`${options.typeIdentifier}.internal.EmitTypeToEmits<`)\n    code.clone(emitsType.getStart(), emitsType.getEnd())\n    code.append(`>`)\n  } else {\n    code.append(`typeof ${vars.emits}`)\n  }\n  code.append(`>`)\n  // <attrs>\n  code.append(`, typeof ${options.attrsIdentifier}>;\\n`)\n  code.append(\n    `$slots = null as unknown as ${options.typeIdentifier}.internal.Slots<ReturnType<typeof ${options.slotsIdentifier}>>;\\n`,\n  )\n  code.append('}\\n')\n\n  code.append(`\\n`)\n  const result = code.end()\n\n  return {\n    code: result.code,\n    map: result.map,\n    identifiers,\n    privateComponentIdentifier: vars.internalComponent,\n    publicComponentIdentifier: vars.publicComponent,\n    scopeIdentifier: vars.scope,\n    exports: exportedNames,\n  }\n\n  function genExportedNodes(start: number, end: number): void {\n    let cursor = start\n    for (const node of exportedNodes) {\n      const s = node.getStart()\n      const e = node.getEnd()\n      if (s > cursor && s < end) {\n        code.clone(cursor, s)\n        if (!ts.isExportDeclaration(node)) {\n          const modifier = getExportModifier(node)\n          if (modifier != null) {\n            code.clone(modifier.getEnd(), node.getEnd())\n          }\n        }\n        cursor = e\n      }\n    }\n\n    code.clone(cursor, end)\n  }\n\n  function getExportModifier(\n    node: TypeScript.Node,\n  ): TypeScript.ExportKeyword | null {\n    if (!ts.canHaveModifiers(node)) return null\n    const modifier = node.modifiers?.find(\n      (modifier): modifier is ts.ExportKeyword =>\n        modifier.kind === ts.SyntaxKind.ExportKeyword,\n    )\n    if (modifier == null) return null\n    return modifier as TypeScript.ExportKeyword\n  }\n\n  function findNodes(sourceFile: TypeScript.SourceFile): void {\n    sourceFile.statements.forEach((statement) => {\n      if (!ts.isImportDeclaration(statement)) {\n        if (firstStatement == null) {\n          firstStatement = statement\n        }\n      }\n\n      if (ts.isVariableStatement(statement)) {\n        statement.declarationList.declarations.forEach((declaration) => {\n          if (declaration.initializer != null) {\n            if (isFnCall(declaration.initializer, 'defineProps')) {\n              if (ts.isIdentifier(declaration.name)) {\n                internalPropsIdentifier = declaration.name\n                propsIdentifier = declaration.name\n              } else {\n                internalPropsInitializer = declaration.initializer\n              }\n              processProps(declaration.initializer)\n            } else if (isFnCall(declaration.initializer, 'withDefaults')) {\n              if (ts.isIdentifier(declaration.name)) {\n                internalPropsIdentifier = declaration.name\n              } else {\n                internalPropsInitializer = declaration.initializer\n              }\n\n              const definePropsExp = declaration.initializer.arguments[0]\n              if (definePropsExp != null) {\n                if (isFnCall(definePropsExp, 'defineProps')) {\n                  processProps(definePropsExp)\n                }\n              }\n            } else if (isFnCall(declaration.initializer, 'defineEmits')) {\n              processEmits(declaration.initializer)\n            } else if (isFnCall(declaration.initializer, 'defineExpose')) {\n              processExpose(declaration.initializer)\n            }\n          }\n        })\n      } else if (ts.isExpressionStatement(statement)) {\n        if (isFnCall(statement.expression, 'defineProps')) {\n          internalPropsInitializer = statement.expression\n          processProps(statement.expression)\n        } else if (isFnCall(statement.expression, 'withDefaults')) {\n          internalPropsInitializer = statement.expression\n          const definePropsExp = statement.expression.arguments[0]\n          if (definePropsExp != null) {\n            if (isFnCall(definePropsExp, 'defineProps')) {\n              processProps(definePropsExp)\n            }\n          }\n        } else if (isFnCall(statement.expression, 'defineEmits')) {\n          processEmits(statement.expression)\n        } else if (isFnCall(statement.expression, 'defineExpose')) {\n          processExpose(statement.expression)\n        }\n      } else if (ts.isExportDeclaration(statement)) {\n        if (statement.isTypeOnly) exportedNodes.push(statement)\n        // TODO: support `export { type foo }`\n      } else if (\n        ts.isTypeAliasDeclaration(statement) ||\n        ts.isInterfaceDeclaration(statement) ||\n        ts.isEnumDeclaration(statement)\n      ) {\n        const modifier = getExportModifier(statement)\n        if (modifier != null) {\n          exportedNodes.push(statement)\n        }\n      }\n    })\n\n    function isFnCall(\n      node: TypeScript.Node,\n      name: string,\n    ): node is TypeScript.CallExpression {\n      return (\n        ts.isCallExpression(node) &&\n        ts.isIdentifier(node.expression) &&\n        node.expression.escapedText === name\n      )\n    }\n\n    function processProps(node: TypeScript.CallExpression): void {\n      if (node.typeArguments != null && node.typeArguments.length > 0) {\n        propsType = first(node.typeArguments)\n      } else if (node.arguments != null && node.arguments.length > 0) {\n        propsOptions = first(node.arguments)\n      }\n    }\n\n    function processEmits(node: TypeScript.CallExpression): void {\n      if (node.typeArguments != null && node.typeArguments.length > 0) {\n        emitsType = first(node.typeArguments)\n      } else if (node.arguments != null && node.arguments.length > 0) {\n        emitsOptions = first(node.arguments)\n      }\n    }\n\n    function processExpose(node: TypeScript.CallExpression): void {\n      if (node.arguments != null && node.arguments.length > 0) {\n        exposeOptions = first(node.arguments)\n      }\n    }\n  }\n}\n", "import type { Position, SourceLocation } from '@vue/compiler-core'\n\nexport function advancePositionWithClone(\n  pos: Position,\n  source: string,\n  numberOfCharacters: number = source.length,\n): Position {\n  return advancePositionWithMutation(\n    Object.assign({}, pos),\n    source,\n    numberOfCharacters,\n  )\n}\n\n// advance by mutation without cloning (for performance reasons), since this\n// gets called a lot in the parser\nexport function advancePositionWithMutation(\n  pos: Position,\n  source: string,\n  numberOfCharacters: number = source.length,\n): Position {\n  let linesCount = 0\n  let lastNewLinePos = -1\n  for (let i = 0; i < numberOfCharacters; i++) {\n    if (source.charCodeAt(i) === 10 /* newline char code */) {\n      linesCount++\n      lastNewLinePos = i\n    }\n  }\n\n  pos.offset += numberOfCharacters\n  pos.line += linesCount\n  pos.column =\n    lastNewLinePos === -1\n      ? pos.column + numberOfCharacters\n      : numberOfCharacters - lastNewLinePos\n\n  return pos\n}\n\nexport function createLoc(\n  loc: SourceLocation,\n  offset: number,\n  length?: number,\n): SourceLocation\nexport function createLoc(\n  loc: undefined,\n  offset: number,\n  length?: number,\n): undefined\nexport function createLoc(\n  loc: SourceLocation | undefined,\n  offset: number,\n  length?: number,\n): SourceLocation | undefined {\n  if (loc == null) return\n  length = length ?? loc.source.length - offset\n  const source = loc.source.slice(offset, offset + length)\n  const start = advancePositionWithClone(loc.start, loc.source.slice(0, offset))\n  const end = advancePositionWithClone(start, source)\n\n  return { source, start, end }\n}\n\nexport function sliceLoc(\n  loc: SourceLocation,\n  start: number,\n  end?: number,\n): SourceLocation\nexport function sliceLoc(loc: undefined, start: number, end?: number): undefined\nexport function sliceLoc(\n  loc: SourceLocation | undefined,\n  start: number,\n  end?: number,\n): SourceLocation | undefined {\n  if (loc == null) return\n  if (end == null) {\n    end = loc.source.length\n  } else if (end < 0) {\n    end = loc.source.length + end\n  }\n\n  if (start < 0) {\n    start = loc.source.length + start\n  }\n\n  return createLoc(loc, start, Math.max(0, end - start))\n}\n\nexport function transformText(content: string): string {\n  return /[<{}>]/i.test(content) ? `{${JSON.stringify(content)}}` : content\n}\n", "export function getRuntimeFn(\n  prefix: string,\n  name:\n    | 'checkDirective'\n    | 'checkOnDirective'\n    | 'checkSlots'\n    | 'first'\n    | 'flat'\n    | 'guard'\n    | 'record'\n    | 'renderList'\n    | 'resolveComponent'\n    | 'resolveDirective'\n    | 'union'\n    | 'getAttrs'\n    | 'getProps'\n    | 'unref',\n): string {\n  return `${prefix}.internal.${name}`\n}\n", "import {\n  AttributeNode,\n  BaseElementNode,\n  CommentNode,\n  ComponentNode,\n  CompoundExpressionNode,\n  createCompoundExpression,\n  createSimpleExpression,\n  DirectiveNode,\n  ElementNode,\n  ExpressionNode,\n  findProp,\n  ForNode,\n  IfNode,\n  InterpolationNode,\n  Node,\n  PlainElementNode,\n  RootNode,\n  SimpleExpressionNode,\n  SlotOutletNode,\n  SourceLocation,\n  TemplateNode,\n  TextNode,\n} from '@vue/compiler-core'\nimport {\n  camelize,\n  capitalize,\n  getClassNameForTagName,\n  invariant,\n  last,\n  pascalCase,\n} from '@vuedx/shared'\nimport {\n  ElementTypes,\n  isAttributeNode,\n  isCommentNode,\n  isComponentNode,\n  isDirectiveNode,\n  isExpressionNode,\n  isPlainElementNode,\n  isRootNode,\n  isSimpleExpressionNode,\n  isSimpleIdentifier,\n  isSlotNode,\n  isTemplateNode,\n  isTextNode,\n  NodeTypes,\n  TraversalAncestors,\n  traverse,\n  traverseEvery,\n} from '@vuedx/template-ast-types'\nimport type { DecodedSourceMap } from 'magic-string'\nimport type { TransformedCode } from '../types/TransformedCode'\n\nimport { createLoc, sliceLoc } from '../utils'\nimport { getRuntimeFn } from './runtime'\nimport type { NodeTransformContext } from './types/NodeTransformContext'\n\ninterface GenerateContext extends NodeTransformContext {\n  write(\n    code: string,\n    loc?: SourceLocation,\n    addMappingType?: boolean,\n  ): GenerateContext\n  newLine(): GenerateContext\n  indent(): GenerateContext\n  deindent(): GenerateContext\n  getOutput(): TransformedCode\n  setSourceMapMode(enabled: boolean): boolean\n  typeGuards: Array<SimpleExpressionNode | CompoundExpressionNode | undefined>\n}\n\nexport const annotations = {\n  /**\n   * Mark range to ignore diagnostics.\n   */\n  diagnosticsIgnore: {\n    start: '/*<vuedx:diagnosticsIgnore>*/',\n    end: '/*</vuedx:diagnosticsIgnore>*/',\n  },\n\n  /**\n   * Used to define range for hoists or defining global variables.\n   */\n  templateGlobals: {\n    start: '/*<vuedx:templateGlobals>*/',\n    end: '/*</vuedx:templateGlobals>*/',\n  },\n\n  /**\n   * Used to define range for return from setup() function, generated from <script setup>\n   */\n  setupGlobals: {\n    start: '/*<vuedx:setupGlobals>*/',\n    end: '/*</vuedx:setupGlobals>*/',\n  },\n\n  /**\n   * Missing expression in v-if or v-else-if.\n   */\n  missingExpression: '/*<vuedx:missingExpression>*/',\n\n  /**\n   * Used in every JSX element to provide position for attribute completion.\n   */\n  tsxCompletions: '/*<vuedx:tsx-completions-target/>*/',\n\n  /**\n   * Used once in render function to get completions from context.\n   */\n  tsCompletions: '/*<vuedx:ts-completions-target/>*/',\n}\n\nlet ctx: GenerateContext\nexport function generate(\n  root: RootNode,\n  options: NodeTransformContext,\n): TransformedCode {\n  ctx = createGenerateContext(options)\n\n  genRootNode(root)\n  genSlotTypes(root)\n  genAttrTypes(root)\n\n  return ctx.getOutput()\n}\n\nfunction genNode(node: Node): void {\n  switch (node.type) {\n    case NodeTypes.ROOT:\n      return genRootNode(node as RootNode)\n    case NodeTypes.ELEMENT: {\n      const el = node as ElementNode\n      switch (el.tagType) {\n        case ElementTypes.ELEMENT:\n          return genElementNode(node as ElementNode)\n        case ElementTypes.COMPONENT:\n          return genComponentNode(node as ComponentNode)\n        case ElementTypes.SLOT:\n          return genSlotOutletNode(node as SlotOutletNode)\n        case ElementTypes.TEMPLATE:\n          return genTemplateNode(node as TemplateNode)\n        default:\n          throw new Error(`Unexpected element type: ${node.type}`)\n      }\n    }\n    case NodeTypes.SIMPLE_EXPRESSION:\n    case NodeTypes.COMPOUND_EXPRESSION:\n      return genExpressionNode(node as ExpressionNode)\n    case NodeTypes.TEXT:\n      return genTextNode(node as TextNode)\n    case NodeTypes.INTERPOLATION:\n      return genInterpolationNode(node as InterpolationNode)\n    case NodeTypes.COMMENT:\n      return genCommentNode(node as CommentNode)\n    case NodeTypes.FOR:\n      return genForNode(node as ForNode)\n    case NodeTypes.IF:\n      return genIfNode(node as IfNode)\n    default:\n      throw new Error(`Unsupported node type: ${node.type}`)\n  }\n}\n\nfunction indent(fn: () => void): void {\n  ctx.indent()\n  fn()\n  ctx.deindent()\n}\nfunction writeLine(code: string): void {\n  ctx.write(code).newLine()\n}\n\nfunction genRootNode(node: RootNode): void {\n  genKnownIdentifierGetters(node.scope.globals)\n  writeLine(`function ${ctx.internalIdentifierPrefix}render() {`)\n  indent(() => {\n    node.scope.getBinding('$slots') // forces to declare $slots\n    genGlobalDeclarations(node)\n    genNodeHoists({ hoists: ctx.scope.getRootScope() })\n    writeLine('return (')\n    indent(() => {\n      writeLine('<>')\n      indent(() => genChildren(node))\n      writeLine('</>')\n    })\n    writeLine(')')\n  })\n  writeLine('}')\n  writeLine(`${ctx.internalIdentifierPrefix}render();`)\n}\n\nfunction genKnownIdentifierGetters(ids: string[]): void {\n  ids = Array.from(\n    new Set([...ids, ...ctx.used.components, ...ctx.used.directives]),\n  )\n  if (!ids.some((id) => ctx.identifiers.has(id))) return\n  wrap(\n    annotations.templateGlobals.start,\n    annotations.templateGlobals.end,\n    () => {\n      ctx.newLine()\n      ids.forEach((id) => {\n        const knownId = ctx.identifiers.get(id)\n        if (knownId == null) return\n        if (\n          !['ref', 'maybeRef', 'externalMaybeRef', 'externalRef'].includes(\n            knownId.kind,\n          )\n        )\n          return\n\n        writeLine(\n          `const ${\n            ctx.internalIdentifierPrefix\n          }_get_identifier_${id} = () => ${getRuntimeFn(\n            ctx.typeIdentifier,\n            'unref',\n          )}(${id});`,\n        )\n      })\n    },\n  )\n  ctx.newLine()\n}\n\nfunction genDirectiveChecks(el: BaseElementNode): void {\n  const directives = el.props.filter(isDirectiveNode).filter((directive) => {\n    return !['on', 'bind', 'text', 'html', 'model'].includes(directive.name)\n  })\n\n  if (directives.length === 0) return\n\n  wrap('{(() => {', '})()}', () =>\n    indent(() => {\n      ctx.newLine()\n      directives.forEach((directive) => {\n        ctx.write(`${getRuntimeFn(ctx.typeIdentifier, 'checkDirective')}(`)\n        ctx.write(\n          directive.resolvedName ?? asConst(JSON.stringify(directive.name)),\n          createLoc(directive.loc, 0, 2 + directive.name.length),\n          true,\n        )\n        ctx.write(', ')\n\n        if (isComponentNode(el)) {\n          ctx.write(\n            el.resolvedName ?? asConst(JSON.stringify(el.tag)),\n            el.tagLoc,\n          )\n        } else {\n          ctx.write(asConst(JSON.stringify(el.tag)), el.tagLoc)\n        }\n        ctx.write(', ')\n\n        if (directive.arg != null) genExpressionNode(directive.arg)\n        else ctx.write('undefined')\n        ctx.write(', ')\n        if (directive.exp != null) genExpressionNode(directive.exp)\n        else ctx.write('undefined')\n        ctx.write(', ')\n        wrap('{ ', ' }', () => {\n          directive.modifiers.forEach((modifier, index) => {\n            if (modifier.trim() === '') return\n            ctx.write(\n              `${JSON.stringify(modifier)}`,\n              directive.modifierLocs[index],\n              true,\n            )\n            ctx.write(': true, ')\n          })\n        })\n        ctx.write(');')\n        ctx.newLine()\n      })\n    }),\n  )\n\n  ctx.newLine() // rendered before element or component, so add a new line\n}\n\nfunction genGlobalDeclarations(node: Node): void {\n  if (node.scope.globals.length === 0) return\n  writeLine(annotations.templateGlobals.start)\n  node.scope.globals.forEach((id) => {\n    const knownId = ctx.identifiers.get(id)\n    if (knownId != null) {\n      if (\n        ['ref', 'maybeRef', 'externalMaybeRef', 'externalRef'].includes(\n          knownId.kind,\n        )\n      ) {\n        writeLine(\n          `let ${id} = ${ctx.internalIdentifierPrefix}_get_identifier_${id}();`,\n        )\n      }\n    } else {\n      writeLine(`let ${id} = ${ctx.contextIdentifier}.${id}`)\n    }\n  })\n  writeLine(annotations.templateGlobals.end)\n}\nfunction genNodeHoists(node: { hoists: CompoundExpressionNode[] }): void {\n  if (node.hoists.length === 0) return\n  writeLine(annotations.templateGlobals.start)\n  node.hoists.forEach((hoist) => {\n    genExpressionNode(hoist)\n    ctx.newLine()\n  })\n  writeLine(annotations.templateGlobals.end)\n}\n\nfunction genElementNode(node: ElementNode): void {\n  genDirectiveChecks(node)\n  ctx.write('<', node.startTagLoc)\n  if (node.tag !== '') {\n    ctx.write(node.tag, node.tagLoc, true).newLine()\n    indent(() => {\n      genProps(node)\n      ctx.write(`${annotations.tsxCompletions}`)\n    })\n    ctx.newLine()\n  } else {\n    return // tag is empty, when only \"<\" is present\n  }\n\n  if (node.isSelfClosing) {\n    ctx.write('/>', node.endTagLoc)\n    return // done\n  }\n  ctx.write('>').newLine()\n  indent(() => genChildren(node))\n  ctx.write('</', node.endTagLoc)\n  ctx.write(node.tag)\n  ctx.write('>')\n}\n\nfunction genComponentNode(node: ComponentNode): void {\n  // if (node.tag.includes('-')) return genElementNode(node) // assume custom element\n  if (node.resolvedName == null) {\n    ctx.write('{(() => {').newLine()\n    indent(() => {\n      const name = `${ctx.internalIdentifierPrefix}component`\n\n      genTypeGuards()\n\n      ctx.newLine()\n\n      ctx.write(\n        `const ${name} = ${getRuntimeFn(\n          ctx.typeIdentifier,\n          'resolveComponent',\n        )}(${\n          ctx.isTypeScript\n            ? `{} as unknown as ${ctx.internalIdentifierPrefix}GlobalComponents`\n            : `/** @type {${ctx.internalIdentifierPrefix}GlobalComponents} */ (/** @type {unknown} */ ({}))`\n        }, ${\n          ctx.isTypeScript\n            ? `{} as unknown as JSX.IntrinsicElements`\n            : `/** @type {JSX.IntrinsicElements} */ (/** @type {unknown} */ ({}))`\n        }, ${ctx.contextIdentifier}, `,\n      )\n\n      if (isAttributeNode(node.is)) {\n        const name = node.is.value?.content ?? ''\n        ctx.write(JSON.stringify(name), node.is.value?.loc, true)\n        ctx.write(', ')\n        ctx.write(JSON.stringify(name), node.is.value?.loc, true)\n        ctx.write(', ')\n        ctx.write(JSON.stringify(pascalCase(name)), node.is.value?.loc, true)\n      } else if (node.is != null && isExpressionNode(node.is.exp)) {\n        genExpressionNode(node.is.exp)\n        ctx.write(', ')\n        genExpressionNode(node.is.exp)\n        ctx.write(', ')\n        genExpressionNode(node.is.exp)\n      } else {\n        ctx.write('undefined, undefined, undefined')\n      }\n      ctx.write(');').newLine()\n\n      writeLine(`if (${name} == null) throw new Error`)\n\n      ctx.write('return (').newLine()\n      indent(() => {\n        node.resolvedName = name\n        genComponentNode(node)\n        node.resolvedName = undefined\n      })\n      ctx.newLine().write(');').newLine()\n    })\n    ctx.write('})()}')\n\n    return // - done\n  }\n\n  genDirectiveChecks(node)\n  ctx.write('<', node.loc)\n  ctx.write(node.resolvedName ?? node.tag, node.tagLoc, true).newLine()\n  indent(() => {\n    genProps(node)\n    ctx.write(`${annotations.tsxCompletions}`)\n  })\n\n  ctx.newLine()\n  if (node.isSelfClosing) {\n    ctx.write('$slots={{}}')\n    ctx.write('/>', node.endTagLoc).newLine()\n    return // done\n  }\n\n  ctx.write('$slots=')\n  indent(() => {\n    wrap('{', '}', () => {\n      ctx.write(`{`)\n      ctx.newLine()\n      indent(() => {\n        node.slots.forEach((slotNode) => {\n          if (slotNode.name == null) {\n            ctx.write(`default`)\n          } else if (isStaticExpression(slotNode.name)) {\n            ctx.write(JSON.stringify(slotNode.name.content), slotNode.name.loc)\n          } else {\n            ctx.write('[')\n            genExpressionNode(slotNode.name)\n            ctx.write(']')\n          }\n          ctx.write(': (')\n          if (slotNode.args != null) {\n            genExpressionNode(slotNode.args)\n          }\n          ctx.write(') => {').newLine()\n          indent(() => {\n            genTypeGuards()\n            genNodeHoists(slotNode)\n            writeLine('return (')\n            indent(() => {\n              writeLine('<>')\n              indent(() => genChildren(slotNode))\n              writeLine('</>')\n            })\n            writeLine(')')\n          })\n          ctx.write('},').newLine()\n        })\n      })\n      ctx.write('}')\n    })\n  })\n  writeLine('>')\n  ctx.newLine()\n  ctx.write('</', node.endTagLoc)\n  ctx.write(node.resolvedName ?? node.tag)\n  ctx.write('>')\n}\n\nfunction genTypeGuards(): void {\n  const value = ctx.setSourceMapMode(false)\n  ctx.typeGuards.forEach((guard) => {\n    if (guard == null) return\n    ctx.write(`if(!(`)\n    genExpressionNode(guard)\n    ctx.write(')) throw new Error;').newLine()\n  })\n  ctx.setSourceMapMode(value)\n}\n\nfunction genSlotOutletNode(node: SlotOutletNode): void {\n  const name = findProp(node, 'name', false, true)\n  const accessor: Array<string | ExpressionNode | TextNode> = ['$slots']\n\n  if (isAttributeNode(name) && name.value != null) {\n    if (isSimpleIdentifier(name.value.content)) {\n      accessor.push(\n        '.',\n        createSimpleExpression(name.value.content, false, name.value.loc),\n      )\n    } else {\n      accessor.push('[', name.value, ']')\n    }\n  } else if (isDirectiveNode(name) && name.arg != null) {\n    if (\n      isSimpleExpressionNode(name.arg) &&\n      isSimpleIdentifier(name.arg.content)\n    ) {\n      accessor.push(\n        '.',\n        createSimpleExpression(name.arg.content, false, name.arg.loc),\n      )\n    } else {\n      accessor.push('[', name.arg, ']')\n    }\n  } else {\n    accessor.push(`.default`)\n  }\n\n  const genSlotAccessor = (): void => {\n    genExpressionNode(createCompoundExpression(accessor))\n  }\n\n  wrap('{', '}', () => {\n    ctx.newLine()\n    indent(() => {\n      genSlotAccessor()\n      ctx.write(' != null ? ')\n      genSlotAccessor()\n      ctx.write('({')\n      const props = node.props.filter((node) => node !== name)\n      if (props.length > 0) {\n        indent(() => {\n          ctx.newLine()\n          props.forEach((prop) => {\n            genObjectProperty(prop)\n          })\n        })\n      }\n      ctx.write('})')\n    })\n    ctx.write(' : ')\n    if (node.children.length > 0) {\n      ctx.typeGuards.push(createCompoundExpression([...accessor, ' == null']))\n      indent(() => {\n        wrap('(', ')', () => {\n          ctx.newLine()\n          indent(() => {\n            wrap('<>', '</>', () => {\n              ctx.newLine()\n              indent(() => genChildren(node))\n            })\n          })\n          ctx.newLine()\n        })\n        ctx.newLine()\n      })\n      ctx.typeGuards.pop()\n    } else {\n      ctx.write('null')\n    }\n    ctx.newLine()\n  })\n}\n\nfunction genChildren(node: { children: Node[] }): void {\n  node.children.forEach((node) => {\n    if (isTextNode(node)) {\n      ctx.write('{')\n      genTextNode(node)\n      ctx.write('}')\n      ctx.newLine()\n    } else {\n      genNode(node)\n      ctx.newLine()\n    }\n  })\n}\n\nfunction genProps(el: ElementNode | ComponentNode): void {\n  if (el.props.length === 0) return\n\n  const rendered = new Set<DirectiveNode>()\n  const directives = el.props.filter(isDirectiveNode)\n  el.props.forEach((prop) => {\n    if (isAttributeNode(prop)) {\n      genAttribute(prop, el)\n      ctx.newLine()\n    } else if (rendered.has(prop)) {\n      // already rendered\n    } else if (prop.name === 'bind') {\n      genVBindDirective(prop, el)\n      ctx.newLine()\n    } else if (prop.name === 'on') {\n      if (prop.arg == null) {\n        if (prop.exp == null) {\n          ctx.write('on', prop.loc, true)\n        } else {\n          ctx.write('{...(')\n          genExpressionNode(prop.exp)\n          ctx.write(')}')\n        }\n      } else {\n        invariant(isSimpleExpressionNode(prop.arg))\n        const id = prop.arg.content\n        const all = directives.filter(\n          (directive) =>\n            directive.name === 'on' &&\n            isSimpleExpressionNode(directive.arg) &&\n            directive.arg.content === id,\n        )\n\n        const genHandler = (): void => {\n          if (isPlainElementNode(el)) {\n            ctx.typeGuards.push(\n              createCompoundExpression([\n                `$event.currentTarget instanceof `,\n                getClassNameForTagName(el.tag),\n              ]),\n            )\n          }\n\n          ctx.write(`${getRuntimeFn(ctx.typeIdentifier, 'first')}([`).newLine()\n          indent(() => {\n            all.forEach((directive) => {\n              rendered.add(directive)\n\n              if (directive.exp != null) {\n                genExpressionNodeAsFunction(directive.exp)\n              } else {\n                ctx.write(annotations.missingExpression, directive.loc)\n              }\n              ctx.write(', ')\n              ctx.newLine()\n            })\n          })\n          ctx.write('])')\n          if (isPlainElementNode(el)) {\n            ctx.typeGuards.pop()\n          }\n        }\n\n        if (isStaticExpression(prop.arg)) {\n          ctx.write(`on${capitalize(prop.arg.content)}`, prop.arg.loc, true)\n          ctx.write('=')\n          wrap('{', '}', genHandler)\n        } else {\n          ctx.write('{...({')\n          ctx.write('[')\n          genExpressionNode(prop.arg) // TODO: Capitalize\n          ctx.write(']: ')\n          genHandler()\n          ctx.write('})}')\n        }\n      }\n      ctx.newLine()\n    } else if (prop.name === 'text' || prop.name === 'html') {\n      ctx.write('innerHTML', createLoc(prop.loc, 2, 4), true).write('=')\n      wrap('{', '}', () => {\n        if (prop.exp != null) {\n          genExpressionNode(prop.exp)\n        } else {\n          ctx.write(annotations.missingExpression)\n        }\n      })\n      ctx.newLine()\n    } else if (prop.name === 'model') {\n      const genExp = (): void => {\n        if (prop.exp != null) {\n          genExpressionNode(prop.exp)\n        } else {\n          ctx.write(annotations.missingExpression, sliceLoc(prop.loc, -1))\n        }\n      }\n      if (prop.arg == null) {\n        // TODO: get attribute name at runtime\n        let isCheckbox = false\n        if (['input', 'select', 'textarea'].includes(el.tag)) {\n          const type = findProp(el, 'type')\n          if (\n            isAttributeNode(type) &&\n            (type.value?.content === 'checkbox' ||\n              type.value?.content === 'radio')\n          ) {\n            isCheckbox = true\n            ctx.write('checked', prop.nameLoc, true)\n          } else {\n            ctx.write('value', prop.nameLoc, true)\n          }\n        } else {\n          ctx.write('modelValue', prop.nameLoc, true)\n        }\n\n        ctx.write('={')\n        genExp()\n        if (isCheckbox) {\n          const value = findProp(el, 'value')\n          if (isAttributeNode(value)) {\n            ctx.write(' === ')\n            if (value.value != null) {\n              genTextNode(value.value)\n            } else {\n              ctx.write('undefined', value.loc)\n            }\n          } else if (isDirectiveNode(value)) {\n            ctx.write(' === ')\n            if (value.exp != null) {\n              genExpressionNode(value.exp)\n            } else {\n              ctx.write('undefined', value.loc)\n            }\n          }\n        }\n        ctx.write('}')\n      } else if (isStaticExpression(prop.arg)) {\n        ctx.write(prop.arg.content, prop.arg.loc)\n        ctx.write('={')\n        genExp()\n        ctx.write('}')\n      } else {\n        ctx.write('{...({')\n        genExpressionNode(prop.arg)\n        ctx.write(': ')\n        genExp()\n        ctx.write('})}')\n      }\n      ctx.newLine()\n    }\n  })\n}\n\nfunction genAttribute(\n  attribute: AttributeNode,\n  element: ElementNode | CommentNode,\n): void {\n  if (attribute.name === 'class' || attribute.name === 'style') return // TODO: handle class and style eventually\n  const name =\n    isPlainElementNode(element) ||\n    attribute.name.startsWith('data-') ||\n    attribute.name.startsWith('aria-')\n      ? attribute.name\n      : camelize(attribute.name)\n  ctx.write(name, attribute.nameLoc, true)\n  if (attribute.value != null) {\n    ctx.write('=')\n    genTextNode(attribute.value)\n  }\n}\n\nfunction genVBindDirective(\n  prop: DirectiveNode,\n  element: ElementNode | CommentNode,\n): void {\n  if (isStaticExpression(prop.arg)) {\n    const name =\n      isPlainElementNode(element) ||\n      prop.arg.content.startsWith('data-') ||\n      prop.arg.content.startsWith('aria-')\n        ? prop.arg.content\n        : camelize(prop.arg.content)\n    ctx.write(name, prop.arg.loc, true)\n    if (prop.exp != null) {\n      ctx.write('=')\n      ctx.write('{')\n      genExpressionNode(prop.exp)\n      ctx.write('}')\n    }\n  } else if (prop.arg != null) {\n    ctx.write('{...({[')\n    genExpressionNode(prop.arg)\n    ctx.write(']')\n    if (prop.exp != null) {\n      ctx.write(': ')\n      genExpressionNode(prop.exp)\n    } else {\n      ctx.write(': true')\n    }\n    ctx.write('})}')\n  } else if (prop.exp == null) {\n    ctx.write(' ', prop.loc)\n  } else {\n    ctx.write('{...(')\n    if (prop.exp != null) {\n      genExpressionNode(prop.exp)\n    } else {\n      ctx.write(' ', createLoc(prop.loc, prop.loc.source.length))\n    }\n    ctx.write(')}')\n  }\n}\n\nfunction genTextNode(node: TextNode): void {\n  ctx.write(JSON.stringify(node.content), node.loc, true)\n}\n\nfunction genInterpolationNode(node: InterpolationNode): void {\n  ctx.write(' {', node.loc)\n  genExpressionNode(node.content)\n  ctx.write('} ', sliceLoc(node.loc, -2))\n}\n\nfunction genExpressionNode(node: ExpressionNode): void {\n  if (isSimpleExpressionNode(node)) {\n    if (isStaticExpression(node)) {\n      ctx.write(JSON.stringify(node.content), node.loc, true)\n    } else {\n      genSimpleExpressionNode(node)\n    }\n  } else {\n    genCompoundExpressionNode(node)\n  }\n}\n\nfunction genExpressionNodeAsFunction(node: ExpressionNode): void {\n  invariant(\n    isSimpleExpressionNode(node),\n    'v-on directive expression must be simple.',\n  )\n\n  if (\n    // is identifier?\n    isSimpleIdentifier(node.content) ||\n    // is arrow function expression?\n    /^(\\([^)]*\\)|[A-Za-z$_][A-Za-z0-9$_]*)\\s*=>/i.test(node.content.trim()) ||\n    // is function expression?\n    /^function[\\s(]/.test(node.content.trim())\n  ) {\n    genSimpleExpressionNode(node)\n  } else {\n    node.content.includes('$event')\n      ? ctx.write('($event) => {').newLine()\n      : ctx.write('() => {').newLine()\n    genTypeGuards()\n    genSimpleExpressionNode(node)\n    ctx.newLine().write('}')\n  }\n}\n\nfunction genSimpleExpressionNode(node: SimpleExpressionNode): void {\n  ctx.write(node.content, node.loc, true)\n}\n\nfunction genCompoundExpressionNode(node: CompoundExpressionNode): void {\n  node.children.forEach((node) => {\n    if (typeof node === 'string') {\n      ctx.write(node)\n    } else if (typeof node === 'symbol') {\n      throw new Error('Unsupported symbol node')\n    } else {\n      genNode(node)\n    }\n  })\n}\n\nfunction createGenerateContext(options: NodeTransformContext): GenerateContext {\n  let indent = 0\n  let output = ''\n  let line = 0\n  let column = 0\n  const names: string[] = []\n  const mappings: DecodedSourceMap['mappings'] = [[]]\n  let shouldIndent = false\n  let shouldWriteMapping = true\n\n  const nl = '\\n'\n\n  function push(\n    chunk: string,\n    loc?: SourceLocation,\n    addMappingType: boolean = false,\n  ): void {\n    output += chunk\n    const lines = chunk.split(nl)\n    if (loc != null && shouldWriteMapping) {\n      let index: number | null = null\n      if (addMappingType) {\n        const name = loc.source.startsWith(chunk)\n          ? `<<P>>${chunk.length}`\n          : loc.source.endsWith(chunk)\n          ? `<<S>>${loc.source.length}|${chunk.length}`\n          : `<<T>>${loc.source.length}|${chunk.length}`\n        index = names.indexOf(name)\n        if (index === -1) {\n          index = names.push(name) - 1\n        }\n      }\n      mappings[line]?.push(\n        index != null\n          ? [column, 0, loc.start.line - 1, loc.start.column - 1, index]\n          : [column, 0, loc.start.line - 1, loc.start.column - 1],\n      )\n    } else {\n      mappings[line]?.push([column])\n    }\n    if (lines.length > 1) {\n      line += lines.length - 1\n      column = last(lines).length\n    } else {\n      column += chunk.length\n    }\n\n    for (let i = mappings.length; i <= line; i++) {\n      mappings.push([])\n    }\n  }\n\n  const context: GenerateContext = {\n    ...options,\n    typeGuards: [],\n    setSourceMapMode(enabled) {\n      const current = shouldWriteMapping\n      shouldWriteMapping = enabled\n      return current\n    },\n    write(code, loc, addMappingType) {\n      if (shouldIndent) {\n        shouldIndent = false\n        push(' '.repeat(indent))\n      }\n\n      push(code, loc, addMappingType)\n\n      return context\n    },\n    newLine() {\n      push(nl)\n      shouldIndent = true\n\n      return context\n    },\n    indent() {\n      indent = Math.max(0, indent) + 2\n      return context\n    },\n    deindent() {\n      indent = Math.max(0, indent - 2)\n      return context\n    },\n    getOutput() {\n      return {\n        code: output,\n        map: {\n          file: options.fileName,\n          sources: [],\n          sourcesContent: [],\n          names,\n          mappings,\n        },\n      }\n    },\n  }\n\n  return context\n}\n\nfunction isStaticExpression(node?: Node): node is SimpleExpressionNode {\n  return isSimpleExpressionNode(node) && node.isStatic\n}\n\nfunction genSlotTypes(root: RootNode): void {\n  const slots: Array<[ElementNode, TraversalAncestors]> = []\n  const value = ctx.setSourceMapMode(false)\n  traverse(root, (node, ancestors) => {\n    if (isSlotNode(node)) {\n      slots.push([node, ancestors.slice()])\n    }\n  })\n\n  writeLine(annotations.diagnosticsIgnore.start)\n  ctx.write(`function ${ctx.internalIdentifierPrefix}_slots() {`).newLine()\n  indent(() => {\n    genGlobalDeclarations(root)\n    ctx\n      .write(\n        `return ${getRuntimeFn(ctx.typeIdentifier, 'union')}(...${getRuntimeFn(\n          ctx.typeIdentifier,\n          'flat',\n        )}([`,\n      )\n      .newLine()\n    indent(() => {\n      for (const [slot, ancestors] of slots) {\n        recurse(\n          ancestors.slice().map((path) => path.node),\n          {\n            enter(node, index, nodes) {\n              if (isForNode(node)) {\n                ctx.write(getRuntimeFn(ctx.typeIdentifier, 'flat'))\n                ctx.write('(')\n                ctx.newLine().indent()\n                ctx.write(getRuntimeFn(ctx.typeIdentifier, 'renderList'))\n                ctx.write('(')\n                genForNodeArgs(node)\n                ctx.write(' => (')\n                ctx.newLine().indent()\n              } else if (isComponentNode(node)) {\n                ctx.write(getRuntimeFn(ctx.typeIdentifier, 'flat'))\n                const next = nodes[index + 1]\n                const currentSlot =\n                  next != null\n                    ? node.slots.find((slot) => slot.template === next)\n                    : null\n\n                ctx.write('(((')\n                if (currentSlot?.args != null) {\n                  genExpressionNode(currentSlot.args)\n                } else {\n                  ctx.write('_')\n                }\n\n                if (ctx.isTypeScript) {\n                  ctx.write(`: ${ctx.typeIdentifier}.internal.GetSlotProps<`)\n                  if (node.resolvedName != null) {\n                    ctx.write('typeof ')\n                    ctx.write(node.resolvedName)\n                  } else if (node.is != null) {\n                    if (isDirectiveNode(node.is) && node.is.exp != null) {\n                      ctx.write('typeof ')\n                      genExpressionNode(node.is.exp)\n                    } else {\n                      ctx.write('{}')\n                    }\n                  } else {\n                    ctx.write('{}')\n                  }\n\n                  ctx.write(', ')\n\n                  if (currentSlot?.name != null) {\n                    if (!isStaticExpression(currentSlot.name)) {\n                      ctx.write('typeof ')\n                    }\n                    genExpressionNode(currentSlot.name)\n                  } else {\n                    ctx.write('\"default\"')\n                  }\n                  ctx.write('>')\n                }\n\n                ctx.write(') => {')\n                ctx.newLine().indent()\n                ctx.write('return [')\n                ctx.newLine().indent()\n              }\n            },\n            exit(node) {\n              if (isComponentNode(node)) {\n                ctx.deindent().newLine()\n                ctx.write(']')\n                ctx.deindent().newLine()\n                ctx.write(`})(${typeCastAs('null', 'any')}))`)\n              } else if (isForNode(node)) {\n                ctx.deindent().newLine()\n                ctx.write('))')\n                ctx.deindent().newLine()\n                ctx.write(')')\n              }\n            },\n            fn() {\n              const name = findProp(slot, 'name', false, true)\n              ctx\n                .write(getRuntimeFn(ctx.typeIdentifier, 'record'))\n                .write('(')\n                .newLine()\n              indent(() => {\n                if (isAttributeNode(name)) {\n                  if (name.value != null) {\n                    ctx.write(JSON.stringify(name.value.content))\n                  } else {\n                    ctx.write('undefined')\n                  }\n                } else if (isDirectiveNode(name)) {\n                  if (name.exp != null) {\n                    genExpressionNode(name.exp)\n                  } else {\n                    ctx.write('undefined')\n                  }\n                } else {\n                  ctx.write('\"default\" as const')\n                }\n                ctx.write(', ')\n                ctx.write('{')\n                indent(() => {\n                  const props = slot.props.filter((prop) => prop !== name)\n                  if (props.length === 0) return\n                  ctx.newLine()\n                  slot.props.forEach((prop) => {\n                    if (prop === name) return\n                    genObjectProperty(prop)\n                  })\n                })\n                ctx.write('},').newLine()\n              })\n              ctx.write(')')\n            },\n          },\n        )\n        ctx.write(',').newLine()\n      }\n    })\n    ctx.write(']))').newLine()\n  })\n  ctx.write('}').newLine()\n  writeLine(annotations.diagnosticsIgnore.end)\n  ctx.setSourceMapMode(value)\n}\n\nfunction genObjectProperty(\n  prop: AttributeNode | DirectiveNode,\n  newLine = true,\n): void {\n  if (isAttributeNode(prop)) {\n    breakMapping(prop.loc)\n    ctx.write(prop.name, prop.nameLoc, true).write(': ')\n    if (prop.value != null) {\n      genTextNode(prop.value)\n    } else {\n      ctx.write('true')\n    }\n    ctx.write(',')\n    if (newLine) ctx.newLine()\n  } else if (prop.name !== 'bind') {\n    // not supported\n  } else if (prop.arg != null) {\n    breakMapping(prop.loc)\n    if (isStaticExpression(prop.arg)) {\n      if (/^[a-zA-Z_$0-9]+$/.test(prop.arg.content)) {\n        ctx.write(prop.arg.content, prop.arg.loc, true)\n      } else {\n        ctx.write(JSON.stringify(prop.arg.content), prop.arg.loc, true)\n      }\n    } else {\n      ctx.write('[', prop.loc)\n      genExpressionNode(prop.arg)\n      ctx.write(']')\n    }\n\n    ctx.write(': ')\n    if (prop.exp != null) {\n      genExpressionNode(prop.exp)\n    } else {\n      ctx.write('true')\n    }\n    ctx.write(',')\n    if (newLine) ctx.newLine()\n  } else if (prop.exp != null) {\n    ctx.write('...(', prop.loc)\n    genExpressionNode(prop.exp)\n    ctx.write(')')\n    ctx.write(',')\n    if (newLine) ctx.newLine()\n  }\n}\n\nfunction recurse<T>(\n  items: T[],\n  options: {\n    enter?(node: T, index: number, nodes: T[]): void\n    exit?(node: T, index: number, nodes: T[]): void\n    fn(): void\n  },\n): void {\n  if (options.enter != null) {\n    for (let i = 0; i < items.length; i++) {\n      options.enter(items[i] as T, i, items)\n    }\n  }\n  options.fn()\n  if (options.exit != null) {\n    for (let i = items.length - 1; i >= 0; i--) {\n      options.exit(items[i] as T, i, items)\n    }\n  }\n}\n\n// function isIfNode(node: Node): node is IfNode {\n//   return node.type === NodeTypes.IF\n// }\n\nfunction isForNode(node: Node): node is ForNode {\n  return node.type === NodeTypes.FOR\n}\n\nfunction genForNodeArgs(node: ForNode): void {\n  const context = ctx\n  const forExps = node.parseResult\n  // Source\n  if (isSimpleExpressionNode(forExps.source)) {\n    const quote = !isSimpleIdentifier(forExps.source.content)\n    if (quote) context.write('(')\n    context.write(forExps.source.content, forExps.source.loc, true)\n    if (quote) context.write(')')\n  } else {\n    context.write('undefined')\n  }\n  context.write(', ')\n\n  // Handler Args\n  context.write('(')\n  const args = ['_', '__']\n  if (isSimpleExpressionNode(forExps.value)) {\n    context.write(forExps.value.content, forExps.value.loc, true)\n  } else if (forExps.key != null || forExps.index != null) {\n    context.write(args.pop() ?? '_')\n  }\n\n  if (isSimpleExpressionNode(forExps.key)) {\n    context.write(', ')\n    context.write(forExps.key.content, forExps.key.loc, true)\n  } else if (forExps.index != null) {\n    context.write(', ')\n    context.write(args.pop() ?? '_')\n  }\n\n  if (isSimpleExpressionNode(forExps.index)) {\n    context.write(', ')\n    context.write(forExps.index.content, forExps.index.loc, true)\n  }\n  context.write(')')\n}\n\nfunction genCommentNode(node: CommentNode): void {\n  ctx.write('{/*').write(node.content, node.loc).write('*/}')\n}\n\nfunction genForNode(forNode: ForNode): void {\n  wrap('{', '}', () => {\n    ctx.newLine()\n    indent(() => {\n      genFn(getRuntimeFn(ctx.typeIdentifier, 'renderList'), () => {\n        genForNodeArgs(forNode)\n        ctx.write(' => {').newLine()\n        indent(() => {\n          genNodeHoists(forNode)\n          wrap('return (', ')', () => {\n            if (forNode.children.length === 1) {\n              ctx.newLine()\n              indent(() => genChildren(forNode))\n            } else {\n              wrap('<>', '</>', () => {\n                ctx.newLine()\n                indent(() => genChildren(forNode))\n              })\n            }\n          })\n        })\n        ctx.newLine().write('}')\n      })\n    })\n    ctx.newLine()\n  })\n}\n\nfunction genFn(name: string, fn: () => void): void {\n  wrap(`${name}(`, ')', fn)\n}\n\nfunction wrap(open: string, close: string, fn: () => void): void {\n  ctx.write(open)\n  fn()\n  ctx.write(close)\n}\n\nfunction genIfNode(node: IfNode): void {\n  wrap('{', '}', () => {\n    let i = 0\n    let hasElse = false\n    const n = node.branches.length - 1\n    recurse(node.branches, {\n      enter(branch) {\n        ctx.typeGuards.push(branch.condition)\n        if (i > 0) indent(() => ctx.write(': '))\n        if (branch.condition != null) {\n          genExpressionNode(branch.condition)\n          ctx.newLine()\n          indent(() => ctx.write('? '))\n        } else if (i < n) {\n          ctx.write(annotations.missingExpression, node.loc).newLine()\n          ctx.newLine()\n          indent(() => ctx.write('? '))\n        } else {\n          hasElse = true\n        }\n        ++i\n        indent(() => {\n          indent(() => {\n            wrap('<>', '</>', () => {\n              ctx.newLine()\n              indent(() => genChildren(branch))\n            })\n          })\n        })\n        ctx.newLine()\n      },\n      exit() {\n        ctx.typeGuards.pop()\n      },\n      fn() {\n        if (!hasElse) {\n          ctx.write('  : null').newLine()\n        }\n      },\n    })\n  })\n}\n\nfunction genTemplateNode(node: TemplateNode): void {\n  wrap('<>', '</>', () => {\n    ctx.newLine()\n    indent(() => genChildren(node))\n  })\n}\n\nfunction breakMapping(loc: SourceLocation): void {\n  // Break mapping\n  ctx.deindent()\n  ctx.write('  ', loc)\n  ctx.indent()\n}\n\nfunction asConst(value: string): string {\n  return typeCastAs(value, 'const')\n}\n\nfunction typeCastAs(value: string, type: string): string {\n  return ctx.isTypeScript\n    ? `${value} as ${type}`\n    : `/** @type {${type}} */ (${value})`\n}\n\nfunction genAttrTypes(root: RootNode): void {\n  const value = ctx.setSourceMapMode(false)\n  // TODO: Support components.\n  const nodes: PlainElementNode[] = []\n\n  if (root.loc.source.includes('@vue-attrs-target')) {\n    traverse(root, {\n      enter(node, ancestors) {\n        if (isCommentNode(node)) {\n          if (node.content.includes('@vue-attrs-target')) {\n            const { node: parent, key, index } = last(ancestors)\n            if (index != null) {\n              const el = (\n                parent[key as keyof typeof parent] as unknown as Node[]\n              )?.[index + 1]\n\n              if (isPlainElementNode(el)) {\n                nodes.push(el)\n              }\n            }\n          }\n        }\n      },\n    })\n  } else {\n    traverseEvery(root, (node, ancestors) => {\n      if (isPlainElementNode(node)) {\n        const { node: parent } = last(ancestors)\n        if (isRootNode(parent)) {\n          if (parent.children.filter(isPlainElementNode).length === 1) {\n            nodes.push(node)\n          }\n        } else {\n          nodes.push(node)\n        }\n      } else if (isTemplateNode(node) || isRootNode(node)) {\n        return true\n      } else if (\n        node.type === NodeTypes.IF ||\n        node.type === NodeTypes.IF_BRANCH ||\n        node.type === NodeTypes.FOR\n      ) {\n        return true\n      }\n\n      return false\n    })\n  }\n\n  ctx.write(`const ${ctx.internalIdentifierPrefix}_attrs = (() => {`).newLine()\n  indent(() => {\n    const value = typeCastAs('{}', 'unknown')\n    ctx.write('return ')\n\n    ctx.write(getRuntimeFn(ctx.typeIdentifier, 'first'))\n    ctx.write('(')\n    ctx.write(getRuntimeFn(ctx.typeIdentifier, 'flat'))\n    ctx.write('([')\n\n    if (nodes.length > 0) {\n      indent(() => {\n        ctx.newLine()\n        for (const node of nodes) {\n          const type = JSON.stringify(node.tag)\n          ctx.write(\n            typeCastAs(\n              value,\n              `${ctx.typeIdentifier}.internal.PropsOf<JSX.IntrinsicElements, ${type}>`,\n            ),\n          )\n          ctx.write(',')\n          ctx.newLine()\n        }\n      })\n    } else {\n      ctx.write('{}')\n    }\n\n    ctx.write(']))')\n    ctx.newLine()\n  })\n\n  ctx.write('})();').newLine()\n  ctx.setSourceMapMode(value)\n}\n", "import type { SFCBlock } from '@vuedx/compiler-sfc'\nimport type { TransformedCode } from '../../types/TransformedCode'\nimport type { TransformOptionsResolved } from '../../types/TransformOptions'\n\nexport interface CustomBlockTransformResult extends TransformedCode {\n  decoratorIdentifier?: string\n}\n\nexport function transformCustomBlock(\n  _block: SFCBlock,\n  options: TransformOptionsResolved,\n): CustomBlockTransformResult {\n  return {\n    code: '',\n    map: {\n      file: options.fileName,\n      sources: [],\n      names: [],\n      mappings: [],\n      sourcesContent: [],\n    },\n  }\n}\n", "import type { SFCScriptBlock } from '@vuedx/compiler-sfc'\nimport { invariant } from '@vuedx/shared'\nimport {\n  transformScript as transform,\n  type KnownIdentifier,\n} from '@vuedx/transforms'\nimport type { TransformedCode } from '../../types/TransformedCode'\nimport type { TransformOptionsResolved } from '../../types/TransformOptions'\n\nexport interface ScriptBlockTransformResult extends TransformedCode {\n  exportIdentifier: string\n  name: string\n  inheritAttrs: boolean\n  identifiers: KnownIdentifier[]\n}\nexport function transformScript(\n  script: SFCScriptBlock | null,\n  options: TransformOptionsResolved,\n): ScriptBlockTransformResult {\n  const content = script?.content ?? ''\n\n  const result = transform(content, {\n    internalIdentifierPrefix: options.internalIdentifierPrefix,\n    runtimeModuleName: options.runtimeModuleName,\n    typeIdentifier: options.typeIdentifier,\n    lang: (script?.lang ?? 'ts') as any,\n    fileName: options.fileName,\n    lib: options.typescript,\n    cache: options.cache,\n  })\n\n  invariant(result.map != null)\n\n  return {\n    code: result.code,\n    map: result.map,\n    identifiers: result.identifiers,\n    exportIdentifier: result.componentIdentifier,\n    name: result.name,\n    inheritAttrs: result.inheritAttrs,\n  }\n}\n", "import type { SFCScriptBlock } from '@vuedx/compiler-sfc'\nimport { invariant } from '@vuedx/shared'\nimport {\n  transformScriptSetup as transform,\n  type KnownIdentifier,\n} from '@vuedx/transforms'\nimport type { TransformedCode } from '../../types/TransformedCode'\nimport type { TransformOptionsResolved } from '../../types/TransformOptions'\n\nexport interface ScriptSetupBlockTransformResult extends TransformedCode {\n  /** private component */\n  exportIdentifier: string\n  /** public component */\n  componentIdentifier: string\n  scopeIdentifier: string\n  identifiers: KnownIdentifier[]\n  exports: Record<string, string>\n}\n\nexport function transformScriptSetup(\n  script: SFCScriptBlock | null,\n  options: TransformOptionsResolved,\n): ScriptSetupBlockTransformResult {\n  const content = script?.content ?? ''\n  const generic = script?.attrs?.['generic']\n  const result = transform(content, {\n    internalIdentifierPrefix: options.internalIdentifierPrefix,\n    runtimeModuleName: options.runtimeModuleName,\n    typeIdentifier: options.typeIdentifier,\n    lang: (script?.lang ?? 'ts') as any,\n    fileName: options.fileName,\n    lib: options.typescript,\n    cache: options.cache,\n    attrsIdentifier: `${options.internalIdentifierPrefix}_attrs`,\n    slotsIdentifier: `${options.internalIdentifierPrefix}_slots`,\n    generic: typeof generic === 'string' ? generic : undefined,\n  })\n\n  invariant(result.map != null)\n\n  return {\n    code: result.code,\n    map: result.map,\n    identifiers: result.identifiers,\n    exportIdentifier: result.privateComponentIdentifier,\n    componentIdentifier: result.publicComponentIdentifier,\n    scopeIdentifier: result.scopeIdentifier,\n    exports: result.exports,\n  }\n}\n", "import type { SFCStyleBlock } from '@vuedx/compiler-sfc'\nimport type { TransformedCode } from '../../types/TransformedCode'\nimport type { TransformOptionsResolved } from '../../types/TransformOptions'\n\nexport interface StyleBlockTransformResult extends TransformedCode {}\n\nexport function transformStyle(\n  _style: SFCStyleBlock,\n  options: TransformOptionsResolved,\n): StyleBlockTransformResult {\n  return {\n    code: '',\n    map: {\n      file: options.fileName,\n      sources: [],\n      names: [],\n      mappings: [],\n      sourcesContent: [],\n    },\n  }\n}\n", "import {\n  createStructuralDirectiveTransform,\n  NodeTransform,\n  processFor,\n} from '@vue/compiler-core'\nimport type { NodeTransformContext } from '../types/NodeTransformContext'\n\nexport const forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/\nexport function createTransformFor(\n  customContext: NodeTransformContext,\n): NodeTransform {\n  return createStructuralDirectiveTransform(/^for$/, (node, dir, context) => {\n    return processFor(node, dir, context, (forNode) => {\n      customContext.scope.createNewHoistScope()\n      return () => {\n        forNode.hoists = customContext.scope.popHoistScope()\n      }\n    })\n  })\n}\n", "import { parse, parseExpression } from '@babel/parser'\nimport {\n  Expression,\n  File,\n  Identifier,\n  isArrayPattern,\n  isArrowFunctionExpression,\n  isAssignmentPattern,\n  isCallExpression,\n  isClassDeclaration,\n  isDeclaration,\n  isDeclareClass,\n  isDeclareFunction,\n  isDeclareVariable,\n  isEnumDeclaration,\n  isExpression,\n  isFile,\n  isFunction,\n  isFunctionDeclaration,\n  isIdentifier,\n  isImportDeclaration,\n  isImportSpecifier,\n  isMemberExpression,\n  isObjectMember,\n  isObjectPattern,\n  isOptionalMemberExpression,\n  isPrivateName,\n  isRestElement,\n  isVariableDeclaration,\n  LVal,\n  Node as BabelNode,\n  ObjectMember,\n  PatternLike,\n  traverse as traverseBabel,\n} from '@babel/types'\nimport { isSimpleIdentifier, Node, RootNode } from '@vue/compiler-core'\nimport { flatten, invariant, isCamelCase, isPascalCase } from '@vuedx/shared'\nimport {\n  isDirectiveNode,\n  isElementNode,\n  isSimpleExpressionNode,\n  traverse,\n} from '@vuedx/template-ast-types'\nimport { forAliasRE } from '../transforms/transformFor'\n\nexport class Scope {\n  public readonly bindings: Record<string, Node | null> = {}\n\n  public constructor(public readonly parent: Scope | null = null) {}\n\n  public get identifiers(): string[] {\n    return Array.from(Object.keys(this.bindings))\n  }\n\n  public get globals(): string[] {\n    return this.identifiers.filter(\n      (identifier) => this.getBinding(identifier) === null,\n    )\n  }\n\n  public getBinding(identifier: string): null | Node {\n    if (identifier in this.bindings) return this.bindings[identifier] ?? null\n    if (this.parent != null) {\n      return (this.bindings[identifier] = this.parent.getBinding(identifier))\n    } else {\n      this.bindings[identifier] = null\n    }\n\n    return null\n  }\n\n  public setBinding(identifier: string, node: Node): void {\n    this.bindings[identifier] = node\n  }\n}\n\nexport function withScope(ast: RootNode): RootNode {\n  ast.scope = new Scope(null)\n\n  traverse(ast, (node, ancestors) => {\n    const parent = (ancestors[ancestors.length - 1]?.node ?? ast) as any\n    const scope = (node.scope = node.scope ?? new Scope(parent.scope))\n\n    if (isSimpleExpressionNode(node) && !node.isStatic) {\n      if (\n        parent != null ||\n        !(\n          isDirectiveNode(parent) &&\n          ['slot', 'for'].includes(parent.name) &&\n          parent.exp === node\n        )\n      ) {\n        const isOnDirective = isDirectiveNode(parent) && parent.name === 'on'\n        getIdentifiers(node.content).forEach((identifier) => {\n          if (isOnDirective && identifier === '$event') return\n          scope.getBinding(identifier)\n        })\n      }\n    } else if (isElementNode(node)) {\n      node.props.forEach((prop) => {\n        if (isDirectiveNode(prop)) {\n          const directiveScope = (prop.scope = prop.scope ?? new Scope(scope))\n          if (prop.name === 'slot') {\n            if (isSimpleExpressionNode(prop.exp)) {\n              const localScope = (prop.exp.scope = new Scope(directiveScope))\n              const content = prop.exp.content.trim()\n\n              getIdentifiers(`(${content}) => {}`, false).forEach(\n                (identifier) => {\n                  scope.setBinding(identifier, node)\n                  localScope.getBinding(identifier)\n                },\n              )\n            }\n          } else if (prop.name === 'for') {\n            if (isSimpleExpressionNode(prop.exp)) {\n              const localScope = (prop.exp.scope = new Scope(directiveScope))\n              const match = forAliasRE.exec(prop.exp.content)\n              if (match != null) {\n                const [, LHS, RHS] = match\n                invariant(LHS != null && RHS != null)\n                getIdentifiers(RHS).forEach((identifier) => {\n                  localScope.getBinding(identifier)\n                })\n\n                getIdentifiers(`${LHS ?? '()'} => {}`, false).forEach(\n                  (identifier) => {\n                    scope.setBinding(identifier, node)\n                    localScope.getBinding(identifier)\n                  },\n                )\n              }\n            }\n          }\n        }\n      })\n    }\n  })\n\n  return ast\n}\n\n/**\n * @internal\n */\nexport function getTopLevelIdentifiers(\n  source: string,\n  ignoreImportsFrom: string[],\n): {\n  identifiers: Set<string>\n  components: Set<string>\n  directives: Set<string>\n  propsIdentifier: string | undefined\n  emitIdentifier: string | undefined\n} {\n  const identifiers = new Set<string>()\n  const components = new Set<string>()\n  const directives = new Set<string>()\n  let propsIdentifier: string | undefined\n  let emitIdentifier: string | undefined\n  let definePropsIdentifierFn: string | undefined\n  let defineEmitIdentifierFn: string | undefined\n  const ignoredSources = new Set(ignoreImportsFrom)\n  try {\n    const ast = parseUsingBabel(source, true)\n\n    const getIdentifiers = (node: LVal): string[] => {\n      if (isIdentifier(node)) return [node.name]\n      else if (isMemberExpression(node)) {\n        if (isIdentifier(node.property)) {\n          return [node.property.name]\n        } else if (isExpression(node.property)) {\n          return []\n        } else if (isPrivateName(node.property)) {\n          return [node.property.id.name]\n        } else {\n          return []\n        }\n      } else if (isRestElement(node)) {\n        return getIdentifiers(node.argument)\n      } else if (isAssignmentPattern(node)) {\n        return getIdentifiers(node.left)\n      } else if (isArrayPattern(node)) {\n        return flatten(\n          node.elements\n            .filter((element): element is PatternLike => element != null)\n            .map((element) => getIdentifiers(element)),\n        )\n      } else if (isObjectPattern(node)) {\n        return flatten(\n          node.properties.map((property) => {\n            if (isRestElement(property) || isIdentifier(property)) {\n              return getIdentifiers(property)\n            } else {\n              return []\n            }\n          }),\n        )\n      } else {\n        return []\n      }\n    }\n\n    if (isFile(ast)) {\n      ast.program.body.forEach((node) => {\n        if (!isDeclaration(node)) return\n        if (isVariableDeclaration(node)) {\n          node.declarations.forEach((declaration) => {\n            getIdentifiers(declaration.id).forEach((name) =>\n              identifiers.add(name),\n            )\n\n            if (\n              isIdentifier(declaration.id) &&\n              isCallExpression(declaration.init)\n            ) {\n              if (isIdentifier(declaration.init.callee)) {\n                if (declaration.init.callee.name === definePropsIdentifierFn) {\n                  propsIdentifier = declaration.id.name\n                } else if (\n                  declaration.init.callee.name === defineEmitIdentifierFn\n                ) {\n                  emitIdentifier = declaration.id.name\n                }\n              }\n            }\n          })\n        } else if (isFunctionDeclaration(node)) {\n          if (node.id != null) identifiers.add(node.id.name)\n        } else if (isImportDeclaration(node)) {\n          const isVue = node.source.value === 'vue'\n          node.specifiers.forEach((specifier) => {\n            if (isVue && isImportSpecifier(specifier)) {\n              const name = isIdentifier(specifier.imported)\n                ? specifier.imported.name\n                : specifier.imported.value\n\n              if (name === 'defineProps') {\n                definePropsIdentifierFn = specifier.local.name\n\n                return // -\n              } else if (name === 'defineEmit') {\n                defineEmitIdentifierFn = specifier.local.name\n\n                return // -\n              }\n            }\n\n            if (!ignoredSources.has(node.source.value)) {\n              identifiers.add(specifier.local.name)\n              if (\n                isCamelCase(specifier.local.name) &&\n                /^v[A-Z]/.test(specifier.local.name)\n              ) {\n                directives.add(specifier.local.name)\n              } else if (isPascalCase(specifier.local.name)) {\n                components.add(specifier.local.name)\n              }\n            }\n          })\n        } else if (isClassDeclaration(node)) {\n          identifiers.add(node.id.name)\n        } else if (isDeclareClass(node)) {\n          identifiers.add(node.id.name)\n        } else if (isDeclareFunction(node)) {\n          identifiers.add(node.id.name)\n        } else if (isDeclareVariable(node)) {\n          identifiers.add(node.id.name)\n        } else if (isEnumDeclaration(node)) {\n          identifiers.add(node.id.name)\n        }\n      })\n    }\n  } catch {\n    // FIXME: Handle errors\n  }\n\n  return {\n    identifiers,\n    components,\n    directives,\n    emitIdentifier,\n    propsIdentifier,\n  }\n}\nfunction getIdentifiers(\n  source: string,\n  ignoreFunctionParameters = true,\n): Set<string> {\n  source = source\n    .trim()\n    // Common errors when user is typing.\n    .replace(/(\\.|\\[\\]?)\\s*$/, '')\n\n  const identifiers = new Set<string>()\n  const add = (id: string): void => {\n    if (isValidIdentifier(id)) identifiers.add(id)\n  }\n  if (isSimpleIdentifier(source.trim())) {\n    add(source)\n  } else {\n    try {\n      const ast = parseUsingBabel(source, true)\n      let definedInScope = new Set<string>()\n      const scopes: Array<Set<string>> = []\n      const pushScope = (scope: Set<string>): void => {\n        if (!ignoreFunctionParameters) return\n        scopes.push(scope)\n        definedInScope = new Set([...definedInScope, ...scope])\n      }\n      const popScope = (): void => {\n        if (!ignoreFunctionParameters) return\n        scopes.pop()\n        definedInScope = new Set(scopes.flatMap((scope) => Array.from(scope)))\n      }\n      traverseBabel(ast, {\n        enter: (node, ancestors) => {\n          if (isFunctionDeclaration(node) || isArrowFunctionExpression(node)) {\n            const scope = new Set<string>()\n            node.params.forEach((param) => {\n              traverseBabel(param, (node) => {\n                if (isIdentifier(node)) scope.add(node.name)\n              })\n            })\n            pushScope(scope)\n          }\n\n          if (isIdentifier(node) && !definedInScope.has(node.name)) {\n            if (shouldTrack(node, ancestors.slice())) {\n              add(node.name)\n            }\n          }\n        },\n        exit: (node) => {\n          if (isFunctionDeclaration(node) || isArrowFunctionExpression(node)) {\n            popScope()\n          }\n        },\n      })\n    } catch {\n      const RE = /\\b[a-z$_][a-z0-9$_]+\\b/gi\n      let match: RegExpMatchArray | null\n      while ((match = RE.exec(source)) != null) {\n        add(match[0] ?? '')\n      }\n    }\n  }\n  return identifiers\n}\n\nfunction isValidIdentifier(id: string): boolean {\n  return (\n    id.trim().length > 0 &&\n    !/^(of|in|for|while|function|class|const|let|var|true|false)$/.test(id)\n  )\n}\n\nfunction parseUsingBabel(source: string, withTS = false): File | Expression {\n  try {\n    return parse(source, {\n      plugins: withTS\n        ? ['bigInt', 'optionalChaining', 'typescript']\n        : ['bigInt', 'optionalChaining'],\n      // @ts-expect-error\n      errorRecovery: true,\n    }) as any\n  } catch {\n    return parseExpression(source, {\n      plugins: withTS\n        ? ['bigInt', 'optionalChaining', 'typescript']\n        : ['bigInt', 'optionalChaining'],\n      // @ts-expect-error\n      errorRecovery: true,\n    }) as any\n  }\n}\n\n// TODO: This misses destructured arguments\nfunction shouldTrack(\n  identifier: Identifier,\n  ancestors: Array<{\n    node: BabelNode\n    key: string\n    index?: number\n  }>,\n): boolean {\n  const ancestor = ancestors.pop()\n  if (ancestor == null) return true\n  const parent = ancestor.node\n\n  if (\n    // not id of a FunctionDeclaration\n    !(isFunction(parent) && (parent as any).id === identifier) &&\n    // not a key of Property\n    !isStaticPropertyKey(identifier, parent) &&\n    // not a property of a MemberExpression\n    !(\n      (isMemberExpression(parent) || isOptionalMemberExpression(parent)) &&\n      parent.property === identifier &&\n      !parent.computed\n    ) &&\n    // skip allowed globals\n    !isKnownIdentifier(identifier.name) &&\n    // special case for webpack compilation\n    identifier.name !== `require` &&\n    // is a special keyword but parsed as identifier\n    identifier.name !== `arguments`\n  ) {\n    return true\n  }\n\n  return false\n}\n\nconst KNOWN_IDENTIFIERS = new Set(\n  (\n    'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt'\n  ).split(','),\n)\n\nfunction isKnownIdentifier(value: string): boolean {\n  return KNOWN_IDENTIFIERS.has(value) || /^(true|false|null|this)$/.test(value)\n}\n\nfunction isStaticProperty(node: BabelNode): node is ObjectMember {\n  return isObjectMember(node) && !node.computed\n}\n\nfunction isStaticPropertyKey(node: BabelNode, parent: BabelNode): boolean {\n  return isStaticProperty(parent) && parent.key === node\n}\n", "import type { CompoundExpressionNode } from '@vue/compiler-core'\nimport { createCompoundExpression } from '@vue/compiler-core'\n\nexport class ScopeManager {\n  private readonly hoists: CompoundExpressionNode[][] = []\n  private readonly identifiers: Record<string, number> = {}\n  private readonly rootScope: CompoundExpressionNode[] = []\n\n  private currentScope: CompoundExpressionNode[] = this.rootScope\n\n  getRootScope(): CompoundExpressionNode[] {\n    return this.rootScope\n  }\n\n  addIdentifier(value: string): void {\n    this.identifiers[value] = 1 + (this.identifiers[value] ?? 0)\n  }\n\n  hasIdentifier(value: string): boolean {\n    return (this.identifiers[value] ?? 0) > 0\n  }\n\n  removeIdentifier(value: string): void {\n    this.identifiers[value] = Math.max(0, this.identifiers[value] ?? 0 - 1)\n  }\n\n  scopeHoist(expression: string | CompoundExpressionNode): void {\n    if (typeof expression === 'string') {\n      this.currentScope.push(createCompoundExpression([expression]))\n    } else {\n      this.currentScope.push(expression)\n    }\n  }\n\n  hoist(expression: string | CompoundExpressionNode): void {\n    if (typeof expression === 'string') {\n      this.rootScope.push(createCompoundExpression([expression]))\n    } else {\n      this.rootScope.push(expression)\n    }\n  }\n\n  createNewHoistScope(): CompoundExpressionNode[] {\n    this.hoists.push(this.currentScope)\n    this.currentScope = []\n\n    return this.currentScope\n  }\n\n  popHoistScope(): CompoundExpressionNode[] {\n    const scope = this.currentScope\n    this.currentScope = this.hoists.pop() ?? []\n    return scope\n  }\n}\n", "import {\n  DirectiveNode,\n  findDir,\n  IfBranchNode,\n  IfNode,\n  NodeTransform,\n  TemplateNode,\n} from '@vue/compiler-core'\nimport {\n  isComponentNode,\n  isTemplateNode,\n  NodeTypes,\n} from '@vuedx/template-ast-types'\nimport type { NodeTransformContext } from '../types/NodeTransformContext'\n\nexport function createComponentChildrenTransform(\n  _customContext: NodeTransformContext,\n): NodeTransform {\n  return (node) => {\n    if (!isComponentNode(node)) return\n    const dir = findDir(node, 'slot', true)\n    let hasSlotsAsChildren = false\n    if (\n      dir == null &&\n      node.children.some(\n        (node) => isTemplateNode(node) && findDir(node, 'slot', true) != null,\n      )\n    ) {\n      hasSlotsAsChildren = true\n    }\n\n    return () => {\n      if (dir != null) {\n        node.props = node.props.filter((prop) => prop !== dir)\n        node.slots = [\n          {\n            name: dir.arg,\n            args: dir.exp,\n            hoists: node.hoists ?? [],\n            children: node.children,\n          },\n        ]\n      } else if (hasSlotsAsChildren) {\n        node.slots = []\n        const slots = node.slots\n        node.unassignedSlots = node.children.filter((node) => {\n          if (isTemplateNode(node)) {\n            const dir = findDir(node, 'slot', true)\n            if (dir != null) {\n              const _if = findDir(node, 'if', true)\n\n              slots.push({\n                name: dir.arg,\n                args: dir.exp,\n                hoists: node.hoists ?? [],\n                children:\n                  _if == null ? node.children : [createIfNode(node, _if)],\n                template: node,\n              })\n\n              return false\n            }\n          }\n\n          return true\n        })\n      } else {\n        node.slots = [\n          {\n            hoists: node.hoists ?? [],\n            children: node.children,\n          },\n        ]\n      }\n    }\n  }\n}\nfunction createIfNode(node: TemplateNode, dir: DirectiveNode): IfNode {\n  return {\n    type: NodeTypes.IF,\n    branches: [createIfBranchNode(node, dir)],\n    loc: node.loc,\n    scope: node.scope,\n  }\n}\n\nfunction createIfBranchNode(\n  node: TemplateNode,\n  dir: DirectiveNode,\n): IfBranchNode {\n  return {\n    type: NodeTypes.IF_BRANCH,\n    children: node.children,\n    condition: dir.exp,\n    loc: node.loc,\n    scope: node.scope,\n  }\n}\n", "import {\n  createStructuralDirectiveTransform,\n  NodeTransform,\n  processIf,\n} from '@vue/compiler-core'\nimport { createSimpleExpression } from '@vuedx/template-ast-types'\n\nimport type { NodeTransformContext } from '../types/NodeTransformContext'\n\nexport function createTransformIf(\n  _customContext: NodeTransformContext,\n): NodeTransform {\n  return createStructuralDirectiveTransform(\n    /^(if|else-if|else)$/,\n    (node, dir, context) => {\n      const condition = dir.exp\n      dir.exp = (\n        condition != null\n          ? { ...condition }\n          : createSimpleExpression('undefined', false)\n      ) as any // Prevent condition normalization\n      return processIf(node, dir, context, (_ifNode, branch) => () => {\n        branch.condition = condition\n      })\n    },\n  )\n}\n", "export const directives = new Set<string>(\n  'text,html,show,if,else,else-if,for,on,bind,model,slot,pre,cloak,once,is,memo'.split(\n    ',',\n  ),\n)\n", "import {\n  AttributeNode,\n  createCompoundExpression,\n  DirectiveNode,\n  findDir,\n  findProp,\n  NodeTransform,\n} from '@vue/compiler-core'\nimport { camelCase, pascalCase } from '@vuedx/shared'\nimport {\n  isComponentNode,\n  isDirectiveNode,\n  isElementNode,\n  isSimpleIdentifier,\n} from '@vuedx/template-ast-types'\nimport { KnownIdentifier } from '@vuedx/transforms'\nimport { directives } from '../builtins'\nimport { getRuntimeFn } from '../runtime'\nimport type { NodeTransformContext } from '../types/NodeTransformContext'\n\nconst s = (text: string): string => JSON.stringify(text) + ' as const'\nexport function createResolveComponentTransform(\n  ctx: NodeTransformContext,\n): NodeTransform {\n  const h = getRuntimeFn.bind(null, ctx.typeIdentifier)\n\n  const resolveComponentArgs = `${\n    ctx.isTypeScript\n      ? `{} as unknown as ${ctx.internalIdentifierPrefix}GlobalComponents`\n      : `/** @type {${ctx.internalIdentifierPrefix}GlobalComponents} */ (/** @type {unknown} */ ({}))`\n  }, ${\n    ctx.isTypeScript\n      ? `{} as unknown as JSX.IntrinsicElements`\n      : `/** @type JSX.IntrinsicElements} */ (/** @type {unknown} */ ({}))`\n  }, ${ctx.contextIdentifier}, `\n\n  return (node) => {\n    if (!isElementNode(node)) return\n    if (isElementNode(node)) {\n      node.props.forEach((node) => {\n        if (isDirectiveNode(node) && !directives.has(node.name)) {\n          ctx.used.directives.add(node.name)\n\n          const id = `v${pascalCase(node.name)}`\n          node.resolvedName = id\n\n          if (!ctx.scope.hasIdentifier(id)) {\n            const knownId = ctx.identifiers.get(id)\n            if (knownId == null) {\n              ctx.scope.addIdentifier(id)\n              ctx.scope.hoist(\n                createCompoundExpression([\n                  'const ',\n                  id,\n                  ` = ${h('resolveDirective')}(${ctx.contextIdentifier}, `,\n                  s(node.name),\n                  ', ',\n                  s(camelCase(node.name)),\n                  ');',\n                ]),\n              )\n            } else if (mayBeRef(knownId)) {\n              ctx.scope.addIdentifier(id)\n              ctx.scope.hoist(\n                createCompoundExpression([\n                  `const ${id} = ${ctx.internalIdentifierPrefix}_get_identifier_${id}();`,\n                ]),\n              )\n            }\n          }\n        }\n      })\n    }\n    let isProp: DirectiveNode | AttributeNode | undefined = findDir(node, 'is')\n    if (isProp != null) {\n      node.tagType = 1\n      node.tag = 'component'\n    }\n    if (!isComponentNode(node)) return\n    if (node.tag !== 'component') {\n      if (/[A-Z.-]/.test(node.tag)) {\n        ctx.used.components.add(node.tag)\n        const name = node.tag.split('.')[0] ?? node.tag\n        const id = `${pascalCase(name)}`\n        node.resolvedName = node.tag.includes('.')\n          ? id + node.tag.slice(name.length)\n          : id\n        if (!ctx.scope.hasIdentifier(id)) {\n          const knownId = ctx.identifiers.get(id)\n          if (knownId == null || !isSimpleIdentifier(id)) {\n            ctx.used.components.add(id)\n            ctx.scope.addIdentifier(id)\n            ctx.scope.hoist(\n              createCompoundExpression([\n                'const ',\n                id,\n                ` = ${h('resolveComponent')}(${resolveComponentArgs}`,\n                isSimpleIdentifier(id)\n                  ? `${ctx.internalIdentifierPrefix}_get_identifier_${id}()`\n                  : 'null',\n                ', ',\n                s(name),\n                ', ',\n                s(pascalCase(name)),\n                ');',\n              ]),\n            )\n          } else if (mayBeRef(knownId)) {\n            ctx.used.components.add(id)\n            ctx.scope.addIdentifier(id)\n            ctx.scope.hoist(\n              createCompoundExpression([\n                `const ${id} = ${ctx.internalIdentifierPrefix}_get_identifier_${id}();`,\n              ]),\n            )\n          }\n        }\n      }\n      return undefined\n    } else {\n      isProp = isProp ?? findProp(node, 'is')\n\n      if (isProp != null) node.is = isProp\n      node.props = node.props.filter((prop) => prop !== isProp)\n    }\n    return undefined\n  }\n}\n\nfunction mayBeRef(id: KnownIdentifier): boolean {\n  return (\n    id.kind === 'ref' ||\n    id.kind === 'maybeRef' ||\n    id.kind === 'externalRef' ||\n    id.kind === 'externalMaybeRef'\n  )\n}\n", "import type { NodeTransform } from '@vue/compiler-core'\nimport { findDir } from '@vue/compiler-core'\nimport { isElementNode } from '@vuedx/template-ast-types'\nimport type { NodeTransformContext } from '../types/NodeTransformContext'\n\nexport function createSlotHoistScopeTransform(\n  context: NodeTransformContext,\n): NodeTransform {\n  return (node) => {\n    if (!isElementNode(node)) return\n    const dir = findDir(node, 'slot', true)\n    if (dir == null) return\n\n    node.hoists = context.scope.createNewHoistScope()\n\n    return () => {\n      node.hoists = context.scope.popHoistScope()\n    }\n  }\n}\n", "export default {\n  GT: '>',\n  gt: '>',\n  LT: '<',\n  lt: '<',\n  'ac;': '\u223E',\n  'af;': '\u2061',\n  AMP: '&',\n  amp: '&',\n  'ap;': '\u2248',\n  'DD;': '\u2145',\n  'dd;': '\u2146',\n  deg: '\u00B0',\n  'ee;': '\u2147',\n  'eg;': '\u2A9A',\n  'el;': '\u2A99',\n  ETH: '\u00D0',\n  eth: '\u00F0',\n  'gE;': '\u2267',\n  'ge;': '\u2265',\n  'Gg;': '\u22D9',\n  'gg;': '\u226B',\n  'gl;': '\u2277',\n  'GT;': '>',\n  'Gt;': '\u226B',\n  'gt;': '>',\n  'ic;': '\u2063',\n  'ii;': '\u2148',\n  'Im;': '\u2111',\n  'in;': '\u2208',\n  'it;': '\u2062',\n  'lE;': '\u2266',\n  'le;': '\u2264',\n  'lg;': '\u2276',\n  'Ll;': '\u22D8',\n  'll;': '\u226A',\n  'LT;': '<',\n  'Lt;': '\u226A',\n  'lt;': '<',\n  'mp;': '\u2213',\n  'Mu;': '\u039C',\n  'mu;': '\u03BC',\n  'ne;': '\u2260',\n  'ni;': '\u220B',\n  not: '\u00AC',\n  'Nu;': '\u039D',\n  'nu;': '\u03BD',\n  'Or;': '\u2A54',\n  'or;': '\u2228',\n  'oS;': '\u24C8',\n  'Pi;': '\u03A0',\n  'pi;': '\u03C0',\n  'pm;': '\u00B1',\n  'Pr;': '\u2ABB',\n  'pr;': '\u227A',\n  'Re;': '\u211C',\n  REG: '\u00AE',\n  reg: '\u00AE',\n  'rx;': '\u211E',\n  'Sc;': '\u2ABC',\n  'sc;': '\u227B',\n  shy: '\u00AD',\n  uml: '\u00A8',\n  'wp;': '\u2118',\n  'wr;': '\u2240',\n  'Xi;': '\u039E',\n  'xi;': '\u03BE',\n  yen: '\u00A5',\n  'acd;': '\u223F',\n  'acE;': '\u223E\u0333',\n  'Acy;': '\u0410',\n  'acy;': '\u0430',\n  'Afr;': '\uD835\uDD04',\n  'afr;': '\uD835\uDD1E',\n  'AMP;': '&',\n  'amp;': '&',\n  'And;': '\u2A53',\n  'and;': '\u2227',\n  'ang;': '\u2220',\n  'apE;': '\u2A70',\n  'ape;': '\u224A',\n  'ast;': '*',\n  Auml: '\u00C4',\n  auml: '\u00E4',\n  'Bcy;': '\u0411',\n  'bcy;': '\u0431',\n  'Bfr;': '\uD835\uDD05',\n  'bfr;': '\uD835\uDD1F',\n  'bne;': '=\u20E5',\n  'bot;': '\u22A5',\n  'Cap;': '\u22D2',\n  'cap;': '\u2229',\n  cent: '\u00A2',\n  'Cfr;': '\u212D',\n  'cfr;': '\uD835\uDD20',\n  'Chi;': '\u03A7',\n  'chi;': '\u03C7',\n  'cir;': '\u25CB',\n  COPY: '\u00A9',\n  copy: '\u00A9',\n  'Cup;': '\u22D3',\n  'cup;': '\u222A',\n  'Dcy;': '\u0414',\n  'dcy;': '\u0434',\n  'deg;': '\u00B0',\n  'Del;': '\u2207',\n  'Dfr;': '\uD835\uDD07',\n  'dfr;': '\uD835\uDD21',\n  'die;': '\u00A8',\n  'div;': '\u00F7',\n  'Dot;': '\u00A8',\n  'dot;': '\u02D9',\n  'Ecy;': '\u042D',\n  'ecy;': '\u044D',\n  'Efr;': '\uD835\uDD08',\n  'efr;': '\uD835\uDD22',\n  'egs;': '\u2A96',\n  'ell;': '\u2113',\n  'els;': '\u2A95',\n  'ENG;': '\u014A',\n  'eng;': '\u014B',\n  'Eta;': '\u0397',\n  'eta;': '\u03B7',\n  'ETH;': '\u00D0',\n  'eth;': '\u00F0',\n  Euml: '\u00CB',\n  euml: '\u00EB',\n  'Fcy;': '\u0424',\n  'fcy;': '\u0444',\n  'Ffr;': '\uD835\uDD09',\n  'ffr;': '\uD835\uDD23',\n  'gap;': '\u2A86',\n  'Gcy;': '\u0413',\n  'gcy;': '\u0433',\n  'gEl;': '\u2A8C',\n  'gel;': '\u22DB',\n  'geq;': '\u2265',\n  'ges;': '\u2A7E',\n  'Gfr;': '\uD835\uDD0A',\n  'gfr;': '\uD835\uDD24',\n  'ggg;': '\u22D9',\n  'gla;': '\u2AA5',\n  'glE;': '\u2A92',\n  'glj;': '\u2AA4',\n  'gnE;': '\u2269',\n  'gne;': '\u2A88',\n  'Hat;': '^',\n  'Hfr;': '\u210C',\n  'hfr;': '\uD835\uDD25',\n  'Icy;': '\u0418',\n  'icy;': '\u0438',\n  'iff;': '\u21D4',\n  'Ifr;': '\u2111',\n  'ifr;': '\uD835\uDD26',\n  'Int;': '\u222C',\n  'int;': '\u222B',\n  Iuml: '\u00CF',\n  iuml: '\u00EF',\n  'Jcy;': '\u0419',\n  'jcy;': '\u0439',\n  'Jfr;': '\uD835\uDD0D',\n  'jfr;': '\uD835\uDD27',\n  'Kcy;': '\u041A',\n  'kcy;': '\u043A',\n  'Kfr;': '\uD835\uDD0E',\n  'kfr;': '\uD835\uDD28',\n  'lap;': '\u2A85',\n  'lat;': '\u2AAB',\n  'Lcy;': '\u041B',\n  'lcy;': '\u043B',\n  'lEg;': '\u2A8B',\n  'leg;': '\u22DA',\n  'leq;': '\u2264',\n  'les;': '\u2A7D',\n  'Lfr;': '\uD835\uDD0F',\n  'lfr;': '\uD835\uDD29',\n  'lgE;': '\u2A91',\n  'lnE;': '\u2268',\n  'lne;': '\u2A87',\n  'loz;': '\u25CA',\n  'lrm;': '\u200E',\n  'Lsh;': '\u21B0',\n  'lsh;': '\u21B0',\n  macr: '\u00AF',\n  'Map;': '\u2905',\n  'map;': '\u21A6',\n  'Mcy;': '\u041C',\n  'mcy;': '\u043C',\n  'Mfr;': '\uD835\uDD10',\n  'mfr;': '\uD835\uDD2A',\n  'mho;': '\u2127',\n  'mid;': '\u2223',\n  'nap;': '\u2249',\n  nbsp: ' ',\n  'Ncy;': '\u041D',\n  'ncy;': '\u043D',\n  'Nfr;': '\uD835\uDD11',\n  'nfr;': '\uD835\uDD2B',\n  'ngE;': '\u2267\u0338',\n  'nge;': '\u2271',\n  'nGg;': '\u22D9\u0338',\n  'nGt;': '\u226B\u20D2',\n  'ngt;': '\u226F',\n  'nis;': '\u22FC',\n  'niv;': '\u220B',\n  'nlE;': '\u2266\u0338',\n  'nle;': '\u2270',\n  'nLl;': '\u22D8\u0338',\n  'nLt;': '\u226A\u20D2',\n  'nlt;': '\u226E',\n  'Not;': '\u2AEC',\n  'not;': '\u00AC',\n  'npr;': '\u2280',\n  'nsc;': '\u2281',\n  'num;': '#',\n  'Ocy;': '\u041E',\n  'ocy;': '\u043E',\n  'Ofr;': '\uD835\uDD12',\n  'ofr;': '\uD835\uDD2C',\n  'ogt;': '\u29C1',\n  'ohm;': '\u03A9',\n  'olt;': '\u29C0',\n  'ord;': '\u2A5D',\n  ordf: '\u00AA',\n  ordm: '\u00BA',\n  'orv;': '\u2A5B',\n  Ouml: '\u00D6',\n  ouml: '\u00F6',\n  'par;': '\u2225',\n  para: '\u00B6',\n  'Pcy;': '\u041F',\n  'pcy;': '\u043F',\n  'Pfr;': '\uD835\uDD13',\n  'pfr;': '\uD835\uDD2D',\n  'Phi;': '\u03A6',\n  'phi;': '\u03C6',\n  'piv;': '\u03D6',\n  'prE;': '\u2AB3',\n  'pre;': '\u2AAF',\n  'Psi;': '\u03A8',\n  'psi;': '\u03C8',\n  'Qfr;': '\uD835\uDD14',\n  'qfr;': '\uD835\uDD2E',\n  QUOT: '\"',\n  quot: '\"',\n  'Rcy;': '\u0420',\n  'rcy;': '\u0440',\n  'REG;': '\u00AE',\n  'reg;': '\u00AE',\n  'Rfr;': '\u211C',\n  'rfr;': '\uD835\uDD2F',\n  'Rho;': '\u03A1',\n  'rho;': '\u03C1',\n  'rlm;': '\u200F',\n  'Rsh;': '\u21B1',\n  'rsh;': '\u21B1',\n  'scE;': '\u2AB4',\n  'sce;': '\u2AB0',\n  'Scy;': '\u0421',\n  'scy;': '\u0441',\n  sect: '\u00A7',\n  'Sfr;': '\uD835\uDD16',\n  'sfr;': '\uD835\uDD30',\n  'shy;': '\u00AD',\n  'sim;': '\u223C',\n  'smt;': '\u2AAA',\n  'sol;': '/',\n  'squ;': '\u25A1',\n  'Sub;': '\u22D0',\n  'sub;': '\u2282',\n  'Sum;': '\u2211',\n  'sum;': '\u2211',\n  'Sup;': '\u22D1',\n  'sup;': '\u2283',\n  sup1: '\u00B9',\n  sup2: '\u00B2',\n  sup3: '\u00B3',\n  'Tab;': '\\t',\n  'Tau;': '\u03A4',\n  'tau;': '\u03C4',\n  'Tcy;': '\u0422',\n  'tcy;': '\u0442',\n  'Tfr;': '\uD835\uDD17',\n  'tfr;': '\uD835\uDD31',\n  'top;': '\u22A4',\n  'Ucy;': '\u0423',\n  'ucy;': '\u0443',\n  'Ufr;': '\uD835\uDD18',\n  'ufr;': '\uD835\uDD32',\n  'uml;': '\u00A8',\n  Uuml: '\u00DC',\n  uuml: '\u00FC',\n  'Vcy;': '\u0412',\n  'vcy;': '\u0432',\n  'Vee;': '\u22C1',\n  'vee;': '\u2228',\n  'Vfr;': '\uD835\uDD19',\n  'vfr;': '\uD835\uDD33',\n  'Wfr;': '\uD835\uDD1A',\n  'wfr;': '\uD835\uDD34',\n  'Xfr;': '\uD835\uDD1B',\n  'xfr;': '\uD835\uDD35',\n  'Ycy;': '\u042B',\n  'ycy;': '\u044B',\n  'yen;': '\u00A5',\n  'Yfr;': '\uD835\uDD1C',\n  'yfr;': '\uD835\uDD36',\n  yuml: '\u00FF',\n  'Zcy;': '\u0417',\n  'zcy;': '\u0437',\n  'Zfr;': '\u2128',\n  'zfr;': '\uD835\uDD37',\n  'zwj;': '\u200D',\n  Acirc: '\u00C2',\n  acirc: '\u00E2',\n  acute: '\u00B4',\n  AElig: '\u00C6',\n  aelig: '\u00E6',\n  'andd;': '\u2A5C',\n  'andv;': '\u2A5A',\n  'ange;': '\u29A4',\n  'Aopf;': '\uD835\uDD38',\n  'aopf;': '\uD835\uDD52',\n  'apid;': '\u224B',\n  'apos;': \"'\",\n  Aring: '\u00C5',\n  aring: '\u00E5',\n  'Ascr;': '\uD835\uDC9C',\n  'ascr;': '\uD835\uDCB6',\n  'Auml;': '\u00C4',\n  'auml;': '\u00E4',\n  'Barv;': '\u2AE7',\n  'bbrk;': '\u23B5',\n  'Beta;': '\u0392',\n  'beta;': '\u03B2',\n  'beth;': '\u2136',\n  'bNot;': '\u2AED',\n  'bnot;': '\u2310',\n  'Bopf;': '\uD835\uDD39',\n  'bopf;': '\uD835\uDD53',\n  'boxH;': '\u2550',\n  'boxh;': '\u2500',\n  'boxV;': '\u2551',\n  'boxv;': '\u2502',\n  'Bscr;': '\u212C',\n  'bscr;': '\uD835\uDCB7',\n  'bsim;': '\u223D',\n  'bsol;': '\\\\',\n  'bull;': '\u2022',\n  'bump;': '\u224E',\n  'caps;': '\u2229\uFE00',\n  'Cdot;': '\u010A',\n  'cdot;': '\u010B',\n  cedil: '\u00B8',\n  'cent;': '\u00A2',\n  'CHcy;': '\u0427',\n  'chcy;': '\u0447',\n  'circ;': '\u02C6',\n  'cirE;': '\u29C3',\n  'cire;': '\u2257',\n  'comp;': '\u2201',\n  'cong;': '\u2245',\n  'Copf;': '\u2102',\n  'copf;': '\uD835\uDD54',\n  'COPY;': '\u00A9',\n  'copy;': '\u00A9',\n  'Cscr;': '\uD835\uDC9E',\n  'cscr;': '\uD835\uDCB8',\n  'csub;': '\u2ACF',\n  'csup;': '\u2AD0',\n  'cups;': '\u222A\uFE00',\n  'Darr;': '\u21A1',\n  'dArr;': '\u21D3',\n  'darr;': '\u2193',\n  'dash;': '\u2010',\n  'dHar;': '\u2965',\n  'diam;': '\u22C4',\n  'DJcy;': '\u0402',\n  'djcy;': '\u0452',\n  'Dopf;': '\uD835\uDD3B',\n  'dopf;': '\uD835\uDD55',\n  'Dscr;': '\uD835\uDC9F',\n  'dscr;': '\uD835\uDCB9',\n  'DScy;': '\u0405',\n  'dscy;': '\u0455',\n  'dsol;': '\u29F6',\n  'dtri;': '\u25BF',\n  'DZcy;': '\u040F',\n  'dzcy;': '\u045F',\n  'ecir;': '\u2256',\n  Ecirc: '\u00CA',\n  ecirc: '\u00EA',\n  'Edot;': '\u0116',\n  'eDot;': '\u2251',\n  'edot;': '\u0117',\n  'emsp;': '\u2003',\n  'ensp;': '\u2002',\n  'Eopf;': '\uD835\uDD3C',\n  'eopf;': '\uD835\uDD56',\n  'epar;': '\u22D5',\n  'epsi;': '\u03B5',\n  'Escr;': '\u2130',\n  'escr;': '\u212F',\n  'Esim;': '\u2A73',\n  'esim;': '\u2242',\n  'Euml;': '\u00CB',\n  'euml;': '\u00EB',\n  'euro;': '\u20AC',\n  'excl;': '!',\n  'flat;': '\u266D',\n  'fnof;': '\u0192',\n  'Fopf;': '\uD835\uDD3D',\n  'fopf;': '\uD835\uDD57',\n  'fork;': '\u22D4',\n  'Fscr;': '\u2131',\n  'fscr;': '\uD835\uDCBB',\n  'Gdot;': '\u0120',\n  'gdot;': '\u0121',\n  'geqq;': '\u2267',\n  'gesl;': '\u22DB\uFE00',\n  'GJcy;': '\u0403',\n  'gjcy;': '\u0453',\n  'gnap;': '\u2A8A',\n  'gneq;': '\u2A88',\n  'Gopf;': '\uD835\uDD3E',\n  'gopf;': '\uD835\uDD58',\n  'Gscr;': '\uD835\uDCA2',\n  'gscr;': '\u210A',\n  'gsim;': '\u2273',\n  'gtcc;': '\u2AA7',\n  'gvnE;': '\u2269\uFE00',\n  'half;': '\u00BD',\n  'hArr;': '\u21D4',\n  'harr;': '\u2194',\n  'hbar;': '\u210F',\n  'Hopf;': '\u210D',\n  'hopf;': '\uD835\uDD59',\n  'Hscr;': '\u210B',\n  'hscr;': '\uD835\uDCBD',\n  Icirc: '\u00CE',\n  icirc: '\u00EE',\n  'Idot;': '\u0130',\n  'IEcy;': '\u0415',\n  'iecy;': '\u0435',\n  iexcl: '\u00A1',\n  'imof;': '\u22B7',\n  'IOcy;': '\u0401',\n  'iocy;': '\u0451',\n  'Iopf;': '\uD835\uDD40',\n  'iopf;': '\uD835\uDD5A',\n  'Iota;': '\u0399',\n  'iota;': '\u03B9',\n  'Iscr;': '\u2110',\n  'iscr;': '\uD835\uDCBE',\n  'isin;': '\u2208',\n  'Iuml;': '\u00CF',\n  'iuml;': '\u00EF',\n  'Jopf;': '\uD835\uDD41',\n  'jopf;': '\uD835\uDD5B',\n  'Jscr;': '\uD835\uDCA5',\n  'jscr;': '\uD835\uDCBF',\n  'KHcy;': '\u0425',\n  'khcy;': '\u0445',\n  'KJcy;': '\u040C',\n  'kjcy;': '\u045C',\n  'Kopf;': '\uD835\uDD42',\n  'kopf;': '\uD835\uDD5C',\n  'Kscr;': '\uD835\uDCA6',\n  'kscr;': '\uD835\uDCC0',\n  'Lang;': '\u27EA',\n  'lang;': '\u27E8',\n  laquo: '\u00AB',\n  'Larr;': '\u219E',\n  'lArr;': '\u21D0',\n  'larr;': '\u2190',\n  'late;': '\u2AAD',\n  'lcub;': '{',\n  'ldca;': '\u2936',\n  'ldsh;': '\u21B2',\n  'leqq;': '\u2266',\n  'lesg;': '\u22DA\uFE00',\n  'lHar;': '\u2962',\n  'LJcy;': '\u0409',\n  'ljcy;': '\u0459',\n  'lnap;': '\u2A89',\n  'lneq;': '\u2A87',\n  'Lopf;': '\uD835\uDD43',\n  'lopf;': '\uD835\uDD5D',\n  'lozf;': '\u29EB',\n  'lpar;': '(',\n  'Lscr;': '\u2112',\n  'lscr;': '\uD835\uDCC1',\n  'lsim;': '\u2272',\n  'lsqb;': '[',\n  'ltcc;': '\u2AA6',\n  'ltri;': '\u25C3',\n  'lvnE;': '\u2268\uFE00',\n  'macr;': '\u00AF',\n  'male;': '\u2642',\n  'malt;': '\u2720',\n  micro: '\u00B5',\n  'mlcp;': '\u2ADB',\n  'mldr;': '\u2026',\n  'Mopf;': '\uD835\uDD44',\n  'mopf;': '\uD835\uDD5E',\n  'Mscr;': '\u2133',\n  'mscr;': '\uD835\uDCC2',\n  'nang;': '\u2220\u20D2',\n  'napE;': '\u2A70\u0338',\n  'nbsp;': ' ',\n  'ncap;': '\u2A43',\n  'ncup;': '\u2A42',\n  'ngeq;': '\u2271',\n  'nges;': '\u2A7E\u0338',\n  'ngtr;': '\u226F',\n  'nGtv;': '\u226B\u0338',\n  'nisd;': '\u22FA',\n  'NJcy;': '\u040A',\n  'njcy;': '\u045A',\n  'nldr;': '\u2025',\n  'nleq;': '\u2270',\n  'nles;': '\u2A7D\u0338',\n  'nLtv;': '\u226A\u0338',\n  'nmid;': '\u2224',\n  'Nopf;': '\u2115',\n  'nopf;': '\uD835\uDD5F',\n  'npar;': '\u2226',\n  'npre;': '\u2AAF\u0338',\n  'nsce;': '\u2AB0\u0338',\n  'Nscr;': '\uD835\uDCA9',\n  'nscr;': '\uD835\uDCC3',\n  'nsim;': '\u2241',\n  'nsub;': '\u2284',\n  'nsup;': '\u2285',\n  'ntgl;': '\u2279',\n  'ntlg;': '\u2278',\n  'nvap;': '\u224D\u20D2',\n  'nvge;': '\u2265\u20D2',\n  'nvgt;': '>\u20D2',\n  'nvle;': '\u2264\u20D2',\n  'nvlt;': '<\u20D2',\n  'oast;': '\u229B',\n  'ocir;': '\u229A',\n  Ocirc: '\u00D4',\n  ocirc: '\u00F4',\n  'odiv;': '\u2A38',\n  'odot;': '\u2299',\n  'ogon;': '\u02DB',\n  'oint;': '\u222E',\n  'omid;': '\u29B6',\n  'Oopf;': '\uD835\uDD46',\n  'oopf;': '\uD835\uDD60',\n  'opar;': '\u29B7',\n  'ordf;': '\u00AA',\n  'ordm;': '\u00BA',\n  'oror;': '\u2A56',\n  'Oscr;': '\uD835\uDCAA',\n  'oscr;': '\u2134',\n  'osol;': '\u2298',\n  'Ouml;': '\u00D6',\n  'ouml;': '\u00F6',\n  'para;': '\u00B6',\n  'part;': '\u2202',\n  'perp;': '\u22A5',\n  'phiv;': '\u03D5',\n  'plus;': '+',\n  'Popf;': '\u2119',\n  'popf;': '\uD835\uDD61',\n  pound: '\u00A3',\n  'prap;': '\u2AB7',\n  'prec;': '\u227A',\n  'prnE;': '\u2AB5',\n  'prod;': '\u220F',\n  'prop;': '\u221D',\n  'Pscr;': '\uD835\uDCAB',\n  'pscr;': '\uD835\uDCC5',\n  'qint;': '\u2A0C',\n  'Qopf;': '\u211A',\n  'qopf;': '\uD835\uDD62',\n  'Qscr;': '\uD835\uDCAC',\n  'qscr;': '\uD835\uDCC6',\n  'QUOT;': '\"',\n  'quot;': '\"',\n  'race;': '\u223D\u0331',\n  'Rang;': '\u27EB',\n  'rang;': '\u27E9',\n  raquo: '\u00BB',\n  'Rarr;': '\u21A0',\n  'rArr;': '\u21D2',\n  'rarr;': '\u2192',\n  'rcub;': '}',\n  'rdca;': '\u2937',\n  'rdsh;': '\u21B3',\n  'real;': '\u211C',\n  'rect;': '\u25AD',\n  'rHar;': '\u2964',\n  'rhov;': '\u03F1',\n  'ring;': '\u02DA',\n  'Ropf;': '\u211D',\n  'ropf;': '\uD835\uDD63',\n  'rpar;': ')',\n  'Rscr;': '\u211B',\n  'rscr;': '\uD835\uDCC7',\n  'rsqb;': ']',\n  'rtri;': '\u25B9',\n  'scap;': '\u2AB8',\n  'scnE;': '\u2AB6',\n  'sdot;': '\u22C5',\n  'sect;': '\u00A7',\n  'semi;': ';',\n  'sext;': '\u2736',\n  'SHcy;': '\u0428',\n  'shcy;': '\u0448',\n  'sime;': '\u2243',\n  'simg;': '\u2A9E',\n  'siml;': '\u2A9D',\n  'smid;': '\u2223',\n  'smte;': '\u2AAC',\n  'solb;': '\u29C4',\n  'Sopf;': '\uD835\uDD4A',\n  'sopf;': '\uD835\uDD64',\n  'spar;': '\u2225',\n  'Sqrt;': '\u221A',\n  'squf;': '\u25AA',\n  'Sscr;': '\uD835\uDCAE',\n  'sscr;': '\uD835\uDCC8',\n  'Star;': '\u22C6',\n  'star;': '\u2606',\n  'subE;': '\u2AC5',\n  'sube;': '\u2286',\n  'succ;': '\u227B',\n  'sung;': '\u266A',\n  'sup1;': '\u00B9',\n  'sup2;': '\u00B2',\n  'sup3;': '\u00B3',\n  'supE;': '\u2AC6',\n  'supe;': '\u2287',\n  szlig: '\u00DF',\n  'tbrk;': '\u23B4',\n  'tdot;': '\u20DB',\n  THORN: '\u00DE',\n  thorn: '\u00FE',\n  times: '\u00D7',\n  'tint;': '\u222D',\n  'toea;': '\u2928',\n  'Topf;': '\uD835\uDD4B',\n  'topf;': '\uD835\uDD65',\n  'tosa;': '\u2929',\n  'trie;': '\u225C',\n  'Tscr;': '\uD835\uDCAF',\n  'tscr;': '\uD835\uDCC9',\n  'TScy;': '\u0426',\n  'tscy;': '\u0446',\n  'Uarr;': '\u219F',\n  'uArr;': '\u21D1',\n  'uarr;': '\u2191',\n  Ucirc: '\u00DB',\n  ucirc: '\u00FB',\n  'uHar;': '\u2963',\n  'Uopf;': '\uD835\uDD4C',\n  'uopf;': '\uD835\uDD66',\n  'Upsi;': '\u03D2',\n  'upsi;': '\u03C5',\n  'Uscr;': '\uD835\uDCB0',\n  'uscr;': '\uD835\uDCCA',\n  'utri;': '\u25B5',\n  'Uuml;': '\u00DC',\n  'uuml;': '\u00FC',\n  'vArr;': '\u21D5',\n  'varr;': '\u2195',\n  'Vbar;': '\u2AEB',\n  'vBar;': '\u2AE8',\n  'Vert;': '\u2016',\n  'vert;': '|',\n  'Vopf;': '\uD835\uDD4D',\n  'vopf;': '\uD835\uDD67',\n  'Vscr;': '\uD835\uDCB1',\n  'vscr;': '\uD835\uDCCB',\n  'Wopf;': '\uD835\uDD4E',\n  'wopf;': '\uD835\uDD68',\n  'Wscr;': '\uD835\uDCB2',\n  'wscr;': '\uD835\uDCCC',\n  'xcap;': '\u22C2',\n  'xcup;': '\u22C3',\n  'xmap;': '\u27FC',\n  'xnis;': '\u22FB',\n  'Xopf;': '\uD835\uDD4F',\n  'xopf;': '\uD835\uDD69',\n  'Xscr;': '\uD835\uDCB3',\n  'xscr;': '\uD835\uDCCD',\n  'xvee;': '\u22C1',\n  'YAcy;': '\u042F',\n  'yacy;': '\u044F',\n  'YIcy;': '\u0407',\n  'yicy;': '\u0457',\n  'Yopf;': '\uD835\uDD50',\n  'yopf;': '\uD835\uDD6A',\n  'Yscr;': '\uD835\uDCB4',\n  'yscr;': '\uD835\uDCCE',\n  'YUcy;': '\u042E',\n  'yucy;': '\u044E',\n  'Yuml;': '\u0178',\n  'yuml;': '\u00FF',\n  'Zdot;': '\u017B',\n  'zdot;': '\u017C',\n  'Zeta;': '\u0396',\n  'zeta;': '\u03B6',\n  'ZHcy;': '\u0416',\n  'zhcy;': '\u0436',\n  'Zopf;': '\u2124',\n  'zopf;': '\uD835\uDD6B',\n  'Zscr;': '\uD835\uDCB5',\n  'zscr;': '\uD835\uDCCF',\n  'zwnj;': '\u200C',\n  Aacute: '\u00C1',\n  aacute: '\u00E1',\n  'Acirc;': '\u00C2',\n  'acirc;': '\u00E2',\n  'acute;': '\u00B4',\n  'AElig;': '\u00C6',\n  'aelig;': '\u00E6',\n  Agrave: '\u00C0',\n  agrave: '\u00E0',\n  'aleph;': '\u2135',\n  'Alpha;': '\u0391',\n  'alpha;': '\u03B1',\n  'Amacr;': '\u0100',\n  'amacr;': '\u0101',\n  'amalg;': '\u2A3F',\n  'angle;': '\u2220',\n  'angrt;': '\u221F',\n  'angst;': '\u00C5',\n  'Aogon;': '\u0104',\n  'aogon;': '\u0105',\n  'Aring;': '\u00C5',\n  'aring;': '\u00E5',\n  'asymp;': '\u2248',\n  Atilde: '\u00C3',\n  atilde: '\u00E3',\n  'awint;': '\u2A11',\n  'bcong;': '\u224C',\n  'bdquo;': '\u201E',\n  'bepsi;': '\u03F6',\n  'blank;': '\u2423',\n  'blk12;': '\u2592',\n  'blk14;': '\u2591',\n  'blk34;': '\u2593',\n  'block;': '\u2588',\n  'boxDL;': '\u2557',\n  'boxDl;': '\u2556',\n  'boxdL;': '\u2555',\n  'boxdl;': '\u2510',\n  'boxDR;': '\u2554',\n  'boxDr;': '\u2553',\n  'boxdR;': '\u2552',\n  'boxdr;': '\u250C',\n  'boxHD;': '\u2566',\n  'boxHd;': '\u2564',\n  'boxhD;': '\u2565',\n  'boxhd;': '\u252C',\n  'boxHU;': '\u2569',\n  'boxHu;': '\u2567',\n  'boxhU;': '\u2568',\n  'boxhu;': '\u2534',\n  'boxUL;': '\u255D',\n  'boxUl;': '\u255C',\n  'boxuL;': '\u255B',\n  'boxul;': '\u2518',\n  'boxUR;': '\u255A',\n  'boxUr;': '\u2559',\n  'boxuR;': '\u2558',\n  'boxur;': '\u2514',\n  'boxVH;': '\u256C',\n  'boxVh;': '\u256B',\n  'boxvH;': '\u256A',\n  'boxvh;': '\u253C',\n  'boxVL;': '\u2563',\n  'boxVl;': '\u2562',\n  'boxvL;': '\u2561',\n  'boxvl;': '\u2524',\n  'boxVR;': '\u2560',\n  'boxVr;': '\u255F',\n  'boxvR;': '\u255E',\n  'boxvr;': '\u251C',\n  'Breve;': '\u02D8',\n  'breve;': '\u02D8',\n  brvbar: '\u00A6',\n  'bsemi;': '\u204F',\n  'bsime;': '\u22CD',\n  'bsolb;': '\u29C5',\n  'bumpE;': '\u2AAE',\n  'bumpe;': '\u224F',\n  'caret;': '\u2041',\n  'caron;': '\u02C7',\n  'ccaps;': '\u2A4D',\n  Ccedil: '\u00C7',\n  ccedil: '\u00E7',\n  'Ccirc;': '\u0108',\n  'ccirc;': '\u0109',\n  'ccups;': '\u2A4C',\n  'cedil;': '\u00B8',\n  'check;': '\u2713',\n  'clubs;': '\u2663',\n  'Colon;': '\u2237',\n  'colon;': ':',\n  'comma;': ',',\n  'crarr;': '\u21B5',\n  'Cross;': '\u2A2F',\n  'cross;': '\u2717',\n  'csube;': '\u2AD1',\n  'csupe;': '\u2AD2',\n  'ctdot;': '\u22EF',\n  'cuepr;': '\u22DE',\n  'cuesc;': '\u22DF',\n  'cupor;': '\u2A45',\n  curren: '\u00A4',\n  'cuvee;': '\u22CE',\n  'cuwed;': '\u22CF',\n  'cwint;': '\u2231',\n  'Dashv;': '\u2AE4',\n  'dashv;': '\u22A3',\n  'dblac;': '\u02DD',\n  'ddarr;': '\u21CA',\n  'Delta;': '\u0394',\n  'delta;': '\u03B4',\n  'dharl;': '\u21C3',\n  'dharr;': '\u21C2',\n  'diams;': '\u2666',\n  'disin;': '\u22F2',\n  divide: '\u00F7',\n  'doteq;': '\u2250',\n  'dtdot;': '\u22F1',\n  'dtrif;': '\u25BE',\n  'duarr;': '\u21F5',\n  'duhar;': '\u296F',\n  Eacute: '\u00C9',\n  eacute: '\u00E9',\n  'Ecirc;': '\u00CA',\n  'ecirc;': '\u00EA',\n  'eDDot;': '\u2A77',\n  'efDot;': '\u2252',\n  Egrave: '\u00C8',\n  egrave: '\u00E8',\n  'Emacr;': '\u0112',\n  'emacr;': '\u0113',\n  'empty;': '\u2205',\n  'Eogon;': '\u0118',\n  'eogon;': '\u0119',\n  'eplus;': '\u2A71',\n  'epsiv;': '\u03F5',\n  'eqsim;': '\u2242',\n  'Equal;': '\u2A75',\n  'equiv;': '\u2261',\n  'erarr;': '\u2971',\n  'erDot;': '\u2253',\n  'esdot;': '\u2250',\n  'exist;': '\u2203',\n  'fflig;': '\uFB00',\n  'filig;': '\uFB01',\n  'fjlig;': 'fj',\n  'fllig;': '\uFB02',\n  'fltns;': '\u25B1',\n  'forkv;': '\u2AD9',\n  frac12: '\u00BD',\n  frac14: '\u00BC',\n  frac34: '\u00BE',\n  'frasl;': '\u2044',\n  'frown;': '\u2322',\n  'Gamma;': '\u0393',\n  'gamma;': '\u03B3',\n  'Gcirc;': '\u011C',\n  'gcirc;': '\u011D',\n  'gescc;': '\u2AA9',\n  'gimel;': '\u2137',\n  'gneqq;': '\u2269',\n  'gnsim;': '\u22E7',\n  'grave;': '`',\n  'gsime;': '\u2A8E',\n  'gsiml;': '\u2A90',\n  'gtcir;': '\u2A7A',\n  'gtdot;': '\u22D7',\n  'Hacek;': '\u02C7',\n  'harrw;': '\u21AD',\n  'Hcirc;': '\u0124',\n  'hcirc;': '\u0125',\n  'hoarr;': '\u21FF',\n  Iacute: '\u00CD',\n  iacute: '\u00ED',\n  'Icirc;': '\u00CE',\n  'icirc;': '\u00EE',\n  'iexcl;': '\u00A1',\n  Igrave: '\u00CC',\n  igrave: '\u00EC',\n  'iiint;': '\u222D',\n  'iiota;': '\u2129',\n  'IJlig;': '\u0132',\n  'ijlig;': '\u0133',\n  'Imacr;': '\u012A',\n  'imacr;': '\u012B',\n  'image;': '\u2111',\n  'imath;': '\u0131',\n  'imped;': '\u01B5',\n  'infin;': '\u221E',\n  'Iogon;': '\u012E',\n  'iogon;': '\u012F',\n  'iprod;': '\u2A3C',\n  iquest: '\u00BF',\n  'isinE;': '\u22F9',\n  'isins;': '\u22F4',\n  'isinv;': '\u2208',\n  'Iukcy;': '\u0406',\n  'iukcy;': '\u0456',\n  'Jcirc;': '\u0134',\n  'jcirc;': '\u0135',\n  'jmath;': '\u0237',\n  'Jukcy;': '\u0404',\n  'jukcy;': '\u0454',\n  'Kappa;': '\u039A',\n  'kappa;': '\u03BA',\n  'lAarr;': '\u21DA',\n  'langd;': '\u2991',\n  'laquo;': '\u00AB',\n  'larrb;': '\u21E4',\n  'lates;': '\u2AAD\uFE00',\n  'lBarr;': '\u290E',\n  'lbarr;': '\u290C',\n  'lbbrk;': '\u2772',\n  'lbrke;': '\u298B',\n  'lceil;': '\u2308',\n  'ldquo;': '\u201C',\n  'lescc;': '\u2AA8',\n  'lhard;': '\u21BD',\n  'lharu;': '\u21BC',\n  'lhblk;': '\u2584',\n  'llarr;': '\u21C7',\n  'lltri;': '\u25FA',\n  'lneqq;': '\u2268',\n  'lnsim;': '\u22E6',\n  'loang;': '\u27EC',\n  'loarr;': '\u21FD',\n  'lobrk;': '\u27E6',\n  'lopar;': '\u2985',\n  'lrarr;': '\u21C6',\n  'lrhar;': '\u21CB',\n  'lrtri;': '\u22BF',\n  'lsime;': '\u2A8D',\n  'lsimg;': '\u2A8F',\n  'lsquo;': '\u2018',\n  'ltcir;': '\u2A79',\n  'ltdot;': '\u22D6',\n  'ltrie;': '\u22B4',\n  'ltrif;': '\u25C2',\n  'mdash;': '\u2014',\n  'mDDot;': '\u223A',\n  'micro;': '\u00B5',\n  middot: '\u00B7',\n  'minus;': '\u2212',\n  'mumap;': '\u22B8',\n  'nabla;': '\u2207',\n  'napid;': '\u224B\u0338',\n  'napos;': '\u0149',\n  'natur;': '\u266E',\n  'nbump;': '\u224E\u0338',\n  'ncong;': '\u2247',\n  'ndash;': '\u2013',\n  'neArr;': '\u21D7',\n  'nearr;': '\u2197',\n  'nedot;': '\u2250\u0338',\n  'nesim;': '\u2242\u0338',\n  'ngeqq;': '\u2267\u0338',\n  'ngsim;': '\u2275',\n  'nhArr;': '\u21CE',\n  'nharr;': '\u21AE',\n  'nhpar;': '\u2AF2',\n  'nlArr;': '\u21CD',\n  'nlarr;': '\u219A',\n  'nleqq;': '\u2266\u0338',\n  'nless;': '\u226E',\n  'nlsim;': '\u2274',\n  'nltri;': '\u22EA',\n  'notin;': '\u2209',\n  'notni;': '\u220C',\n  'npart;': '\u2202\u0338',\n  'nprec;': '\u2280',\n  'nrArr;': '\u21CF',\n  'nrarr;': '\u219B',\n  'nrtri;': '\u22EB',\n  'nsime;': '\u2244',\n  'nsmid;': '\u2224',\n  'nspar;': '\u2226',\n  'nsubE;': '\u2AC5\u0338',\n  'nsube;': '\u2288',\n  'nsucc;': '\u2281',\n  'nsupE;': '\u2AC6\u0338',\n  'nsupe;': '\u2289',\n  Ntilde: '\u00D1',\n  ntilde: '\u00F1',\n  'numsp;': '\u2007',\n  'nvsim;': '\u223C\u20D2',\n  'nwArr;': '\u21D6',\n  'nwarr;': '\u2196',\n  Oacute: '\u00D3',\n  oacute: '\u00F3',\n  'Ocirc;': '\u00D4',\n  'ocirc;': '\u00F4',\n  'odash;': '\u229D',\n  'OElig;': '\u0152',\n  'oelig;': '\u0153',\n  'ofcir;': '\u29BF',\n  Ograve: '\u00D2',\n  ograve: '\u00F2',\n  'ohbar;': '\u29B5',\n  'olarr;': '\u21BA',\n  'olcir;': '\u29BE',\n  'oline;': '\u203E',\n  'Omacr;': '\u014C',\n  'omacr;': '\u014D',\n  'Omega;': '\u03A9',\n  'omega;': '\u03C9',\n  'operp;': '\u29B9',\n  'oplus;': '\u2295',\n  'orarr;': '\u21BB',\n  'order;': '\u2134',\n  Oslash: '\u00D8',\n  oslash: '\u00F8',\n  Otilde: '\u00D5',\n  otilde: '\u00F5',\n  'ovbar;': '\u233D',\n  'parsl;': '\u2AFD',\n  'phone;': '\u260E',\n  'plusb;': '\u229E',\n  'pluse;': '\u2A72',\n  plusmn: '\u00B1',\n  'pound;': '\u00A3',\n  'prcue;': '\u227C',\n  'Prime;': '\u2033',\n  'prime;': '\u2032',\n  'prnap;': '\u2AB9',\n  'prsim;': '\u227E',\n  'quest;': '?',\n  'rAarr;': '\u21DB',\n  'radic;': '\u221A',\n  'rangd;': '\u2992',\n  'range;': '\u29A5',\n  'raquo;': '\u00BB',\n  'rarrb;': '\u21E5',\n  'rarrc;': '\u2933',\n  'rarrw;': '\u219D',\n  'ratio;': '\u2236',\n  'RBarr;': '\u2910',\n  'rBarr;': '\u290F',\n  'rbarr;': '\u290D',\n  'rbbrk;': '\u2773',\n  'rbrke;': '\u298C',\n  'rceil;': '\u2309',\n  'rdquo;': '\u201D',\n  'reals;': '\u211D',\n  'rhard;': '\u21C1',\n  'rharu;': '\u21C0',\n  'rlarr;': '\u21C4',\n  'rlhar;': '\u21CC',\n  'rnmid;': '\u2AEE',\n  'roang;': '\u27ED',\n  'roarr;': '\u21FE',\n  'robrk;': '\u27E7',\n  'ropar;': '\u2986',\n  'rrarr;': '\u21C9',\n  'rsquo;': '\u2019',\n  'rtrie;': '\u22B5',\n  'rtrif;': '\u25B8',\n  'sbquo;': '\u201A',\n  'sccue;': '\u227D',\n  'Scirc;': '\u015C',\n  'scirc;': '\u015D',\n  'scnap;': '\u2ABA',\n  'scsim;': '\u227F',\n  'sdotb;': '\u22A1',\n  'sdote;': '\u2A66',\n  'seArr;': '\u21D8',\n  'searr;': '\u2198',\n  'setmn;': '\u2216',\n  'sharp;': '\u266F',\n  'Sigma;': '\u03A3',\n  'sigma;': '\u03C3',\n  'simeq;': '\u2243',\n  'simgE;': '\u2AA0',\n  'simlE;': '\u2A9F',\n  'simne;': '\u2246',\n  'slarr;': '\u2190',\n  'smile;': '\u2323',\n  'smtes;': '\u2AAC\uFE00',\n  'sqcap;': '\u2293',\n  'sqcup;': '\u2294',\n  'sqsub;': '\u228F',\n  'sqsup;': '\u2290',\n  'srarr;': '\u2192',\n  'starf;': '\u2605',\n  'strns;': '\u00AF',\n  'subnE;': '\u2ACB',\n  'subne;': '\u228A',\n  'supnE;': '\u2ACC',\n  'supne;': '\u228B',\n  'swArr;': '\u21D9',\n  'swarr;': '\u2199',\n  'szlig;': '\u00DF',\n  'Theta;': '\u0398',\n  'theta;': '\u03B8',\n  'thkap;': '\u2248',\n  'THORN;': '\u00DE',\n  'thorn;': '\u00FE',\n  'Tilde;': '\u223C',\n  'tilde;': '\u02DC',\n  'times;': '\u00D7',\n  'TRADE;': '\u2122',\n  'trade;': '\u2122',\n  'trisb;': '\u29CD',\n  'TSHcy;': '\u040B',\n  'tshcy;': '\u045B',\n  'twixt;': '\u226C',\n  Uacute: '\u00DA',\n  uacute: '\u00FA',\n  'Ubrcy;': '\u040E',\n  'ubrcy;': '\u045E',\n  'Ucirc;': '\u00DB',\n  'ucirc;': '\u00FB',\n  'udarr;': '\u21C5',\n  'udhar;': '\u296E',\n  Ugrave: '\u00D9',\n  ugrave: '\u00F9',\n  'uharl;': '\u21BF',\n  'uharr;': '\u21BE',\n  'uhblk;': '\u2580',\n  'ultri;': '\u25F8',\n  'Umacr;': '\u016A',\n  'umacr;': '\u016B',\n  'Union;': '\u22C3',\n  'Uogon;': '\u0172',\n  'uogon;': '\u0173',\n  'uplus;': '\u228E',\n  'upsih;': '\u03D2',\n  'UpTee;': '\u22A5',\n  'Uring;': '\u016E',\n  'uring;': '\u016F',\n  'urtri;': '\u25F9',\n  'utdot;': '\u22F0',\n  'utrif;': '\u25B4',\n  'uuarr;': '\u21C8',\n  'varpi;': '\u03D6',\n  'vBarv;': '\u2AE9',\n  'VDash;': '\u22AB',\n  'Vdash;': '\u22A9',\n  'vDash;': '\u22A8',\n  'vdash;': '\u22A2',\n  'veeeq;': '\u225A',\n  'vltri;': '\u22B2',\n  'vnsub;': '\u2282\u20D2',\n  'vnsup;': '\u2283\u20D2',\n  'vprop;': '\u221D',\n  'vrtri;': '\u22B3',\n  'Wcirc;': '\u0174',\n  'wcirc;': '\u0175',\n  'Wedge;': '\u22C0',\n  'wedge;': '\u2227',\n  'xcirc;': '\u25EF',\n  'xdtri;': '\u25BD',\n  'xhArr;': '\u27FA',\n  'xharr;': '\u27F7',\n  'xlArr;': '\u27F8',\n  'xlarr;': '\u27F5',\n  'xodot;': '\u2A00',\n  'xrArr;': '\u27F9',\n  'xrarr;': '\u27F6',\n  'xutri;': '\u25B3',\n  Yacute: '\u00DD',\n  yacute: '\u00FD',\n  'Ycirc;': '\u0176',\n  'ycirc;': '\u0177',\n  'Aacute;': '\u00C1',\n  'aacute;': '\u00E1',\n  'Abreve;': '\u0102',\n  'abreve;': '\u0103',\n  'Agrave;': '\u00C0',\n  'agrave;': '\u00E0',\n  'andand;': '\u2A55',\n  'angmsd;': '\u2221',\n  'angsph;': '\u2222',\n  'apacir;': '\u2A6F',\n  'approx;': '\u2248',\n  'Assign;': '\u2254',\n  'Atilde;': '\u00C3',\n  'atilde;': '\u00E3',\n  'barvee;': '\u22BD',\n  'Barwed;': '\u2306',\n  'barwed;': '\u2305',\n  'becaus;': '\u2235',\n  'bernou;': '\u212C',\n  'bigcap;': '\u22C2',\n  'bigcup;': '\u22C3',\n  'bigvee;': '\u22C1',\n  'bkarow;': '\u290D',\n  'bottom;': '\u22A5',\n  'bowtie;': '\u22C8',\n  'boxbox;': '\u29C9',\n  'bprime;': '\u2035',\n  'brvbar;': '\u00A6',\n  'bullet;': '\u2022',\n  'Bumpeq;': '\u224E',\n  'bumpeq;': '\u224F',\n  'Cacute;': '\u0106',\n  'cacute;': '\u0107',\n  'capand;': '\u2A44',\n  'capcap;': '\u2A4B',\n  'capcup;': '\u2A47',\n  'capdot;': '\u2A40',\n  'Ccaron;': '\u010C',\n  'ccaron;': '\u010D',\n  'Ccedil;': '\u00C7',\n  'ccedil;': '\u00E7',\n  'circeq;': '\u2257',\n  'cirmid;': '\u2AEF',\n  'Colone;': '\u2A74',\n  'colone;': '\u2254',\n  'commat;': '@',\n  'compfn;': '\u2218',\n  'Conint;': '\u222F',\n  'conint;': '\u222E',\n  'coprod;': '\u2210',\n  'copysr;': '\u2117',\n  'cularr;': '\u21B6',\n  'CupCap;': '\u224D',\n  'cupcap;': '\u2A46',\n  'cupcup;': '\u2A4A',\n  'cupdot;': '\u228D',\n  'curarr;': '\u21B7',\n  'curren;': '\u00A4',\n  'cylcty;': '\u232D',\n  'Dagger;': '\u2021',\n  'dagger;': '\u2020',\n  'daleth;': '\u2138',\n  'Dcaron;': '\u010E',\n  'dcaron;': '\u010F',\n  'dfisht;': '\u297F',\n  'divide;': '\u00F7',\n  'divonx;': '\u22C7',\n  'dlcorn;': '\u231E',\n  'dlcrop;': '\u230D',\n  'dollar;': '$',\n  'DotDot;': '\u20DC',\n  'drcorn;': '\u231F',\n  'drcrop;': '\u230C',\n  'Dstrok;': '\u0110',\n  'dstrok;': '\u0111',\n  'Eacute;': '\u00C9',\n  'eacute;': '\u00E9',\n  'easter;': '\u2A6E',\n  'Ecaron;': '\u011A',\n  'ecaron;': '\u011B',\n  'ecolon;': '\u2255',\n  'Egrave;': '\u00C8',\n  'egrave;': '\u00E8',\n  'egsdot;': '\u2A98',\n  'elsdot;': '\u2A97',\n  'emptyv;': '\u2205',\n  'emsp13;': '\u2004',\n  'emsp14;': '\u2005',\n  'eparsl;': '\u29E3',\n  'eqcirc;': '\u2256',\n  'equals;': '=',\n  'equest;': '\u225F',\n  'Exists;': '\u2203',\n  'female;': '\u2640',\n  'ffilig;': '\uFB03',\n  'ffllig;': '\uFB04',\n  'ForAll;': '\u2200',\n  'forall;': '\u2200',\n  'frac12;': '\u00BD',\n  'frac13;': '\u2153',\n  'frac14;': '\u00BC',\n  'frac15;': '\u2155',\n  'frac16;': '\u2159',\n  'frac18;': '\u215B',\n  'frac23;': '\u2154',\n  'frac25;': '\u2156',\n  'frac34;': '\u00BE',\n  'frac35;': '\u2157',\n  'frac38;': '\u215C',\n  'frac45;': '\u2158',\n  'frac56;': '\u215A',\n  'frac58;': '\u215D',\n  'frac78;': '\u215E',\n  'gacute;': '\u01F5',\n  'Gammad;': '\u03DC',\n  'gammad;': '\u03DD',\n  'Gbreve;': '\u011E',\n  'gbreve;': '\u011F',\n  'Gcedil;': '\u0122',\n  'gesdot;': '\u2A80',\n  'gesles;': '\u2A94',\n  'gtlPar;': '\u2995',\n  'gtrarr;': '\u2978',\n  'gtrdot;': '\u22D7',\n  'gtrsim;': '\u2273',\n  'hairsp;': '\u200A',\n  'hamilt;': '\u210B',\n  'HARDcy;': '\u042A',\n  'hardcy;': '\u044A',\n  'hearts;': '\u2665',\n  'hellip;': '\u2026',\n  'hercon;': '\u22B9',\n  'homtht;': '\u223B',\n  'horbar;': '\u2015',\n  'hslash;': '\u210F',\n  'Hstrok;': '\u0126',\n  'hstrok;': '\u0127',\n  'hybull;': '\u2043',\n  'hyphen;': '\u2010',\n  'Iacute;': '\u00CD',\n  'iacute;': '\u00ED',\n  'Igrave;': '\u00CC',\n  'igrave;': '\u00EC',\n  'iiiint;': '\u2A0C',\n  'iinfin;': '\u29DC',\n  'incare;': '\u2105',\n  'inodot;': '\u0131',\n  'intcal;': '\u22BA',\n  'iquest;': '\u00BF',\n  'isinsv;': '\u22F3',\n  'Itilde;': '\u0128',\n  'itilde;': '\u0129',\n  'Jsercy;': '\u0408',\n  'jsercy;': '\u0458',\n  'kappav;': '\u03F0',\n  'Kcedil;': '\u0136',\n  'kcedil;': '\u0137',\n  'kgreen;': '\u0138',\n  'Lacute;': '\u0139',\n  'lacute;': '\u013A',\n  'lagran;': '\u2112',\n  'Lambda;': '\u039B',\n  'lambda;': '\u03BB',\n  'langle;': '\u27E8',\n  'larrfs;': '\u291D',\n  'larrhk;': '\u21A9',\n  'larrlp;': '\u21AB',\n  'larrpl;': '\u2939',\n  'larrtl;': '\u21A2',\n  'lAtail;': '\u291B',\n  'latail;': '\u2919',\n  'lbrace;': '{',\n  'lbrack;': '[',\n  'Lcaron;': '\u013D',\n  'lcaron;': '\u013E',\n  'Lcedil;': '\u013B',\n  'lcedil;': '\u013C',\n  'ldquor;': '\u201E',\n  'lesdot;': '\u2A7F',\n  'lesges;': '\u2A93',\n  'lfisht;': '\u297C',\n  'lfloor;': '\u230A',\n  'lharul;': '\u296A',\n  'llhard;': '\u296B',\n  'Lmidot;': '\u013F',\n  'lmidot;': '\u0140',\n  'lmoust;': '\u23B0',\n  'loplus;': '\u2A2D',\n  'lowast;': '\u2217',\n  'lowbar;': '_',\n  'lparlt;': '\u2993',\n  'lrhard;': '\u296D',\n  'lsaquo;': '\u2039',\n  'lsquor;': '\u201A',\n  'Lstrok;': '\u0141',\n  'lstrok;': '\u0142',\n  'lthree;': '\u22CB',\n  'ltimes;': '\u22C9',\n  'ltlarr;': '\u2976',\n  'ltrPar;': '\u2996',\n  'mapsto;': '\u21A6',\n  'marker;': '\u25AE',\n  'mcomma;': '\u2A29',\n  'midast;': '*',\n  'midcir;': '\u2AF0',\n  'middot;': '\u00B7',\n  'minusb;': '\u229F',\n  'minusd;': '\u2238',\n  'mnplus;': '\u2213',\n  'models;': '\u22A7',\n  'mstpos;': '\u223E',\n  'Nacute;': '\u0143',\n  'nacute;': '\u0144',\n  'nbumpe;': '\u224F\u0338',\n  'Ncaron;': '\u0147',\n  'ncaron;': '\u0148',\n  'Ncedil;': '\u0145',\n  'ncedil;': '\u0146',\n  'nearhk;': '\u2924',\n  'nequiv;': '\u2262',\n  'nesear;': '\u2928',\n  'nexist;': '\u2204',\n  'nltrie;': '\u22EC',\n  'notinE;': '\u22F9\u0338',\n  'nparsl;': '\u2AFD\u20E5',\n  'nprcue;': '\u22E0',\n  'nrarrc;': '\u2933\u0338',\n  'nrarrw;': '\u219D\u0338',\n  'nrtrie;': '\u22ED',\n  'nsccue;': '\u22E1',\n  'nsimeq;': '\u2244',\n  'Ntilde;': '\u00D1',\n  'ntilde;': '\u00F1',\n  'numero;': '\u2116',\n  'nVDash;': '\u22AF',\n  'nVdash;': '\u22AE',\n  'nvDash;': '\u22AD',\n  'nvdash;': '\u22AC',\n  'nvHarr;': '\u2904',\n  'nvlArr;': '\u2902',\n  'nvrArr;': '\u2903',\n  'nwarhk;': '\u2923',\n  'nwnear;': '\u2927',\n  'Oacute;': '\u00D3',\n  'oacute;': '\u00F3',\n  'Odblac;': '\u0150',\n  'odblac;': '\u0151',\n  'odsold;': '\u29BC',\n  'Ograve;': '\u00D2',\n  'ograve;': '\u00F2',\n  'ominus;': '\u2296',\n  'origof;': '\u22B6',\n  'Oslash;': '\u00D8',\n  'oslash;': '\u00F8',\n  'Otilde;': '\u00D5',\n  'otilde;': '\u00F5',\n  'Otimes;': '\u2A37',\n  'otimes;': '\u2297',\n  'parsim;': '\u2AF3',\n  'percnt;': '%',\n  'period;': '.',\n  'permil;': '\u2030',\n  'phmmat;': '\u2133',\n  'planck;': '\u210F',\n  'plankv;': '\u210F',\n  'plusdo;': '\u2214',\n  'plusdu;': '\u2A25',\n  'plusmn;': '\u00B1',\n  'preceq;': '\u2AAF',\n  'primes;': '\u2119',\n  'prnsim;': '\u22E8',\n  'propto;': '\u221D',\n  'prurel;': '\u22B0',\n  'puncsp;': '\u2008',\n  'qprime;': '\u2057',\n  'Racute;': '\u0154',\n  'racute;': '\u0155',\n  'rangle;': '\u27E9',\n  'rarrap;': '\u2975',\n  'rarrfs;': '\u291E',\n  'rarrhk;': '\u21AA',\n  'rarrlp;': '\u21AC',\n  'rarrpl;': '\u2945',\n  'Rarrtl;': '\u2916',\n  'rarrtl;': '\u21A3',\n  'rAtail;': '\u291C',\n  'ratail;': '\u291A',\n  'rbrace;': '}',\n  'rbrack;': ']',\n  'Rcaron;': '\u0158',\n  'rcaron;': '\u0159',\n  'Rcedil;': '\u0156',\n  'rcedil;': '\u0157',\n  'rdquor;': '\u201D',\n  'rfisht;': '\u297D',\n  'rfloor;': '\u230B',\n  'rharul;': '\u296C',\n  'rmoust;': '\u23B1',\n  'roplus;': '\u2A2E',\n  'rpargt;': '\u2994',\n  'rsaquo;': '\u203A',\n  'rsquor;': '\u2019',\n  'rthree;': '\u22CC',\n  'rtimes;': '\u22CA',\n  'Sacute;': '\u015A',\n  'sacute;': '\u015B',\n  'Scaron;': '\u0160',\n  'scaron;': '\u0161',\n  'Scedil;': '\u015E',\n  'scedil;': '\u015F',\n  'scnsim;': '\u22E9',\n  'searhk;': '\u2925',\n  'seswar;': '\u2929',\n  'sfrown;': '\u2322',\n  'SHCHcy;': '\u0429',\n  'shchcy;': '\u0449',\n  'sigmaf;': '\u03C2',\n  'sigmav;': '\u03C2',\n  'simdot;': '\u2A6A',\n  'smashp;': '\u2A33',\n  'SOFTcy;': '\u042C',\n  'softcy;': '\u044C',\n  'solbar;': '\u233F',\n  'spades;': '\u2660',\n  'sqcaps;': '\u2293\uFE00',\n  'sqcups;': '\u2294\uFE00',\n  'sqsube;': '\u2291',\n  'sqsupe;': '\u2292',\n  'Square;': '\u25A1',\n  'square;': '\u25A1',\n  'squarf;': '\u25AA',\n  'ssetmn;': '\u2216',\n  'ssmile;': '\u2323',\n  'sstarf;': '\u22C6',\n  'subdot;': '\u2ABD',\n  'Subset;': '\u22D0',\n  'subset;': '\u2282',\n  'subsim;': '\u2AC7',\n  'subsub;': '\u2AD5',\n  'subsup;': '\u2AD3',\n  'succeq;': '\u2AB0',\n  'supdot;': '\u2ABE',\n  'Supset;': '\u22D1',\n  'supset;': '\u2283',\n  'supsim;': '\u2AC8',\n  'supsub;': '\u2AD4',\n  'supsup;': '\u2AD6',\n  'swarhk;': '\u2926',\n  'swnwar;': '\u292A',\n  'target;': '\u2316',\n  'Tcaron;': '\u0164',\n  'tcaron;': '\u0165',\n  'Tcedil;': '\u0162',\n  'tcedil;': '\u0163',\n  'telrec;': '\u2315',\n  'there4;': '\u2234',\n  'thetav;': '\u03D1',\n  'thinsp;': '\u2009',\n  'thksim;': '\u223C',\n  'timesb;': '\u22A0',\n  'timesd;': '\u2A30',\n  'topbot;': '\u2336',\n  'topcir;': '\u2AF1',\n  'tprime;': '\u2034',\n  'tridot;': '\u25EC',\n  'Tstrok;': '\u0166',\n  'tstrok;': '\u0167',\n  'Uacute;': '\u00DA',\n  'uacute;': '\u00FA',\n  'Ubreve;': '\u016C',\n  'ubreve;': '\u016D',\n  'Udblac;': '\u0170',\n  'udblac;': '\u0171',\n  'ufisht;': '\u297E',\n  'Ugrave;': '\u00D9',\n  'ugrave;': '\u00F9',\n  'ulcorn;': '\u231C',\n  'ulcrop;': '\u230F',\n  'urcorn;': '\u231D',\n  'urcrop;': '\u230E',\n  'Utilde;': '\u0168',\n  'utilde;': '\u0169',\n  'vangrt;': '\u299C',\n  'varphi;': '\u03D5',\n  'varrho;': '\u03F1',\n  'Vdashl;': '\u2AE6',\n  'veebar;': '\u22BB',\n  'vellip;': '\u22EE',\n  'Verbar;': '\u2016',\n  'verbar;': '|',\n  'vsubnE;': '\u2ACB\uFE00',\n  'vsubne;': '\u228A\uFE00',\n  'vsupnE;': '\u2ACC\uFE00',\n  'vsupne;': '\u228B\uFE00',\n  'Vvdash;': '\u22AA',\n  'wedbar;': '\u2A5F',\n  'wedgeq;': '\u2259',\n  'weierp;': '\u2118',\n  'wreath;': '\u2240',\n  'xoplus;': '\u2A01',\n  'xotime;': '\u2A02',\n  'xsqcup;': '\u2A06',\n  'xuplus;': '\u2A04',\n  'xwedge;': '\u22C0',\n  'Yacute;': '\u00DD',\n  'yacute;': '\u00FD',\n  'Zacute;': '\u0179',\n  'zacute;': '\u017A',\n  'Zcaron;': '\u017D',\n  'zcaron;': '\u017E',\n  'zeetrf;': '\u2128',\n  'alefsym;': '\u2135',\n  'angrtvb;': '\u22BE',\n  'angzarr;': '\u237C',\n  'asympeq;': '\u224D',\n  'backsim;': '\u223D',\n  'Because;': '\u2235',\n  'because;': '\u2235',\n  'bemptyv;': '\u29B0',\n  'between;': '\u226C',\n  'bigcirc;': '\u25EF',\n  'bigodot;': '\u2A00',\n  'bigstar;': '\u2605',\n  'bnequiv;': '\u2261\u20E5',\n  'boxplus;': '\u229E',\n  'Cayleys;': '\u212D',\n  'Cconint;': '\u2230',\n  'ccupssm;': '\u2A50',\n  'Cedilla;': '\u00B8',\n  'cemptyv;': '\u29B2',\n  'cirscir;': '\u29C2',\n  'coloneq;': '\u2254',\n  'congdot;': '\u2A6D',\n  'cudarrl;': '\u2938',\n  'cudarrr;': '\u2935',\n  'cularrp;': '\u293D',\n  'curarrm;': '\u293C',\n  'dbkarow;': '\u290F',\n  'ddagger;': '\u2021',\n  'ddotseq;': '\u2A77',\n  'demptyv;': '\u29B1',\n  'Diamond;': '\u22C4',\n  'diamond;': '\u22C4',\n  'digamma;': '\u03DD',\n  'dotplus;': '\u2214',\n  'DownTee;': '\u22A4',\n  'dwangle;': '\u29A6',\n  'Element;': '\u2208',\n  'Epsilon;': '\u0395',\n  'epsilon;': '\u03B5',\n  'eqcolon;': '\u2255',\n  'equivDD;': '\u2A78',\n  'gesdoto;': '\u2A82',\n  'gtquest;': '\u2A7C',\n  'gtrless;': '\u2277',\n  'harrcir;': '\u2948',\n  'Implies;': '\u21D2',\n  'intprod;': '\u2A3C',\n  'isindot;': '\u22F5',\n  'larrbfs;': '\u291F',\n  'larrsim;': '\u2973',\n  'lbrksld;': '\u298F',\n  'lbrkslu;': '\u298D',\n  'ldrdhar;': '\u2967',\n  'LeftTee;': '\u22A3',\n  'lesdoto;': '\u2A81',\n  'lessdot;': '\u22D6',\n  'lessgtr;': '\u2276',\n  'lesssim;': '\u2272',\n  'lotimes;': '\u2A34',\n  'lozenge;': '\u25CA',\n  'ltquest;': '\u2A7B',\n  'luruhar;': '\u2966',\n  'maltese;': '\u2720',\n  'minusdu;': '\u2A2A',\n  'napprox;': '\u2249',\n  'natural;': '\u266E',\n  'nearrow;': '\u2197',\n  'NewLine;': '\\n',\n  'nexists;': '\u2204',\n  'NoBreak;': '\u2060',\n  'notinva;': '\u2209',\n  'notinvb;': '\u22F7',\n  'notinvc;': '\u22F6',\n  'NotLess;': '\u226E',\n  'notniva;': '\u220C',\n  'notnivb;': '\u22FE',\n  'notnivc;': '\u22FD',\n  'npolint;': '\u2A14',\n  'npreceq;': '\u2AAF\u0338',\n  'nsqsube;': '\u22E2',\n  'nsqsupe;': '\u22E3',\n  'nsubset;': '\u2282\u20D2',\n  'nsucceq;': '\u2AB0\u0338',\n  'nsupset;': '\u2283\u20D2',\n  'nvinfin;': '\u29DE',\n  'nvltrie;': '\u22B4\u20D2',\n  'nvrtrie;': '\u22B5\u20D2',\n  'nwarrow;': '\u2196',\n  'olcross;': '\u29BB',\n  'Omicron;': '\u039F',\n  'omicron;': '\u03BF',\n  'orderof;': '\u2134',\n  'orslope;': '\u2A57',\n  'OverBar;': '\u203E',\n  'pertenk;': '\u2031',\n  'planckh;': '\u210E',\n  'pluscir;': '\u2A22',\n  'plussim;': '\u2A26',\n  'plustwo;': '\u2A27',\n  'precsim;': '\u227E',\n  'Product;': '\u220F',\n  'quatint;': '\u2A16',\n  'questeq;': '\u225F',\n  'rarrbfs;': '\u2920',\n  'rarrsim;': '\u2974',\n  'rbrksld;': '\u298E',\n  'rbrkslu;': '\u2990',\n  'rdldhar;': '\u2969',\n  'realine;': '\u211B',\n  'rotimes;': '\u2A35',\n  'ruluhar;': '\u2968',\n  'searrow;': '\u2198',\n  'simplus;': '\u2A24',\n  'simrarr;': '\u2972',\n  'subedot;': '\u2AC3',\n  'submult;': '\u2AC1',\n  'subplus;': '\u2ABF',\n  'subrarr;': '\u2979',\n  'succsim;': '\u227F',\n  'supdsub;': '\u2AD8',\n  'supedot;': '\u2AC4',\n  'suphsol;': '\u27C9',\n  'suphsub;': '\u2AD7',\n  'suplarr;': '\u297B',\n  'supmult;': '\u2AC2',\n  'supplus;': '\u2AC0',\n  'swarrow;': '\u2199',\n  'topfork;': '\u2ADA',\n  'triplus;': '\u2A39',\n  'tritime;': '\u2A3B',\n  'UpArrow;': '\u2191',\n  'Uparrow;': '\u21D1',\n  'uparrow;': '\u2191',\n  'Upsilon;': '\u03A5',\n  'upsilon;': '\u03C5',\n  'uwangle;': '\u29A7',\n  'vzigzag;': '\u299A',\n  'zigrarr;': '\u21DD',\n  'andslope;': '\u2A58',\n  'angmsdaa;': '\u29A8',\n  'angmsdab;': '\u29A9',\n  'angmsdac;': '\u29AA',\n  'angmsdad;': '\u29AB',\n  'angmsdae;': '\u29AC',\n  'angmsdaf;': '\u29AD',\n  'angmsdag;': '\u29AE',\n  'angmsdah;': '\u29AF',\n  'angrtvbd;': '\u299D',\n  'approxeq;': '\u224A',\n  'awconint;': '\u2233',\n  'backcong;': '\u224C',\n  'barwedge;': '\u2305',\n  'bbrktbrk;': '\u23B6',\n  'bigoplus;': '\u2A01',\n  'bigsqcup;': '\u2A06',\n  'biguplus;': '\u2A04',\n  'bigwedge;': '\u22C0',\n  'boxminus;': '\u229F',\n  'boxtimes;': '\u22A0',\n  'bsolhsub;': '\u27C8',\n  'capbrcup;': '\u2A49',\n  'circledR;': '\u00AE',\n  'circledS;': '\u24C8',\n  'cirfnint;': '\u2A10',\n  'clubsuit;': '\u2663',\n  'cupbrcap;': '\u2A48',\n  'curlyvee;': '\u22CE',\n  'cwconint;': '\u2232',\n  'DDotrahd;': '\u2911',\n  'doteqdot;': '\u2251',\n  'DotEqual;': '\u2250',\n  'dotminus;': '\u2238',\n  'drbkarow;': '\u2910',\n  'dzigrarr;': '\u27FF',\n  'elinters;': '\u23E7',\n  'emptyset;': '\u2205',\n  'eqvparsl;': '\u29E5',\n  'fpartint;': '\u2A0D',\n  'geqslant;': '\u2A7E',\n  'gesdotol;': '\u2A84',\n  'gnapprox;': '\u2A8A',\n  'hksearow;': '\u2925',\n  'hkswarow;': '\u2926',\n  'imagline;': '\u2110',\n  'imagpart;': '\u2111',\n  'infintie;': '\u29DD',\n  'integers;': '\u2124',\n  'Integral;': '\u222B',\n  'intercal;': '\u22BA',\n  'intlarhk;': '\u2A17',\n  'laemptyv;': '\u29B4',\n  'ldrushar;': '\u294B',\n  'leqslant;': '\u2A7D',\n  'lesdotor;': '\u2A83',\n  'LessLess;': '\u2AA1',\n  'llcorner;': '\u231E',\n  'lnapprox;': '\u2A89',\n  'lrcorner;': '\u231F',\n  'lurdshar;': '\u294A',\n  'mapstoup;': '\u21A5',\n  'multimap;': '\u22B8',\n  'naturals;': '\u2115',\n  'ncongdot;': '\u2A6D\u0338',\n  'NotEqual;': '\u2260',\n  'notindot;': '\u22F5\u0338',\n  'NotTilde;': '\u2241',\n  'otimesas;': '\u2A36',\n  'parallel;': '\u2225',\n  'PartialD;': '\u2202',\n  'plusacir;': '\u2A23',\n  'pointint;': '\u2A15',\n  'Precedes;': '\u227A',\n  'precneqq;': '\u2AB5',\n  'precnsim;': '\u22E8',\n  'profalar;': '\u232E',\n  'profline;': '\u2312',\n  'profsurf;': '\u2313',\n  'raemptyv;': '\u29B3',\n  'realpart;': '\u211C',\n  'RightTee;': '\u22A2',\n  'rppolint;': '\u2A12',\n  'rtriltri;': '\u29CE',\n  'scpolint;': '\u2A13',\n  'setminus;': '\u2216',\n  'shortmid;': '\u2223',\n  'smeparsl;': '\u29E4',\n  'sqsubset;': '\u228F',\n  'sqsupset;': '\u2290',\n  'subseteq;': '\u2286',\n  'Succeeds;': '\u227B',\n  'succneqq;': '\u2AB6',\n  'succnsim;': '\u22E9',\n  'SuchThat;': '\u220B',\n  'Superset;': '\u2283',\n  'supseteq;': '\u2287',\n  'thetasym;': '\u03D1',\n  'thicksim;': '\u223C',\n  'timesbar;': '\u2A31',\n  'triangle;': '\u25B5',\n  'triminus;': '\u2A3A',\n  'trpezium;': '\u23E2',\n  'Uarrocir;': '\u2949',\n  'ulcorner;': '\u231C',\n  'UnderBar;': '_',\n  'urcorner;': '\u231D',\n  'varkappa;': '\u03F0',\n  'varsigma;': '\u03C2',\n  'vartheta;': '\u03D1',\n  'backprime;': '\u2035',\n  'backsimeq;': '\u22CD',\n  'Backslash;': '\u2216',\n  'bigotimes;': '\u2A02',\n  'CenterDot;': '\u00B7',\n  'centerdot;': '\u00B7',\n  'checkmark;': '\u2713',\n  'CircleDot;': '\u2299',\n  'complexes;': '\u2102',\n  'Congruent;': '\u2261',\n  'Coproduct;': '\u2210',\n  'dotsquare;': '\u22A1',\n  'DoubleDot;': '\u00A8',\n  'DownArrow;': '\u2193',\n  'Downarrow;': '\u21D3',\n  'downarrow;': '\u2193',\n  'DownBreve;': '\u0311',\n  'gtrapprox;': '\u2A86',\n  'gtreqless;': '\u22DB',\n  'gvertneqq;': '\u2269\uFE00',\n  'heartsuit;': '\u2665',\n  'HumpEqual;': '\u224F',\n  'LeftArrow;': '\u2190',\n  'Leftarrow;': '\u21D0',\n  'leftarrow;': '\u2190',\n  'LeftFloor;': '\u230A',\n  'lesseqgtr;': '\u22DA',\n  'LessTilde;': '\u2272',\n  'lvertneqq;': '\u2268\uFE00',\n  'Mellintrf;': '\u2133',\n  'MinusPlus;': '\u2213',\n  'ngeqslant;': '\u2A7E\u0338',\n  'nleqslant;': '\u2A7D\u0338',\n  'NotCupCap;': '\u226D',\n  'NotExists;': '\u2204',\n  'NotSubset;': '\u2282\u20D2',\n  'nparallel;': '\u2226',\n  'nshortmid;': '\u2224',\n  'nsubseteq;': '\u2288',\n  'nsupseteq;': '\u2289',\n  'OverBrace;': '\u23DE',\n  'pitchfork;': '\u22D4',\n  'PlusMinus;': '\u00B1',\n  'rationals;': '\u211A',\n  'spadesuit;': '\u2660',\n  'subseteqq;': '\u2AC5',\n  'subsetneq;': '\u228A',\n  'supseteqq;': '\u2AC6',\n  'supsetneq;': '\u228B',\n  'Therefore;': '\u2234',\n  'therefore;': '\u2234',\n  'ThinSpace;': '\u2009',\n  'triangleq;': '\u225C',\n  'TripleDot;': '\u20DB',\n  'UnionPlus;': '\u228E',\n  'varpropto;': '\u221D',\n  'Bernoullis;': '\u212C',\n  'circledast;': '\u229B',\n  'CirclePlus;': '\u2295',\n  'complement;': '\u2201',\n  'curlywedge;': '\u22CF',\n  'eqslantgtr;': '\u2A96',\n  'EqualTilde;': '\u2242',\n  'Fouriertrf;': '\u2131',\n  'gtreqqless;': '\u2A8C',\n  'ImaginaryI;': '\u2148',\n  'Laplacetrf;': '\u2112',\n  'LeftVector;': '\u21BC',\n  'lessapprox;': '\u2A85',\n  'lesseqqgtr;': '\u2A8B',\n  'Lleftarrow;': '\u21DA',\n  'lmoustache;': '\u23B0',\n  'longmapsto;': '\u27FC',\n  'mapstodown;': '\u21A7',\n  'mapstoleft;': '\u21A4',\n  'nLeftarrow;': '\u21CD',\n  'nleftarrow;': '\u219A',\n  'NotElement;': '\u2209',\n  'NotGreater;': '\u226F',\n  'nsubseteqq;': '\u2AC5\u0338',\n  'nsupseteqq;': '\u2AC6\u0338',\n  'precapprox;': '\u2AB7',\n  'Proportion;': '\u2237',\n  'RightArrow;': '\u2192',\n  'Rightarrow;': '\u21D2',\n  'rightarrow;': '\u2192',\n  'RightFloor;': '\u230B',\n  'rmoustache;': '\u23B1',\n  'sqsubseteq;': '\u2291',\n  'sqsupseteq;': '\u2292',\n  'subsetneqq;': '\u2ACB',\n  'succapprox;': '\u2AB8',\n  'supsetneqq;': '\u2ACC',\n  'ThickSpace;': '\u205F\u200A',\n  'TildeEqual;': '\u2243',\n  'TildeTilde;': '\u2248',\n  'UnderBrace;': '\u23DF',\n  'UpArrowBar;': '\u2912',\n  'UpTeeArrow;': '\u21A5',\n  'upuparrows;': '\u21C8',\n  'varepsilon;': '\u03F5',\n  'varnothing;': '\u2205',\n  'backepsilon;': '\u03F6',\n  'blacksquare;': '\u25AA',\n  'circledcirc;': '\u229A',\n  'circleddash;': '\u229D',\n  'CircleMinus;': '\u2296',\n  'CircleTimes;': '\u2297',\n  'curlyeqprec;': '\u22DE',\n  'curlyeqsucc;': '\u22DF',\n  'diamondsuit;': '\u2666',\n  'eqslantless;': '\u2A95',\n  'Equilibrium;': '\u21CC',\n  'expectation;': '\u2130',\n  'GreaterLess;': '\u2277',\n  'LeftCeiling;': '\u2308',\n  'LessGreater;': '\u2276',\n  'MediumSpace;': '\u205F',\n  'NotLessLess;': '\u226A\u0338',\n  'NotPrecedes;': '\u2280',\n  'NotSucceeds;': '\u2281',\n  'NotSuperset;': '\u2283\u20D2',\n  'nRightarrow;': '\u21CF',\n  'nrightarrow;': '\u219B',\n  'OverBracket;': '\u23B4',\n  'preccurlyeq;': '\u227C',\n  'precnapprox;': '\u2AB9',\n  'quaternions;': '\u210D',\n  'RightVector;': '\u21C0',\n  'Rrightarrow;': '\u21DB',\n  'RuleDelayed;': '\u29F4',\n  'SmallCircle;': '\u2218',\n  'SquareUnion;': '\u2294',\n  'straightphi;': '\u03D5',\n  'SubsetEqual;': '\u2286',\n  'succcurlyeq;': '\u227D',\n  'succnapprox;': '\u2ABA',\n  'thickapprox;': '\u2248',\n  'UpDownArrow;': '\u2195',\n  'Updownarrow;': '\u21D5',\n  'updownarrow;': '\u2195',\n  'VerticalBar;': '\u2223',\n  'blacklozenge;': '\u29EB',\n  'DownArrowBar;': '\u2913',\n  'DownTeeArrow;': '\u21A7',\n  'ExponentialE;': '\u2147',\n  'exponentiale;': '\u2147',\n  'GreaterEqual;': '\u2265',\n  'GreaterTilde;': '\u2273',\n  'HilbertSpace;': '\u210B',\n  'HumpDownHump;': '\u224E',\n  'Intersection;': '\u22C2',\n  'LeftArrowBar;': '\u21E4',\n  'LeftTeeArrow;': '\u21A4',\n  'LeftTriangle;': '\u22B2',\n  'LeftUpVector;': '\u21BF',\n  'NotCongruent;': '\u2262',\n  'NotHumpEqual;': '\u224F\u0338',\n  'NotLessEqual;': '\u2270',\n  'NotLessTilde;': '\u2274',\n  'Proportional;': '\u221D',\n  'RightCeiling;': '\u2309',\n  'risingdotseq;': '\u2253',\n  'RoundImplies;': '\u2970',\n  'ShortUpArrow;': '\u2191',\n  'SquareSubset;': '\u228F',\n  'triangledown;': '\u25BF',\n  'triangleleft;': '\u25C3',\n  'UnderBracket;': '\u23B5',\n  'varsubsetneq;': '\u228A\uFE00',\n  'varsupsetneq;': '\u228B\uFE00',\n  'VerticalLine;': '|',\n  'ApplyFunction;': '\u2061',\n  'bigtriangleup;': '\u25B3',\n  'blacktriangle;': '\u25B4',\n  'DifferentialD;': '\u2146',\n  'divideontimes;': '\u22C7',\n  'DoubleLeftTee;': '\u2AE4',\n  'DoubleUpArrow;': '\u21D1',\n  'fallingdotseq;': '\u2252',\n  'hookleftarrow;': '\u21A9',\n  'leftarrowtail;': '\u21A2',\n  'leftharpoonup;': '\u21BC',\n  'LeftTeeVector;': '\u295A',\n  'LeftVectorBar;': '\u2952',\n  'LessFullEqual;': '\u2266',\n  'LongLeftArrow;': '\u27F5',\n  'Longleftarrow;': '\u27F8',\n  'longleftarrow;': '\u27F5',\n  'looparrowleft;': '\u21AB',\n  'measuredangle;': '\u2221',\n  'NotEqualTilde;': '\u2242\u0338',\n  'NotTildeEqual;': '\u2244',\n  'NotTildeTilde;': '\u2249',\n  'ntriangleleft;': '\u22EA',\n  'Poincareplane;': '\u210C',\n  'PrecedesEqual;': '\u2AAF',\n  'PrecedesTilde;': '\u227E',\n  'RightArrowBar;': '\u21E5',\n  'RightTeeArrow;': '\u21A6',\n  'RightTriangle;': '\u22B3',\n  'RightUpVector;': '\u21BE',\n  'shortparallel;': '\u2225',\n  'smallsetminus;': '\u2216',\n  'SucceedsEqual;': '\u2AB0',\n  'SucceedsTilde;': '\u227F',\n  'SupersetEqual;': '\u2287',\n  'triangleright;': '\u25B9',\n  'UpEquilibrium;': '\u296E',\n  'upharpoonleft;': '\u21BF',\n  'varsubsetneqq;': '\u2ACB\uFE00',\n  'varsupsetneqq;': '\u2ACC\uFE00',\n  'VerticalTilde;': '\u2240',\n  'VeryThinSpace;': '\u200A',\n  'curvearrowleft;': '\u21B6',\n  'DiacriticalDot;': '\u02D9',\n  'doublebarwedge;': '\u2306',\n  'DoubleRightTee;': '\u22A8',\n  'downdownarrows;': '\u21CA',\n  'DownLeftVector;': '\u21BD',\n  'GreaterGreater;': '\u2AA2',\n  'hookrightarrow;': '\u21AA',\n  'HorizontalLine;': '\u2500',\n  'InvisibleComma;': '\u2063',\n  'InvisibleTimes;': '\u2062',\n  'LeftDownVector;': '\u21C3',\n  'leftleftarrows;': '\u21C7',\n  'LeftRightArrow;': '\u2194',\n  'Leftrightarrow;': '\u21D4',\n  'leftrightarrow;': '\u2194',\n  'leftthreetimes;': '\u22CB',\n  'LessSlantEqual;': '\u2A7D',\n  'LongRightArrow;': '\u27F6',\n  'Longrightarrow;': '\u27F9',\n  'longrightarrow;': '\u27F6',\n  'looparrowright;': '\u21AC',\n  'LowerLeftArrow;': '\u2199',\n  'NestedLessLess;': '\u226A',\n  'NotGreaterLess;': '\u2279',\n  'NotLessGreater;': '\u2278',\n  'NotSubsetEqual;': '\u2288',\n  'NotVerticalBar;': '\u2224',\n  'nshortparallel;': '\u2226',\n  'ntriangleright;': '\u22EB',\n  'OpenCurlyQuote;': '\u2018',\n  'ReverseElement;': '\u220B',\n  'rightarrowtail;': '\u21A3',\n  'rightharpoonup;': '\u21C0',\n  'RightTeeVector;': '\u295B',\n  'RightVectorBar;': '\u2953',\n  'ShortDownArrow;': '\u2193',\n  'ShortLeftArrow;': '\u2190',\n  'SquareSuperset;': '\u2290',\n  'TildeFullEqual;': '\u2245',\n  'trianglelefteq;': '\u22B4',\n  'upharpoonright;': '\u21BE',\n  'UpperLeftArrow;': '\u2196',\n  'ZeroWidthSpace;': '\u200B',\n  'bigtriangledown;': '\u25BD',\n  'circlearrowleft;': '\u21BA',\n  'CloseCurlyQuote;': '\u2019',\n  'ContourIntegral;': '\u222E',\n  'curvearrowright;': '\u21B7',\n  'DoubleDownArrow;': '\u21D3',\n  'DoubleLeftArrow;': '\u21D0',\n  'downharpoonleft;': '\u21C3',\n  'DownRightVector;': '\u21C1',\n  'leftharpoondown;': '\u21BD',\n  'leftrightarrows;': '\u21C6',\n  'LeftRightVector;': '\u294E',\n  'LeftTriangleBar;': '\u29CF',\n  'LeftUpTeeVector;': '\u2960',\n  'LeftUpVectorBar;': '\u2958',\n  'LowerRightArrow;': '\u2198',\n  'nLeftrightarrow;': '\u21CE',\n  'nleftrightarrow;': '\u21AE',\n  'NotGreaterEqual;': '\u2271',\n  'NotGreaterTilde;': '\u2275',\n  'NotHumpDownHump;': '\u224E\u0338',\n  'NotLeftTriangle;': '\u22EA',\n  'NotSquareSubset;': '\u228F\u0338',\n  'ntrianglelefteq;': '\u22EC',\n  'OverParenthesis;': '\u23DC',\n  'RightDownVector;': '\u21C2',\n  'rightleftarrows;': '\u21C4',\n  'rightsquigarrow;': '\u219D',\n  'rightthreetimes;': '\u22CC',\n  'ShortRightArrow;': '\u2192',\n  'straightepsilon;': '\u03F5',\n  'trianglerighteq;': '\u22B5',\n  'UpperRightArrow;': '\u2197',\n  'vartriangleleft;': '\u22B2',\n  'circlearrowright;': '\u21BB',\n  'DiacriticalAcute;': '\u00B4',\n  'DiacriticalGrave;': '`',\n  'DiacriticalTilde;': '\u02DC',\n  'DoubleRightArrow;': '\u21D2',\n  'DownArrowUpArrow;': '\u21F5',\n  'downharpoonright;': '\u21C2',\n  'EmptySmallSquare;': '\u25FB',\n  'GreaterEqualLess;': '\u22DB',\n  'GreaterFullEqual;': '\u2267',\n  'LeftAngleBracket;': '\u27E8',\n  'LeftUpDownVector;': '\u2951',\n  'LessEqualGreater;': '\u22DA',\n  'NonBreakingSpace;': ' ',\n  'NotPrecedesEqual;': '\u2AAF\u0338',\n  'NotRightTriangle;': '\u22EB',\n  'NotSucceedsEqual;': '\u2AB0\u0338',\n  'NotSucceedsTilde;': '\u227F\u0338',\n  'NotSupersetEqual;': '\u2289',\n  'ntrianglerighteq;': '\u22ED',\n  'rightharpoondown;': '\u21C1',\n  'rightrightarrows;': '\u21C9',\n  'RightTriangleBar;': '\u29D0',\n  'RightUpTeeVector;': '\u295C',\n  'RightUpVectorBar;': '\u2954',\n  'twoheadleftarrow;': '\u219E',\n  'UnderParenthesis;': '\u23DD',\n  'UpArrowDownArrow;': '\u21C5',\n  'vartriangleright;': '\u22B3',\n  'blacktriangledown;': '\u25BE',\n  'blacktriangleleft;': '\u25C2',\n  'DoubleUpDownArrow;': '\u21D5',\n  'DoubleVerticalBar;': '\u2225',\n  'DownLeftTeeVector;': '\u295E',\n  'DownLeftVectorBar;': '\u2956',\n  'FilledSmallSquare;': '\u25FC',\n  'GreaterSlantEqual;': '\u2A7E',\n  'LeftDoubleBracket;': '\u27E6',\n  'LeftDownTeeVector;': '\u2961',\n  'LeftDownVectorBar;': '\u2959',\n  'leftrightharpoons;': '\u21CB',\n  'LeftTriangleEqual;': '\u22B4',\n  'NegativeThinSpace;': '\u200B',\n  'NotGreaterGreater;': '\u226B\u0338',\n  'NotLessSlantEqual;': '\u2A7D\u0338',\n  'NotNestedLessLess;': '\u2AA1\u0338',\n  'NotReverseElement;': '\u220C',\n  'NotSquareSuperset;': '\u2290\u0338',\n  'NotTildeFullEqual;': '\u2247',\n  'RightAngleBracket;': '\u27E9',\n  'rightleftharpoons;': '\u21CC',\n  'RightUpDownVector;': '\u294F',\n  'SquareSubsetEqual;': '\u2291',\n  'twoheadrightarrow;': '\u21A0',\n  'VerticalSeparator;': '\u2758',\n  'blacktriangleright;': '\u25B8',\n  'DownRightTeeVector;': '\u295F',\n  'DownRightVectorBar;': '\u2957',\n  'LongLeftRightArrow;': '\u27F7',\n  'Longleftrightarrow;': '\u27FA',\n  'longleftrightarrow;': '\u27F7',\n  'NegativeThickSpace;': '\u200B',\n  'NotLeftTriangleBar;': '\u29CF\u0338',\n  'PrecedesSlantEqual;': '\u227C',\n  'ReverseEquilibrium;': '\u21CB',\n  'RightDoubleBracket;': '\u27E7',\n  'RightDownTeeVector;': '\u295D',\n  'RightDownVectorBar;': '\u2955',\n  'RightTriangleEqual;': '\u22B5',\n  'SquareIntersection;': '\u2293',\n  'SucceedsSlantEqual;': '\u227D',\n  'DoubleLongLeftArrow;': '\u27F8',\n  'DownLeftRightVector;': '\u2950',\n  'LeftArrowRightArrow;': '\u21C6',\n  'leftrightsquigarrow;': '\u21AD',\n  'NegativeMediumSpace;': '\u200B',\n  'NotGreaterFullEqual;': '\u2267\u0338',\n  'NotRightTriangleBar;': '\u29D0\u0338',\n  'RightArrowLeftArrow;': '\u21C4',\n  'SquareSupersetEqual;': '\u2292',\n  'CapitalDifferentialD;': '\u2145',\n  'DoubleLeftRightArrow;': '\u21D4',\n  'DoubleLongRightArrow;': '\u27F9',\n  'EmptyVerySmallSquare;': '\u25AB',\n  'NestedGreaterGreater;': '\u226B',\n  'NotDoubleVerticalBar;': '\u2226',\n  'NotGreaterSlantEqual;': '\u2A7E\u0338',\n  'NotLeftTriangleEqual;': '\u22EC',\n  'NotSquareSubsetEqual;': '\u22E2',\n  'OpenCurlyDoubleQuote;': '\u201C',\n  'ReverseUpEquilibrium;': '\u296F',\n  'CloseCurlyDoubleQuote;': '\u201D',\n  'DoubleContourIntegral;': '\u222F',\n  'FilledVerySmallSquare;': '\u25AA',\n  'NegativeVeryThinSpace;': '\u200B',\n  'NotPrecedesSlantEqual;': '\u22E0',\n  'NotRightTriangleEqual;': '\u22ED',\n  'NotSucceedsSlantEqual;': '\u22E1',\n  'DiacriticalDoubleAcute;': '\u02DD',\n  'NotSquareSupersetEqual;': '\u22E3',\n  'NotNestedGreaterGreater;': '\u2AA2\u0338',\n  'ClockwiseContourIntegral;': '\u2232',\n  'DoubleLongLeftRightArrow;': '\u27FA',\n  'CounterClockwiseContourIntegral;': '\u2233',\n}\n", "import type { ParserOptions } from '@vue/compiler-core'\nimport namedCharacterReferences from './namedChars'\n\nconst maxCRNameLength: number = Object.keys(namedCharacterReferences).reduce(\n  (max, name) => Math.max(max, name.length),\n  0,\n)\n\nexport const decodeHtml: ParserOptions['decodeEntities'] = (\n  rawText,\n  asAttr,\n) => {\n  let offset = 0\n  const end = rawText.length\n  let decodedText = ''\n\n  function advance(length: number): void {\n    offset += length\n    rawText = rawText.slice(length)\n  }\n\n  while (offset < end) {\n    const head = /&(?:#x?)?/i.exec(rawText)\n    if (head == null || offset + head.index >= end) {\n      const remaining = end - offset\n      decodedText += rawText.slice(0, remaining)\n      advance(remaining)\n      break\n    }\n\n    // Advance to the \"&\".\n    decodedText += rawText.slice(0, head.index)\n    advance(head.index)\n\n    if (head[0] === '&') {\n      // Named character reference.\n      let name = ''\n      let value: string | undefined\n      if (rawText[1] != null && /[0-9a-z]/i.test(rawText[1])) {\n        for (\n          let length = maxCRNameLength;\n          value != null && length > 0;\n          --length\n        ) {\n          name = rawText.substr(1, length)\n          value = (namedCharacterReferences as Record<string, string>)[name]\n        }\n        if (value != null) {\n          const semi = name.endsWith(';')\n          if (\n            asAttr &&\n            !semi &&\n            /[=a-z0-9]/i.test(rawText[name.length + 1] ?? '')\n          ) {\n            decodedText += '&' + name\n            advance(1 + name.length)\n          } else {\n            decodedText += value\n            advance(1 + name.length)\n          }\n        } else {\n          decodedText += '&' + name\n          advance(1 + name.length)\n        }\n      } else {\n        decodedText += '&'\n        advance(1)\n      }\n    } else {\n      // Numeric character reference.\n      const hex = head[0] === '&#x'\n      const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/\n      const body = pattern.exec(rawText)\n      if (body == null) {\n        if (head[0] != null) {\n          decodedText = `${decodedText}${head[0]}`\n          advance(head[0].length)\n        }\n      } else if (body[1] != null) {\n        // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n        let cp = Number.parseInt(body[1], hex ? 16 : 10)\n        if (cp === 0) {\n          cp = 0xfffd\n        } else if (cp > 0x10ffff) {\n          cp = 0xfffd\n        } else if (cp >= 0xd800 && cp <= 0xdfff) {\n          cp = 0xfffd\n        } else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) {\n          // noop\n        } else if (\n          (cp >= 0x01 && cp <= 0x08) ||\n          cp === 0x0b ||\n          (cp >= 0x0d && cp <= 0x1f) ||\n          (cp >= 0x7f && cp <= 0x9f)\n        ) {\n          cp = CCR_REPLACEMENTS[cp] ?? cp\n        }\n        decodedText += String.fromCodePoint(cp)\n        if (body[0] != null) advance(body[0].length)\n      }\n    }\n  }\n  return decodedText\n}\n\n// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\nconst CCR_REPLACEMENTS: Record<number, number | undefined> = {\n  0x80: 0x20ac,\n  0x82: 0x201a,\n  0x83: 0x0192,\n  0x84: 0x201e,\n  0x85: 0x2026,\n  0x86: 0x2020,\n  0x87: 0x2021,\n  0x88: 0x02c6,\n  0x89: 0x2030,\n  0x8a: 0x0160,\n  0x8b: 0x2039,\n  0x8c: 0x0152,\n  0x8e: 0x017d,\n  0x91: 0x2018,\n  0x92: 0x2019,\n  0x93: 0x201c,\n  0x94: 0x201d,\n  0x95: 0x2022,\n  0x96: 0x2013,\n  0x97: 0x2014,\n  0x98: 0x02dc,\n  0x99: 0x2122,\n  0x9a: 0x0161,\n  0x9b: 0x203a,\n  0x9c: 0x0153,\n  0x9e: 0x017e,\n  0x9f: 0x0178,\n}\n", "import type { ElementNode, ParserOptions, TextModes } from '@vue/compiler-core'\nimport {\n  isHTMLTag,\n  isRawTextContainer,\n  isSVGTag,\n  isVoidTag,\n} from '@vuedx/shared'\nimport { NodeTypes } from '@vuedx/template-ast-types'\nimport { decodeHtml } from './decodeEntities'\n\nexport const enum DOMNamespaces {\n  HTML = 0,\n  SVG,\n  MATH_ML,\n}\n\nexport const parserOptions: ParserOptions = {\n  isVoidTag,\n  isNativeTag: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n  isPreTag: (tag) => tag === 'pre',\n  decodeEntities: decodeHtml,\n  isBuiltInComponent: () => {},\n  // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n  getNamespace(tag: string, parent: ElementNode | undefined): DOMNamespaces {\n    let ns = parent != null ? parent.ns : DOMNamespaces.HTML\n\n    if (parent != null && ns === DOMNamespaces.MATH_ML) {\n      if (parent.tag === 'annotation-xml') {\n        if (tag === 'svg') {\n          return DOMNamespaces.SVG\n        }\n        if (\n          parent.props.some(\n            (a) =>\n              a.type === NodeTypes.ATTRIBUTE &&\n              a.name === 'encoding' &&\n              a.value != null &&\n              (a.value.content === 'text/html' ||\n                a.value.content === 'application/xhtml+xml'),\n          )\n        ) {\n          ns = DOMNamespaces.HTML\n        }\n      } else if (\n        /^m(?:[ions]|text)$/.test(parent.tag) &&\n        tag !== 'mglyph' &&\n        tag !== 'malignmark'\n      ) {\n        ns = DOMNamespaces.HTML\n      }\n    } else if (parent != null && ns === DOMNamespaces.SVG) {\n      if (\n        parent.tag === 'foreignObject' ||\n        parent.tag === 'desc' ||\n        parent.tag === 'title'\n      ) {\n        ns = DOMNamespaces.HTML\n      }\n    }\n\n    if (ns === DOMNamespaces.HTML) {\n      if (tag === 'svg') {\n        return DOMNamespaces.SVG\n      }\n      if (tag === 'math') {\n        return DOMNamespaces.MATH_ML\n      }\n    }\n    return ns\n  },\n\n  // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n  getTextMode({ tag, ns }: ElementNode): TextModes {\n    if (ns === DOMNamespaces.HTML) {\n      if (tag === 'textarea' || tag === 'title') {\n        return 1 /* TextModes.RCDATA */\n      }\n      if (isRawTextContainer(tag)) {\n        return 2 /* TextModes.RAWTEXT */\n      }\n    }\n    return 0 /* TextModes.DATA */\n  },\n}\n", "import type {\n  NodeTransform,\n  PlainElementNode,\n  SourceLocation,\n} from '@vue/compiler-core'\nimport {\n  baseParse,\n  ParserOptions,\n  RootNode,\n  transform,\n} from '@vue/compiler-core'\nimport { first, last } from '@vuedx/shared'\nimport {\n  createSimpleExpression,\n  isDirectiveNode,\n  isElementNode,\n  isTextNode,\n} from '@vuedx/template-ast-types'\nimport { Scope } from './scope/Scope'\nimport { createLoc, sliceLoc } from '../utils'\nimport { parserOptions } from './parserOptions'\nimport './types/Node'\n\nconst preprocess: NodeTransform = (node, context) => {\n  if (isTextNode(node) && node.content.trim().startsWith('<')) {\n    // Incomplete element tag\n    context.replaceNode(createPlainElementNode(node.loc))\n\n    return\n  }\n\n  if (!isElementNode(node)) return\n\n  if (\n    /^[a-z]+$/.test(node.tag) &&\n    node.tagType === 1 &&\n    node.tag !== 'component'\n  ) {\n    // force element for lower case unknown tags as user might be typing these partial html/svg tags\n    node.tagType = 0 /* ELEMENT */\n  }\n  node.props.forEach((prop, index) => {\n    // remove empty modifiers\n    if (isDirectiveNode(prop)) {\n      const nameEndOffset = prop.loc.source.startsWith('v-')\n        ? 2 + prop.name.length\n        : 1\n      let offset =\n        prop.arg != null\n          ? prop.arg.loc.end.offset - prop.loc.start.offset\n          : nameEndOffset\n\n      prop.nameLoc = sliceLoc(prop.loc, 0, nameEndOffset)\n      if (prop.modifiers.length === 1 && first(prop.modifiers) === '') {\n        prop.modifiers = []\n      }\n      prop.modifierLocs = prop.modifiers.map((modifier) => {\n        try {\n          offset += 1\n          return sliceLoc(prop.loc, offset, modifier.length)\n        } finally {\n          offset += modifier.length\n        }\n      })\n\n      // remove braces from arg loc\n      if (prop.arg?.loc.source.startsWith('[') === true) {\n        prop.arg.loc = sliceLoc(prop.arg.loc, 1, -1)\n      }\n      // prop.modifierLocs =\n    } else {\n      // parse ^ shorthand for v-bind\n      if (prop.name.startsWith('^')) {\n        const isDynamic = prop.name.slice(1).startsWith('[')\n        node.props[index] = {\n          type: 7 /* DIRECTIVE */,\n          name: 'bind',\n          nameLoc: createLoc(prop.loc, 0, 1),\n          arg: isDynamic\n            ? createSimpleExpression(\n                prop.name.slice(2, -1),\n                false,\n                createLoc(prop.loc, 1, prop.name.length - 1),\n              )\n            : prop.name.length > 1\n            ? createSimpleExpression(\n                prop.name.slice(1),\n                true,\n                createLoc(prop.loc, 1, prop.name.length - 1),\n              )\n            : undefined,\n          loc: prop.loc,\n          modifiers: [],\n          modifierLocs: [],\n          exp:\n            prop.value == null\n              ? undefined\n              : createSimpleExpression(\n                  prop.value.content,\n                  false,\n                  sliceLoc(prop.value.loc, 1, -1),\n                ),\n          scope: undefined as any,\n        }\n      } else {\n        prop.nameLoc = createLoc(prop.loc, 0, prop.name.length)\n      }\n    }\n  })\n\n  node.tagLoc = createLoc(node.loc, 1, node.tag.length)\n  if (node.isSelfClosing) {\n    node.startTagLoc = node.loc\n    node.endTagLoc = sliceLoc(node.loc, -2)\n  } else {\n    const startTagIndex = node.loc.source.indexOf(\n      '>',\n      (node.props.length > 0\n        ? last(node.props).loc.end.offset\n        : node.tagLoc.end.offset) - node.loc.start.offset,\n    )\n\n    if (startTagIndex < 0) {\n      node.startTagLoc = node.loc // Incomplete open tag\n    } else {\n      node.startTagLoc = createLoc(node.loc, 0, startTagIndex + 1)\n      const endOfStartTagOrLastChild =\n        (node.children.length > 0\n          ? last(node.children).loc.end.offset\n          : node.startTagLoc.end.offset) - node.loc.start.offset\n\n      const endTagIndex = Math.max(\n        endOfStartTagOrLastChild,\n        node.loc.source.indexOf('</', endOfStartTagOrLastChild),\n      )\n\n      node.endTagLoc = createLoc(\n        node.loc,\n        endTagIndex,\n        node.loc.source.length - endTagIndex,\n      )\n    }\n  }\n}\n\nexport function parse(template: string, options: ParserOptions): RootNode {\n  const ast = baseParse(template, {\n    ...parserOptions,\n    ...options,\n  })\n  transform(ast, { nodeTransforms: [preprocess] })\n  return ast\n}\n\nfunction createPlainElementNode(contentLoc: SourceLocation): PlainElementNode {\n  const offset = contentLoc.source.indexOf('<')\n  const loc = sliceLoc(contentLoc, offset)\n  const tag = loc.source.slice(1).trim()\n  return {\n    type: 1 /* ELEMENT */,\n    tag,\n    tagType: 0 /* ELEMENT */,\n    codegenNode: undefined,\n    children: [],\n    isSelfClosing: tag.length > 0,\n    loc,\n    ns: 0,\n    props: [],\n    tagLoc: sliceLoc(loc, 1),\n    startTagLoc: loc,\n    endTagLoc: undefined,\n    scope: new Scope(),\n  }\n}\n", "import {\n  CompilerError,\n  CompilerOptions,\n  RootNode,\n  transform,\n} from '@vue/compiler-core'\nimport { withScope } from './scope/Scope'\nimport type { NodeTransformContext } from './types/NodeTransformContext'\nimport { ScopeManager } from './scope/ScopeManager'\nimport { createComponentChildrenTransform } from './transforms/transformComponent'\nimport { createTransformFor } from './transforms/transformFor'\nimport { createTransformIf } from './transforms/transformIf'\nimport { createResolveComponentTransform } from './transforms/transformResolveComponent'\nimport { createSlotHoistScopeTransform } from './transforms/transformSlot'\nimport type { TransformedCode } from '../types/TransformedCode'\nimport type { TransformOptionsResolved } from '../types/TransformOptions'\n\nimport { generate } from './generate'\nimport { parse } from './parse'\n\nexport interface Options {\n  fileName: string\n}\n\nexport interface Output extends TransformedCode {\n  ast: RootNode\n  errors: CompilerError[]\n}\n\nexport function compile(\n  template: string,\n  options: Options & CompilerOptions & TransformOptionsResolved,\n): Output {\n  const errors: CompilerError[] = []\n  const result = compileFromAST(\n    parse(template, {\n      ...options,\n      onError: (error) => {\n        errors.push(error)\n        options.onError?.(error)\n      },\n    }),\n    options,\n  )\n\n  result.errors.unshift(...errors)\n\n  return result\n}\n\nexport function compileFromAST(\n  source: RootNode,\n  options: Options & TransformOptionsResolved,\n): Output {\n  const root = withScope(clone(source))\n  const ast = clone(source)\n  ast.scope = root.scope\n  const context: NodeTransformContext = {\n    ...options,\n    scope: new ScopeManager(),\n    used: { components: new Set(), directives: new Set() },\n  }\n  const errors: CompilerError[] = []\n\n  transform(root, {\n    ...options,\n    prefixIdentifiers: false,\n    hoistStatic: false,\n    transformHoist: null,\n    ssr: false,\n    cacheHandlers: false,\n    scopeId: null,\n    nodeTransforms: [\n      createResolveComponentTransform(context),\n      createSlotHoistScopeTransform(context),\n      createTransformFor(context),\n      createTransformIf(context),\n      createComponentChildrenTransform(context),\n    ],\n    onError(error) {\n      errors.push(error)\n    },\n  })\n\n  const result = generate(root, context)\n\n  return { ...result, ast, errors }\n}\n\nfunction clone<T>(obj: T): T {\n  try {\n    // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n    // @ts-ignore\n    if (typeof structuredClone !== 'undefined') return structuredClone(obj)\n  } catch {}\n  return JSON.parse(JSON.stringify(obj))\n}\n", "import type { CompilerError, RootNode } from '@vue/compiler-core'\nimport type { SFCTemplateBlock } from '@vuedx/compiler-sfc'\nimport { compile } from '../../template/compile'\nimport type { TransformedCode } from '../../types/TransformedCode'\nimport type { TransformOptionsResolved } from '../../types/TransformOptions'\n\nexport interface TemplateBlockTransformResult extends TransformedCode {\n  slotsIdentifier: string\n  attrsIdentifier: string\n  ast?: RootNode\n  errors: CompilerError[]\n}\n\nexport function transformTemplate(\n  template: SFCTemplateBlock | null,\n  options: TransformOptionsResolved,\n): TemplateBlockTransformResult {\n  const slotsIdentifier = `${options.internalIdentifierPrefix}_slots`\n  const attrsIdentifier = `${options.internalIdentifierPrefix}_attrs`\n  if (template == null) {\n    return {\n      code: `function ${slotsIdentifier}() { return {} }; const ${attrsIdentifier} = {};`,\n      map: {\n        file: '',\n        mappings: [],\n        names: [],\n        sources: [],\n        sourcesContent: [],\n      },\n      slotsIdentifier,\n      attrsIdentifier,\n      errors: [],\n    }\n  }\n\n  const result = compile(template?.content, options)\n  const offset = template.loc.start.offset\n  const line = template.loc.start.line\n\n  return {\n    ...result,\n    slotsIdentifier,\n    attrsIdentifier,\n    errors: result.errors.map((error) => {\n      if ('loc' in error && error.loc != null) {\n        error.loc.start.offset += offset\n        error.loc.end.offset += offset\n        error.loc.start.line += line\n        error.loc.end.line += line\n      }\n\n      error.message += ` (in <template>)`\n\n      return error\n    }),\n  }\n}\n", "import {\n  CompilerError,\n  parse,\n  SFCBlock,\n  SFCDescriptor,\n} from '@vuedx/compiler-sfc'\nimport {\n  Cache,\n  createCache,\n  first,\n  invariant,\n  rebaseSourceMap,\n  SourceTransformer,\n} from '@vuedx/shared'\nimport type {\n  TransformOptions,\n  TransformOptionsResolved,\n} from '../types/TransformOptions'\nimport { transformCustomBlock } from './blocks/transformCustomBlock'\nimport { createProgram } from '@vuedx/transforms'\n\nimport type { RootNode } from '@vue/compiler-core'\nimport type { RawSourceMap } from 'source-map'\nimport { encode } from 'sourcemap-codec'\nimport type { TransformedCode } from '../types/TransformedCode'\nimport { transformScript } from './blocks/transformScript'\nimport { transformScriptSetup } from './blocks/transformScriptSetup'\nimport { transformStyle } from './blocks/transformStyle'\nimport { transformTemplate } from './blocks/transformTemplate'\n\nexport interface CompileOptions extends TransformOptions {}\n\nexport interface CompileOutput extends TransformedCode {\n  template?: RootNode\n  descriptor: SFCDescriptor\n  errors: Array<CompilerError | SyntaxError>\n}\n\nexport function compile(\n  source: string,\n  options: CompileOptions,\n): Omit<CompileOutput, 'map'> & { map: RawSourceMap } {\n  const result = compileWithDecodedSourceMap(source, options)\n\n  return {\n    ...result,\n    map: {\n      version: 3 as unknown as string,\n      ...result.map,\n      mappings: encode(result.map.mappings),\n    },\n  }\n}\n\nexport function compileWithDecodedSourceMap(\n  source: string,\n  options: CompileOptions,\n): CompileOutput {\n  // performance.mark('beforeTransform')\n  const cache = options.cache ?? createCache(100)\n  const key = (name: string): string => `${options.fileName}::block:${name}`\n  const previous = cache.get(key('descriptor')) as SFCDescriptor | undefined\n  const { descriptor, errors } = parse(source)\n\n  const lang = descriptor.script?.lang ?? descriptor.scriptSetup?.lang\n  const internalIdentifierPrefix =\n    options.internalIdentifierPrefix ?? '__VueDX__'\n  const contextIdentifier = `${internalIdentifierPrefix}ctx`\n  const typeIdentifier = `${internalIdentifierPrefix}TypeCheck`\n  const resolvedOptions: TransformOptionsResolved = {\n    ...options,\n    runtimeModuleName: 'vue',\n    typeCheckModuleName: 'vuedx~runtime',\n    typeIdentifier,\n    contextIdentifier,\n    internalIdentifierPrefix,\n    isTypeScript: options.isTypeScript ?? (lang === 'ts' || lang === 'tsx'),\n    cache,\n    descriptor,\n    identifiers: new Map(),\n  }\n  const builder = new SourceTransformer(options.fileName, source)\n\n  const isScriptChanged = hasBlockChanged(previous?.script, descriptor.script)\n\n  const script = runIfNeeded(key('script'), isScriptChanged, cache, () =>\n    transformScript(descriptor.script, resolvedOptions),\n  )\n\n  const isScriptSetupChanged = hasBlockChanged(\n    previous?.scriptSetup,\n    descriptor.scriptSetup,\n  )\n  const scriptSetup = runIfNeeded(\n    key('scriptSetup'),\n    isScriptSetupChanged,\n    cache,\n    () => transformScriptSetup(descriptor.scriptSetup, resolvedOptions),\n  )\n\n  resolvedOptions.identifiers = new Map()\n\n  script.identifiers.forEach((identifier) => {\n    resolvedOptions.identifiers.set(identifier.name, identifier)\n  })\n\n  scriptSetup.identifiers.forEach((identifier) => {\n    resolvedOptions.identifiers.set(identifier.name, identifier)\n  })\n\n  const template = runIfNeeded(\n    key('template'),\n    isScriptChanged ||\n      isScriptSetupChanged ||\n      hasBlockChanged(previous?.template, descriptor.template),\n    cache,\n    () => transformTemplate(descriptor.template, resolvedOptions),\n  )\n\n  const name = script.name\n  function region(name: string, fn: () => void): void {\n    builder.nextLine()\n    builder.append(`//#region ${name}`)\n    builder.nextLine()\n    fn()\n    builder.nextLine()\n    builder.append(`//#endregion`)\n    builder.nextLine()\n  }\n\n  builder.append(\n    [\n      `import * as ${resolvedOptions.typeIdentifier} from '${resolvedOptions.typeCheckModuleName}';`,\n      `declare const ${\n        resolvedOptions.internalIdentifierPrefix\n      }defineComponent: typeof import(${JSON.stringify(\n        resolvedOptions.runtimeModuleName,\n      )}).defineComponent;`,\n      `type ${\n        resolvedOptions.internalIdentifierPrefix\n      }GlobalComponents = import(${JSON.stringify(\n        resolvedOptions.runtimeModuleName,\n      )}).GlobalComponents;`,\n    ].join('\\n'),\n  )\n  builder.nextLine()\n  region('<script>', () => {\n    builder.append(\n      script.code,\n      rebaseSourceMap(script.map, descriptor.script?.loc.start),\n    )\n  })\n\n  const customBlocksResults = descriptor.customBlocks.map((block, index) => {\n    const result = runIfNeeded(\n      key(`customBlock${index}`),\n      hasBlockChanged(previous?.customBlocks[index], block),\n      cache,\n      () => transformCustomBlock(block, resolvedOptions),\n    )\n\n    region(`<${block.type}>`, () => {\n      builder.append(result.code, rebaseSourceMap(result.map, block.loc.start))\n    })\n\n    return result\n  })\n\n  region('<script setup>', () => {\n    builder.append(\n      scriptSetup.code,\n      rebaseSourceMap(scriptSetup.map, descriptor.scriptSetup?.loc.start),\n    )\n  })\n  const defaultExportIdentifier =\n    descriptor.scriptSetup != null\n      ? scriptSetup.exportIdentifier\n      : script.exportIdentifier\n\n  builder.append(\n    [\n      `function ${internalIdentifierPrefix}RegisterSelf<T>(ctx: T) {`,\n      `  return { ...ctx, [${JSON.stringify(name)}]: ${name} }`,\n      `}`,\n    ].join('\\n'),\n  )\n  builder.nextLine()\n\n  builder.append(\n    `const ${contextIdentifier} = ${customBlocksResults.reduce(\n      (code, result) => {\n        if (result.decoratorIdentifier != null) {\n          return `${result.decoratorIdentifier}(${code})`\n        }\n\n        return code\n      },\n      `${internalIdentifierPrefix}RegisterSelf(new ${defaultExportIdentifier}())`,\n    )}`,\n  )\n\n  builder.nextLine()\n\n  region(`<template>`, () => {\n    builder.append(\n      template.code,\n      rebaseSourceMap(template.map, descriptor.template?.loc.start),\n    )\n  })\n\n  descriptor.styles.forEach((style, index) => {\n    const result = runIfNeeded(\n      key(`style${index}`),\n      hasBlockChanged(previous?.styles[index], style),\n      cache,\n      () => transformStyle(style, resolvedOptions),\n    )\n    builder.append('/* <style> */')\n    region('<style>', () => {\n      builder.append(result.code, rebaseSourceMap(result.map, style.loc.start))\n    })\n  })\n\n  const exported = [\n    ...(descriptor.scriptSetup == null\n      ? [template.attrsIdentifier, template.slotsIdentifier, contextIdentifier]\n      : [scriptSetup.componentIdentifier]),\n    ...Object.values(scriptSetup.exports),\n  ].join(', ')\n\n  builder.append(`return {${exported}};};`)\n  builder.nextLine()\n  builder.append(`const {${exported}} = ${scriptSetup.scopeIdentifier}();\\n`)\n  Object.entries(scriptSetup.exports).forEach(([name, identifier]) => {\n    builder.append(`export type ${name} = typeof ${identifier};\\n`)\n  })\n\n  region('public component definition', () => {\n    if (descriptor.scriptSetup == null) {\n      const props = `${resolvedOptions.contextIdentifier}.$props`\n      const inheritAttrs =\n        descriptor.template?.content.includes('@vue-attrs-target') === true ||\n        script.inheritAttrs\n      const propsType = `typeof ${props}`\n      const attrsType = `typeof ${template.attrsIdentifier}`\n      const slotsType = `${resolvedOptions.typeIdentifier}.internal.Slots<typeof ${template.slotsIdentifier}_value>`\n      builder.append(\n        [\n          `const ${template.slotsIdentifier}_value = ${template.slotsIdentifier}();`,\n          `export default class ${name} {`,\n          defineProperty(\n            '$props',\n            inheritAttrs\n              ? `${resolvedOptions.typeIdentifier}.internal.MergeAttrs<${propsType}, ${attrsType}> & {$slots: ${slotsType}}`\n              : `${propsType} & {$slots: ${slotsType}}`,\n          ),\n          `}`,\n        ].join('\\n'),\n      )\n    } else {\n      const generic =\n        typeof descriptor.scriptSetup.attrs['generic'] === 'string'\n          ? descriptor.scriptSetup.attrs['generic']\n          : ''\n      const typeArgs = parseGenericArgNames(generic)\n\n      const component =\n        typeArgs.length > 0\n          ? `(new (${scriptSetup.scopeIdentifier}<${typeArgs.join(', ')}>().${\n              scriptSetup.componentIdentifier\n            }<${typeArgs.join(', ')}>))`\n          : `(new (${scriptSetup.scopeIdentifier}().${scriptSetup.componentIdentifier}))`\n\n      const genericExp = typeArgs.length > 0 ? `<${generic}>` : ''\n      builder.append(`export default class ${name}${genericExp} {\\n`)\n      builder.append(\n        ` $props = {...${component}.$props, $slots: ${component}.$slots };\\n`,\n      )\n      builder.append(`}`)\n    }\n    builder.nextLine()\n  })\n\n  const output = builder.end()\n  // performance.mark('afterTransform')\n  // performance.measure('transform', 'beforeTransform', 'afterTransform')\n\n  return {\n    code: output.code,\n    map: {\n      ...output.map,\n      file: options.fileName.replace(\n        /\\.vue$/,\n        resolvedOptions.isTypeScript ? '.tsx' : '.jsx',\n      ),\n    },\n    descriptor,\n    errors: [...errors, ...template.errors],\n    template: template.ast,\n  }\n\n  function defineProperty(name: string, type: string): string {\n    return resolvedOptions.isTypeScript\n      ? `  ${name} = null as unknown as ${type};`\n      : `  ${name} = /** @type {${type}} */ (/** @type {unknown} */ (null));`\n  }\n\n  function parseGenericArgNames(code: string): string[] {\n    const ts = options.typescript\n    const program = createProgram(ts, `function _<${code}>() {}`)\n    const sourceFile = program.getSourceFile('input.ts')\n    invariant(sourceFile != null, 'sourceFile should not be null')\n    const decl = first(sourceFile.statements)\n    invariant(ts.isFunctionDeclaration(decl))\n    invariant(decl.typeParameters != null)\n    return decl.typeParameters.map((p) => p.name.getText())\n  }\n}\n\nfunction runIfNeeded<R>(\n  key: string,\n  forceEvict: boolean,\n  cache: Cache<string, unknown>,\n  fn: () => R,\n): R {\n  if (forceEvict) cache.delete(key)\n  return cache.resolve(key, fn) as R\n}\n\nfunction hasBlockChanged(\n  previous: SFCBlock | undefined | null,\n  current: SFCBlock | null,\n): boolean {\n  if (previous === undefined) return true\n  if (previous === current) return true\n  if (previous == null || current == null) return false\n  if (previous.type !== current.type) return false\n  if (previous.lang !== current.lang) return false\n  if (previous.content !== current.content) return false\n  if (!areObjectsEqual(previous.attrs, current.attrs)) return false\n  return true\n}\n\nfunction areObjectsEqual(\n  a: Record<string, string | boolean>,\n  b: Record<string, string | boolean>,\n): boolean {\n  if (Object.keys(a).length !== Object.keys(b).length) return false\n  for (const key of Object.keys(a)) {\n    if (a[key] !== b[key]) return false\n  }\n\n  return true\n}\n", "import type {\n  CompilerError,\n  SFCBlock,\n  SFCDescriptor,\n} from '@vuedx/compiler-sfc'\nimport {\n  CompileOptions,\n  CompileOutput,\n  compileWithDecodedSourceMap,\n} from '@vuedx/compiler-tsx'\nimport {\n  binarySearch,\n  BinarySearchBias,\n  createCache,\n  invariant,\n  isNotNull,\n  startMeasure,\n} from '@vuedx/shared'\nimport type { RootNode } from '@vuedx/template-ast-types'\nimport {\n  Position,\n  Range,\n  TextDocument,\n  TextDocumentContentChangeEvent,\n} from 'vscode-languageserver-textdocument'\nimport { encode } from 'sourcemap-codec'\n\nexport type Mapping = [\n  GeneratedLine: number,\n  GeneratedColumn: number,\n  OriginalLine: number,\n  OriginalColumn: number,\n  Name: string | undefined,\n]\ninterface VueToTsxSnapshot extends CompileOutput {\n  readonly document: TextDocument\n  readonly mappingsByOriginalOrder: Mapping[]\n  readonly mappingsByGeneratedOrder: Mapping[]\n  readonly blocks: SFCBlock[]\n}\n\ntype SourceMapBiasType = typeof BinarySearchBias[keyof typeof BinarySearchBias]\n\nconst enum MappingKey {\n  GeneratedLine,\n  GeneratedColumn,\n  OriginalLine,\n  OriginalColumn,\n  Name,\n}\n\nexport class VueSFCDocument implements TextDocument {\n  public readonly originalFileName: string\n  public readonly generatedFileName: string\n  public readonly options: Required<CompileOptions>\n\n  private _original: TextDocument\n\n  private constructor(\n    original: TextDocument,\n    options: Omit<CompileOptions, 'cache'>,\n  ) {\n    this._original = original\n    this.options = {\n      isTypeScript: true,\n      internalIdentifierPrefix: '__VueDX_',\n      runtimeModuleName: 'vue',\n      typeCheckModuleName: 'vuedx~runtime',\n      ...options,\n      cache: createCache(15), // More than 15 blocks in SFC is not common.\n    }\n    this.originalFileName = this.options.fileName\n    this.generatedFileName = `${this.options.fileName}${\n      this.options.isTypeScript ? '.tsx' : '.jsx'\n    }`\n  }\n\n  /** @deprecated used by tsserver */\n  public lineMap: unknown | undefined\n\n  /** @deprecated used by tsserver */\n  public get text(): string {\n    return this.original.getText()\n  }\n\n  /** @deprecated used by tsserver */\n  public getLineAndCharacterOfPosition(position: number): Position {\n    return this.original.positionAt(position)\n  }\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  public getSourceFile(fileName: string = this.fileName) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const ctx = this\n\n    return {\n      fileName,\n      get text(): string {\n        return ctx.text\n      },\n      get lineMap(): unknown | undefined {\n        return ctx.lineMap\n      },\n      set lineMap(value: unknown | undefined) {\n        ctx.lineMap = value\n      },\n      getLineAndCharacterOfPosition: (position: number) =>\n        ctx.getLineAndCharacterOfPosition(position),\n    }\n  }\n\n  public get fileName(): string {\n    return this.originalFileName\n  }\n\n  public get descriptor(): SFCDescriptor {\n    return this._compile().descriptor\n  }\n\n  public get errors(): Array<CompilerError | SyntaxError> {\n    return this._compile().errors\n  }\n\n  public get templateAST(): RootNode | undefined {\n    return this._compile().template\n  }\n\n  public get original(): TextDocument {\n    return this._original\n  }\n\n  public get generated(): TextDocument {\n    return this._compile().document\n  }\n\n  public get blocks(): SFCBlock[] {\n    return this._compile().blocks\n  }\n\n  public get snapshot(): VueToTsxSnapshot {\n    return this._compile()\n  }\n\n  public get map(): string {\n    const map = this._compile().map\n    return JSON.stringify({\n      ...map,\n      version: 3,\n      mappings: encode(map.mappings),\n    })\n  }\n\n  public getText(range?: Range): string {\n    return this.generated.getText(range)\n  }\n\n  public positionAt(offset: number): Position {\n    return this.generated.positionAt(offset)\n  }\n\n  public offsetAt(position: Position): number {\n    return this.generated.offsetAt(position)\n  }\n\n  public get version(): number {\n    return this.original.version // use original version as generated code might be out of date\n  }\n\n  public get lineCount(): number {\n    return this.generated.lineCount\n  }\n\n  public get uri(): string {\n    return `file://${this.originalFileName}`\n  }\n\n  public get languageId(): string {\n    return this.options.isTypeScript ? 'typescript' : 'javascript'\n  }\n\n  public getBlockAt(offset: number): SFCBlock | null {\n    const block = this.blocks.find(\n      (block) =>\n        block.loc.start.offset <= offset && offset <= block.loc.end.offset,\n    )\n\n    return block ?? null\n  }\n\n  private _snapshot: VueToTsxSnapshot | null = null\n  private _compile(): VueToTsxSnapshot {\n    if (this._snapshot?.document.version !== this.original.version) {\n      const previous = this._snapshot\n      try {\n        const endCompileMeasure = startMeasure('VueSFCDocument.compile')\n        const result = compileWithDecodedSourceMap(\n          this.original.getText(),\n          this.options,\n        )\n        const mappings = memoize(() =>\n          result.map.mappings.flatMap((mappings, line) =>\n            mappings.map((mapping) => {\n              const m: Mapping = [\n                line,\n                mapping[0],\n                mapping[2] ?? -1,\n                mapping[3] ?? -1,\n                result.map.names[mapping[4] ?? -1],\n              ]\n              return m\n            }),\n          ),\n        )\n        const descriptor = result.descriptor\n        const mappingsByOriginalOrder = memoize(() =>\n          mappings().slice().sort(compareOriginal),\n        )\n        const mappingsByGeneratedOrder = memoize(() =>\n          mappings().slice().sort(compareGenerated),\n        )\n        const blocks = memoize(() => {\n          return [\n            descriptor.scriptSetup,\n            descriptor.script,\n            descriptor.template,\n            ...descriptor.styles,\n            ...descriptor.customBlocks,\n          ]\n            .filter(isNotNull)\n            .sort((a, b) => a.loc.start.offset - b.loc.start.offset)\n        })\n        this._snapshot = {\n          ...result,\n          get mappingsByOriginalOrder() {\n            return mappingsByOriginalOrder()\n          },\n          get mappingsByGeneratedOrder() {\n            return mappingsByGeneratedOrder()\n          },\n          get blocks() {\n            return blocks()\n          },\n          document: TextDocument.create(\n            `file://${this.generatedFileName}`,\n            this.options.isTypeScript ? 'typescript' : 'javascript',\n            this.original.version,\n            result.code,\n          ),\n        }\n\n        endCompileMeasure()\n      } catch (e) {\n        console.error('Failed to compile', e)\n        if (previous != null) {\n          this._snapshot = {\n            ...previous,\n            errors: [...previous.errors, e as SyntaxError],\n            document: TextDocument.update(\n              previous.document,\n              [],\n              this.original.version,\n            ),\n          }\n        } else {\n          this._snapshot = {\n            descriptor: {\n              script: null,\n              scriptSetup: null,\n              template: null,\n              styles: [],\n              customBlocks: [],\n            },\n            errors: [e as SyntaxError],\n            blocks: [],\n            code: '',\n            map: {\n              file: '',\n              mappings: [],\n              names: [],\n              sources: [],\n              sourcesContent: [],\n            },\n            document: TextDocument.create(\n              `file://${this.generatedFileName}`,\n              this.options.isTypeScript ? 'typescript' : 'javascript',\n              this.original.version,\n              '',\n            ),\n            mappingsByGeneratedOrder: [],\n            mappingsByOriginalOrder: [],\n          }\n        }\n      }\n    }\n\n    return this._snapshot\n  }\n\n  public findMapping(\n    positionType: 'original' | 'generated',\n    position: Position,\n    searchBias: SourceMapBiasType = BinarySearchBias.GREATEST_LOWER_BOUND,\n  ): Mapping | null {\n    const snapshot = this._snapshot ?? this._compile()\n    const needle = [] as unknown as Mapping\n    if (positionType === 'original') {\n      needle[MappingKey.OriginalLine] = position.line\n      needle[MappingKey.OriginalColumn] = position.character\n    } else {\n      needle[MappingKey.GeneratedLine] = position.line\n      needle[MappingKey.GeneratedColumn] = position.character\n    }\n    const index = binarySearch(\n      needle,\n      positionType === 'original'\n        ? snapshot.mappingsByOriginalOrder\n        : snapshot.mappingsByGeneratedOrder,\n      positionType === 'original' ? compareOriginal : compareGenerated,\n      searchBias,\n    )\n    if (index < 0) return null\n\n    return (\n      (positionType === 'original'\n        ? snapshot.mappingsByOriginalOrder[index]\n        : snapshot.mappingsByGeneratedOrder[index]) ?? null\n    )\n  }\n\n  public originalPositionFor(position: Position): Position | null {\n    const offset = this.generated.offsetAt(position)\n    const originalOffset = this.originalOffsetAt(offset)\n    if (originalOffset == null) return null\n    return this.original.positionAt(originalOffset)\n  }\n\n  public originalOffsetAt(offset: number): number | null {\n    const span = this.findOriginalTextSpan({ start: offset, length: 1 })\n    if (span == null) return null\n    return span.start\n  }\n\n  public findOriginalTextSpan(spanInGeneratedText: TextSpan): TextSpan | null {\n    const position = this.generated.positionAt(spanInGeneratedText.start)\n    const low = this.findMapping(\n      'generated',\n      position,\n      BinarySearchBias.GREATEST_LOWER_BOUND,\n    )\n\n    if (low == null || low[MappingKey.OriginalLine] < 0) return null\n    const result = this._processMappingUsingMeta(\n      'generated',\n      spanInGeneratedText,\n      low,\n    )\n    if (result != null) return result\n\n    const generatedStart = this.generated.offsetAt({\n      line: low[MappingKey.GeneratedLine],\n      character: low[MappingKey.GeneratedColumn],\n    })\n\n    const originalStart = this.original.offsetAt({\n      line: low[MappingKey.OriginalLine],\n      character: low[MappingKey.OriginalColumn],\n    })\n\n    // prefix match\n    const originalString = this.original.getText().slice(originalStart)\n    const generatedString = this.generated.getText().slice(generatedStart)\n\n    const prefixLength = findCommonPrefixLength(originalString, generatedString)\n    if (generatedStart + prefixLength < spanInGeneratedText.start) return null // no mapping\n\n    // TODO: original position should be contained in a block\n    return {\n      start:\n        originalStart + Math.abs(generatedStart - spanInGeneratedText.start),\n      length: Math.min(prefixLength, spanInGeneratedText.length),\n    }\n  }\n\n  public findGeneratedTextSpan(spanInOriginalText: TextSpan): TextSpan | null {\n    const block = this.getBlockAt(spanInOriginalText.start)\n    if (block == null) return null\n    const isZeroWidth = spanInOriginalText.length === 0\n    const start = this.generatedOffsetAt(spanInOriginalText.start, isZeroWidth)\n    if (start == null) return null\n    if (isZeroWidth) return { start, length: 0 }\n\n    const end =\n      this.generatedOffsetAt(\n        spanInOriginalText.start + spanInOriginalText.length,\n        true,\n      ) ?? start\n\n    return { start: Math.min(start, end), length: Math.abs(end - start) }\n  }\n\n  private _processMappingUsingMeta(\n    kind: 'generated' | 'original',\n    span: TextSpan,\n    mapping: Mapping,\n  ): (TextSpan & { mapping: 'P' | 'S' | 'T' }) | null {\n    const name = mapping[MappingKey.Name]\n    if (name == null) return null\n    const result = /^<<(P|S|T)>>(\\d+)(?:\\|(\\d+))?$/.exec(name)\n    if (result != null) {\n      switch (result[1]) {\n        case 'P':\n          {\n            invariant(result[2])\n            const generatedLength = parseInt(result[2], 10)\n            invariant(Number.isInteger(generatedLength))\n            const original = this.original.offsetAt({\n              line: mapping[MappingKey.OriginalLine],\n              character: mapping[MappingKey.OriginalColumn],\n            })\n            const generated = this.generated.offsetAt({\n              line: mapping[MappingKey.GeneratedLine],\n              character: mapping[MappingKey.GeneratedColumn],\n            })\n\n            if (kind === 'generated') {\n              // if span is in generated range\n              if (\n                contains({ start: generated, length: generatedLength }, span)\n              ) {\n                const skipLength = Math.abs(span.start - generated)\n                const length = Math.min(\n                  generatedLength - skipLength,\n                  span.length,\n                )\n\n                return {\n                  start: original + skipLength,\n                  length,\n                  mapping: 'P',\n                }\n              }\n            } else {\n              if (\n                contains({ start: original, length: generatedLength }, span)\n              ) {\n                const skipLength = Math.abs(span.start - original)\n                const length = Math.min(\n                  generatedLength - skipLength,\n                  span.length,\n                )\n\n                return {\n                  start: generated + skipLength,\n                  length,\n                  mapping: 'P',\n                }\n              }\n            }\n          }\n          break\n        case 'S':\n          {\n            invariant(result[2] != null && result[3] != null)\n            const originalLength = parseInt(result[2], 10)\n            const generatedLength = parseInt(result[3], 10)\n            invariant(Number.isInteger(originalLength))\n            invariant(Number.isInteger(generatedLength))\n            invariant(originalLength >= generatedLength)\n            const diffLength = Math.abs(generatedLength - originalLength)\n            const original = this.original.offsetAt({\n              line: mapping[MappingKey.OriginalLine],\n              character: mapping[MappingKey.OriginalColumn],\n            })\n            const generated = this.generated.offsetAt({\n              line: mapping[MappingKey.GeneratedLine],\n              character: mapping[MappingKey.GeneratedColumn],\n            })\n\n            if (kind === 'generated') {\n              if (\n                contains({ start: generated, length: generatedLength }, span)\n              ) {\n                const skipLength = Math.abs(span.start - generated)\n                if (skipLength <= diffLength) {\n                  return {\n                    start: original,\n                    length: originalLength,\n                    mapping: 'S',\n                  }\n                }\n\n                const length = Math.min(\n                  originalLength - (skipLength - diffLength),\n                  span.length,\n                )\n\n                return {\n                  start: original + skipLength,\n                  length,\n                  mapping: 'S',\n                }\n              } else {\n                if (\n                  contains({ start: original, length: originalLength }, span)\n                ) {\n                  const skipLength = Math.abs(span.start - original)\n                  const length = Math.min(\n                    originalLength - skipLength,\n                    span.length,\n                  )\n\n                  return {\n                    start: generated + diffLength + skipLength,\n                    length,\n                    mapping: 'S',\n                  }\n                }\n              }\n            }\n          }\n          break\n        case 'T':\n          {\n            invariant(result[2] != null && result[3] != null)\n            const originalLength = parseInt(result[2], 10)\n            const generatedLength = parseInt(result[3], 10)\n            invariant(Number.isInteger(originalLength))\n            invariant(Number.isInteger(generatedLength))\n            const original = this.original.offsetAt({\n              line: mapping[MappingKey.OriginalLine],\n              character: mapping[MappingKey.OriginalColumn],\n            })\n\n            const generated = this.generated.offsetAt({\n              line: mapping[MappingKey.GeneratedLine],\n              character: mapping[MappingKey.GeneratedColumn],\n            })\n\n            if (kind === 'generated') {\n              if (\n                contains({ start: generated, length: generatedLength }, span)\n              ) {\n                return {\n                  start: original,\n                  length: originalLength,\n                  mapping: 'T',\n                }\n              }\n            } else {\n              if (contains({ start: original, length: originalLength }, span)) {\n                return {\n                  start: generated,\n                  length: generatedLength,\n                  mapping: 'T',\n                }\n              }\n            }\n          }\n          break\n      }\n    }\n    return null\n  }\n\n  public generatedPositionFor(position: Position): Position | null {\n    const offset = this.original.offsetAt(position)\n    const generatedOffset = this.generatedOffsetAt(offset)\n    if (generatedOffset == null) return null\n    return this.generated.positionAt(generatedOffset)\n  }\n\n  public generatedOffsetAt(\n    offset: number,\n    isZeroWidth: boolean = false,\n  ): number | null {\n    const position = this.original.positionAt(offset)\n    const low = this.findMapping(\n      'original',\n      position,\n      BinarySearchBias.GREATEST_LOWER_BOUND,\n    )\n\n    if (low == null) return null\n    const result = this._processMappingUsingMeta(\n      'original',\n      { start: offset, length: 0 },\n      low,\n    )\n    if (result != null) {\n      return isZeroWidth && result.mapping === 'T'\n        ? result.start + result.length\n        : result.start\n    }\n\n    const originalStart = this.original.offsetAt({\n      line: low[MappingKey.OriginalLine],\n      character: low[MappingKey.OriginalColumn],\n    })\n    const start =\n      this.generated.offsetAt({\n        line: low[MappingKey.GeneratedLine],\n        character: low[MappingKey.GeneratedColumn],\n      }) +\n      // source mappings are prefix based, so we assume the original\n      // and generated text have the same prefix.\n      Math.abs(originalStart - offset)\n\n    return start\n  }\n\n  static create(\n    fileName: string,\n    content: string,\n    options: Omit<CompileOptions, 'cache' | 'fileName'>,\n    version: number = 0,\n  ): VueSFCDocument {\n    return new VueSFCDocument(\n      TextDocument.create(`file://${fileName}`, 'vue', version, content),\n      { ...options, fileName },\n    )\n  }\n\n  public update(\n    changes: TextDocumentContentChangeEvent[],\n    version: number,\n  ): void {\n    this._original = TextDocument.update(this._original, changes, version)\n    this.lineMap = undefined\n  }\n}\n\nfunction compareOriginal(a: Mapping, b: Mapping): number {\n  const comparison = a[MappingKey.OriginalLine] - b[MappingKey.OriginalLine]\n  return comparison !== 0\n    ? comparison\n    : a[MappingKey.OriginalColumn] - b[MappingKey.OriginalColumn]\n}\n\nfunction compareGenerated(a: Mapping, b: Mapping): number {\n  const comparison = a[MappingKey.GeneratedLine] - b[MappingKey.GeneratedLine]\n  return comparison !== 0\n    ? comparison\n    : a[MappingKey.GeneratedColumn] - b[MappingKey.GeneratedColumn]\n}\n\nfunction memoize<T>(fn: () => T): () => T {\n  let value: T | undefined\n  return () => {\n    if (value === undefined) value = fn()\n    return value\n  }\n}\n\nexport interface TextSpan {\n  start: number\n  length: number\n}\n\nfunction contains(haystack: TextSpan, needle: TextSpan): boolean {\n  return (\n    haystack.start <= needle.start &&\n    haystack.start + haystack.length >= needle.start + needle.length\n  )\n}\n\n// Binary search.\n// Performance analysis: http://neil.fraser.name/news/2007/10/09/\nfunction findCommonPrefixLength(a: string, b: string): number {\n  if (a.length === 0 || b.length === 0 || a.charCodeAt(0) !== b.charCodeAt(0))\n    return 0\n  let low = 0\n  let high = Math.min(a.length, b.length)\n  let mid = high\n  let start = 0\n  while (low < mid) {\n    if (a.slice(start, mid) === b.slice(start, mid)) {\n      low = mid\n      start = low\n    } else {\n      high = mid\n    }\n\n    mid = Math.floor((high - low) / 2 + low)\n  }\n\n  if (isSurrogatePair(a.charCodeAt(mid - 1))) mid--\n\n  return mid\n}\n\nfunction isSurrogatePair(ch: number): boolean {\n  return ch >= 0xd800 && ch <= 0xdbff\n}\n", "// This is a generated file. Do not edit.\nvar Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nvar ID_Start = /[\\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\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\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\\u08A0-\\u08B4\\u08B6-\\u08BD\\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\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\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\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\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-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\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\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\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-\\uAB65\\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]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/;\nvar ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\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\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\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\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nvar unicode = {\n\tSpace_Separator: Space_Separator,\n\tID_Start: ID_Start,\n\tID_Continue: ID_Continue\n};\n\nvar util = {\n    isSpaceSeparator (c) {\n        return typeof c === 'string' && unicode.Space_Separator.test(c)\n    },\n\n    isIdStartChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c === '$') || (c === '_') ||\n        unicode.ID_Start.test(c)\n        )\n    },\n\n    isIdContinueChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c >= '0' && c <= '9') ||\n        (c === '$') || (c === '_') ||\n        (c === '\\u200C') || (c === '\\u200D') ||\n        unicode.ID_Continue.test(c)\n        )\n    },\n\n    isDigit (c) {\n        return typeof c === 'string' && /[0-9]/.test(c)\n    },\n\n    isHexDigit (c) {\n        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n    },\n};\n\nlet source;\nlet parseState;\nlet stack;\nlet pos;\nlet line;\nlet column;\nlet token;\nlet key;\nlet root;\n\nvar parse = function parse (text, reviver) {\n    source = String(text);\n    parseState = 'start';\n    stack = [];\n    pos = 0;\n    line = 1;\n    column = 0;\n    token = undefined;\n    key = undefined;\n    root = undefined;\n\n    do {\n        token = lex();\n\n        // This code is unreachable.\n        // if (!parseStates[parseState]) {\n        //     throw invalidParseState()\n        // }\n\n        parseStates[parseState]();\n    } while (token.type !== 'eof')\n\n    if (typeof reviver === 'function') {\n        return internalize({'': root}, '', reviver)\n    }\n\n    return root\n};\n\nfunction internalize (holder, name, reviver) {\n    const value = holder[name];\n    if (value != null && typeof value === 'object') {\n        for (const key in value) {\n            const replacement = internalize(value, key, reviver);\n            if (replacement === undefined) {\n                delete value[key];\n            } else {\n                value[key] = replacement;\n            }\n        }\n    }\n\n    return reviver.call(holder, name, value)\n}\n\nlet lexState;\nlet buffer;\nlet doubleQuote;\nlet sign;\nlet c;\n\nfunction lex () {\n    lexState = 'default';\n    buffer = '';\n    doubleQuote = false;\n    sign = 1;\n\n    for (;;) {\n        c = peek();\n\n        // This code is unreachable.\n        // if (!lexStates[lexState]) {\n        //     throw invalidLexState(lexState)\n        // }\n\n        const token = lexStates[lexState]();\n        if (token) {\n            return token\n        }\n    }\n}\n\nfunction peek () {\n    if (source[pos]) {\n        return String.fromCodePoint(source.codePointAt(pos))\n    }\n}\n\nfunction read () {\n    const c = peek();\n\n    if (c === '\\n') {\n        line++;\n        column = 0;\n    } else if (c) {\n        column += c.length;\n    } else {\n        column++;\n    }\n\n    if (c) {\n        pos += c.length;\n    }\n\n    return c\n}\n\nconst lexStates = {\n    default () {\n        switch (c) {\n        case '\\t':\n        case '\\v':\n        case '\\f':\n        case ' ':\n        case '\\u00A0':\n        case '\\uFEFF':\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read();\n            return\n\n        case '/':\n            read();\n            lexState = 'comment';\n            return\n\n        case undefined:\n            read();\n            return newToken('eof')\n        }\n\n        if (util.isSpaceSeparator(c)) {\n            read();\n            return\n        }\n\n        // This code is unreachable.\n        // if (!lexStates[parseState]) {\n        //     throw invalidLexState(parseState)\n        // }\n\n        return lexStates[parseState]()\n    },\n\n    comment () {\n        switch (c) {\n        case '*':\n            read();\n            lexState = 'multiLineComment';\n            return\n\n        case '/':\n            read();\n            lexState = 'singleLineComment';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    multiLineComment () {\n        switch (c) {\n        case '*':\n            read();\n            lexState = 'multiLineCommentAsterisk';\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read();\n    },\n\n    multiLineCommentAsterisk () {\n        switch (c) {\n        case '*':\n            read();\n            return\n\n        case '/':\n            read();\n            lexState = 'default';\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read();\n        lexState = 'multiLineComment';\n    },\n\n    singleLineComment () {\n        switch (c) {\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read();\n            lexState = 'default';\n            return\n\n        case undefined:\n            read();\n            return newToken('eof')\n        }\n\n        read();\n    },\n\n    value () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        case 'n':\n            read();\n            literal('ull');\n            return newToken('null', null)\n\n        case 't':\n            read();\n            literal('rue');\n            return newToken('boolean', true)\n\n        case 'f':\n            read();\n            literal('alse');\n            return newToken('boolean', false)\n\n        case '-':\n        case '+':\n            if (read() === '-') {\n                sign = -1;\n            }\n\n            lexState = 'sign';\n            return\n\n        case '.':\n            buffer = read();\n            lexState = 'decimalPointLeading';\n            return\n\n        case '0':\n            buffer = read();\n            lexState = 'zero';\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read();\n            lexState = 'decimalInteger';\n            return\n\n        case 'I':\n            read();\n            literal('nfinity');\n            return newToken('numeric', Infinity)\n\n        case 'N':\n            read();\n            literal('aN');\n            return newToken('numeric', NaN)\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"');\n            buffer = '';\n            lexState = 'string';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    identifierNameStartEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read();\n        const u = unicodeEscape();\n        switch (u) {\n        case '$':\n        case '_':\n            break\n\n        default:\n            if (!util.isIdStartChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u;\n        lexState = 'identifierName';\n    },\n\n    identifierName () {\n        switch (c) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            buffer += read();\n            return\n\n        case '\\\\':\n            read();\n            lexState = 'identifierNameEscape';\n            return\n        }\n\n        if (util.isIdContinueChar(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('identifier', buffer)\n    },\n\n    identifierNameEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read();\n        const u = unicodeEscape();\n        switch (u) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            break\n\n        default:\n            if (!util.isIdContinueChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u;\n        lexState = 'identifierName';\n    },\n\n    sign () {\n        switch (c) {\n        case '.':\n            buffer = read();\n            lexState = 'decimalPointLeading';\n            return\n\n        case '0':\n            buffer = read();\n            lexState = 'zero';\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read();\n            lexState = 'decimalInteger';\n            return\n\n        case 'I':\n            read();\n            literal('nfinity');\n            return newToken('numeric', sign * Infinity)\n\n        case 'N':\n            read();\n            literal('aN');\n            return newToken('numeric', NaN)\n        }\n\n        throw invalidChar(read())\n    },\n\n    zero () {\n        switch (c) {\n        case '.':\n            buffer += read();\n            lexState = 'decimalPoint';\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n\n        case 'x':\n        case 'X':\n            buffer += read();\n            lexState = 'hexadecimal';\n            return\n        }\n\n        return newToken('numeric', sign * 0)\n    },\n\n    decimalInteger () {\n        switch (c) {\n        case '.':\n            buffer += read();\n            lexState = 'decimalPoint';\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalPointLeading () {\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalFraction';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalPoint () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalFraction';\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalFraction () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalExponent () {\n        switch (c) {\n        case '+':\n        case '-':\n            buffer += read();\n            lexState = 'decimalExponentSign';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalExponentInteger';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentSign () {\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalExponentInteger';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentInteger () {\n        if (util.isDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    hexadecimal () {\n        if (util.isHexDigit(c)) {\n            buffer += read();\n            lexState = 'hexadecimalInteger';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    hexadecimalInteger () {\n        if (util.isHexDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    string () {\n        switch (c) {\n        case '\\\\':\n            read();\n            buffer += escape();\n            return\n\n        case '\"':\n            if (doubleQuote) {\n                read();\n                return newToken('string', buffer)\n            }\n\n            buffer += read();\n            return\n\n        case \"'\":\n            if (!doubleQuote) {\n                read();\n                return newToken('string', buffer)\n            }\n\n            buffer += read();\n            return\n\n        case '\\n':\n        case '\\r':\n            throw invalidChar(read())\n\n        case '\\u2028':\n        case '\\u2029':\n            separatorChar(c);\n            break\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        buffer += read();\n    },\n\n    start () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        // This code is unreachable since the default lexState handles eof.\n        // case undefined:\n        //     return newToken('eof')\n        }\n\n        lexState = 'value';\n    },\n\n    beforePropertyName () {\n        switch (c) {\n        case '$':\n        case '_':\n            buffer = read();\n            lexState = 'identifierName';\n            return\n\n        case '\\\\':\n            read();\n            lexState = 'identifierNameStartEscape';\n            return\n\n        case '}':\n            return newToken('punctuator', read())\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"');\n            lexState = 'string';\n            return\n        }\n\n        if (util.isIdStartChar(c)) {\n            buffer += read();\n            lexState = 'identifierName';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    afterPropertyName () {\n        if (c === ':') {\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforePropertyValue () {\n        lexState = 'value';\n    },\n\n    afterPropertyValue () {\n        switch (c) {\n        case ',':\n        case '}':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforeArrayValue () {\n        if (c === ']') {\n            return newToken('punctuator', read())\n        }\n\n        lexState = 'value';\n    },\n\n    afterArrayValue () {\n        switch (c) {\n        case ',':\n        case ']':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the default lexState.\n        // if (c === undefined) {\n        //     read()\n        //     return newToken('eof')\n        // }\n\n        throw invalidChar(read())\n    },\n};\n\nfunction newToken (type, value) {\n    return {\n        type,\n        value,\n        line,\n        column,\n    }\n}\n\nfunction literal (s) {\n    for (const c of s) {\n        const p = peek();\n\n        if (p !== c) {\n            throw invalidChar(read())\n        }\n\n        read();\n    }\n}\n\nfunction escape () {\n    const c = peek();\n    switch (c) {\n    case 'b':\n        read();\n        return '\\b'\n\n    case 'f':\n        read();\n        return '\\f'\n\n    case 'n':\n        read();\n        return '\\n'\n\n    case 'r':\n        read();\n        return '\\r'\n\n    case 't':\n        read();\n        return '\\t'\n\n    case 'v':\n        read();\n        return '\\v'\n\n    case '0':\n        read();\n        if (util.isDigit(peek())) {\n            throw invalidChar(read())\n        }\n\n        return '\\0'\n\n    case 'x':\n        read();\n        return hexEscape()\n\n    case 'u':\n        read();\n        return unicodeEscape()\n\n    case '\\n':\n    case '\\u2028':\n    case '\\u2029':\n        read();\n        return ''\n\n    case '\\r':\n        read();\n        if (peek() === '\\n') {\n            read();\n        }\n\n        return ''\n\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n        throw invalidChar(read())\n\n    case undefined:\n        throw invalidChar(read())\n    }\n\n    return read()\n}\n\nfunction hexEscape () {\n    let buffer = '';\n    let c = peek();\n\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read();\n\n    c = peek();\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read();\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n    let buffer = '';\n    let count = 4;\n\n    while (count-- > 0) {\n        const c = peek();\n        if (!util.isHexDigit(c)) {\n            throw invalidChar(read())\n        }\n\n        buffer += read();\n    }\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n    start () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push();\n    },\n\n    beforePropertyName () {\n        switch (token.type) {\n        case 'identifier':\n        case 'string':\n            key = token.value;\n            parseState = 'afterPropertyName';\n            return\n\n        case 'punctuator':\n            // This code is unreachable since it's handled by the lexState.\n            // if (token.value !== '}') {\n            //     throw invalidToken()\n            // }\n\n            pop();\n            return\n\n        case 'eof':\n            throw invalidEOF()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterPropertyName () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator' || token.value !== ':') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        parseState = 'beforePropertyValue';\n    },\n\n    beforePropertyValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push();\n    },\n\n    beforeArrayValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        if (token.type === 'punctuator' && token.value === ']') {\n            pop();\n            return\n        }\n\n        push();\n    },\n\n    afterPropertyValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforePropertyName';\n            return\n\n        case '}':\n            pop();\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterArrayValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforeArrayValue';\n            return\n\n        case ']':\n            pop();\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'eof') {\n        //     throw invalidToken()\n        // }\n    },\n};\n\nfunction push () {\n    let value;\n\n    switch (token.type) {\n    case 'punctuator':\n        switch (token.value) {\n        case '{':\n            value = {};\n            break\n\n        case '[':\n            value = [];\n            break\n        }\n\n        break\n\n    case 'null':\n    case 'boolean':\n    case 'numeric':\n    case 'string':\n        value = token.value;\n        break\n\n    // This code is unreachable.\n    // default:\n    //     throw invalidToken()\n    }\n\n    if (root === undefined) {\n        root = value;\n    } else {\n        const parent = stack[stack.length - 1];\n        if (Array.isArray(parent)) {\n            parent.push(value);\n        } else {\n            parent[key] = value;\n        }\n    }\n\n    if (value !== null && typeof value === 'object') {\n        stack.push(value);\n\n        if (Array.isArray(value)) {\n            parseState = 'beforeArrayValue';\n        } else {\n            parseState = 'beforePropertyName';\n        }\n    } else {\n        const current = stack[stack.length - 1];\n        if (current == null) {\n            parseState = 'end';\n        } else if (Array.isArray(current)) {\n            parseState = 'afterArrayValue';\n        } else {\n            parseState = 'afterPropertyValue';\n        }\n    }\n}\n\nfunction pop () {\n    stack.pop();\n\n    const current = stack[stack.length - 1];\n    if (current == null) {\n        parseState = 'end';\n    } else if (Array.isArray(current)) {\n        parseState = 'afterArrayValue';\n    } else {\n        parseState = 'afterPropertyValue';\n    }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n//     return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n    if (c === undefined) {\n        return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n    }\n\n    return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n//     if (token.type === 'eof') {\n//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n//     }\n\n//     const c = String.fromCodePoint(token.value.codePointAt(0))\n//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n    column -= 5;\n    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n    console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`);\n}\n\nfunction formatChar (c) {\n    const replacements = {\n        \"'\": \"\\\\'\",\n        '\"': '\\\\\"',\n        '\\\\': '\\\\\\\\',\n        '\\b': '\\\\b',\n        '\\f': '\\\\f',\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        '\\v': '\\\\v',\n        '\\0': '\\\\0',\n        '\\u2028': '\\\\u2028',\n        '\\u2029': '\\\\u2029',\n    };\n\n    if (replacements[c]) {\n        return replacements[c]\n    }\n\n    if (c < ' ') {\n        const hexString = c.charCodeAt(0).toString(16);\n        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n    }\n\n    return c\n}\n\nfunction syntaxError (message) {\n    const err = new SyntaxError(message);\n    err.lineNumber = line;\n    err.columnNumber = column;\n    return err\n}\n\nvar stringify = function stringify (value, replacer, space) {\n    const stack = [];\n    let indent = '';\n    let propertyList;\n    let replacerFunc;\n    let gap = '';\n    let quote;\n\n    if (\n        replacer != null &&\n        typeof replacer === 'object' &&\n        !Array.isArray(replacer)\n    ) {\n        space = replacer.space;\n        quote = replacer.quote;\n        replacer = replacer.replacer;\n    }\n\n    if (typeof replacer === 'function') {\n        replacerFunc = replacer;\n    } else if (Array.isArray(replacer)) {\n        propertyList = [];\n        for (const v of replacer) {\n            let item;\n\n            if (typeof v === 'string') {\n                item = v;\n            } else if (\n                typeof v === 'number' ||\n                v instanceof String ||\n                v instanceof Number\n            ) {\n                item = String(v);\n            }\n\n            if (item !== undefined && propertyList.indexOf(item) < 0) {\n                propertyList.push(item);\n            }\n        }\n    }\n\n    if (space instanceof Number) {\n        space = Number(space);\n    } else if (space instanceof String) {\n        space = String(space);\n    }\n\n    if (typeof space === 'number') {\n        if (space > 0) {\n            space = Math.min(10, Math.floor(space));\n            gap = '          '.substr(0, space);\n        }\n    } else if (typeof space === 'string') {\n        gap = space.substr(0, 10);\n    }\n\n    return serializeProperty('', {'': value})\n\n    function serializeProperty (key, holder) {\n        let value = holder[key];\n        if (value != null) {\n            if (typeof value.toJSON5 === 'function') {\n                value = value.toJSON5(key);\n            } else if (typeof value.toJSON === 'function') {\n                value = value.toJSON(key);\n            }\n        }\n\n        if (replacerFunc) {\n            value = replacerFunc.call(holder, key, value);\n        }\n\n        if (value instanceof Number) {\n            value = Number(value);\n        } else if (value instanceof String) {\n            value = String(value);\n        } else if (value instanceof Boolean) {\n            value = value.valueOf();\n        }\n\n        switch (value) {\n        case null: return 'null'\n        case true: return 'true'\n        case false: return 'false'\n        }\n\n        if (typeof value === 'string') {\n            return quoteString(value, false)\n        }\n\n        if (typeof value === 'number') {\n            return String(value)\n        }\n\n        if (typeof value === 'object') {\n            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n        }\n\n        return undefined\n    }\n\n    function quoteString (value) {\n        const quotes = {\n            \"'\": 0.1,\n            '\"': 0.2,\n        };\n\n        const replacements = {\n            \"'\": \"\\\\'\",\n            '\"': '\\\\\"',\n            '\\\\': '\\\\\\\\',\n            '\\b': '\\\\b',\n            '\\f': '\\\\f',\n            '\\n': '\\\\n',\n            '\\r': '\\\\r',\n            '\\t': '\\\\t',\n            '\\v': '\\\\v',\n            '\\0': '\\\\0',\n            '\\u2028': '\\\\u2028',\n            '\\u2029': '\\\\u2029',\n        };\n\n        let product = '';\n\n        for (let i = 0; i < value.length; i++) {\n            const c = value[i];\n            switch (c) {\n            case \"'\":\n            case '\"':\n                quotes[c]++;\n                product += c;\n                continue\n\n            case '\\0':\n                if (util.isDigit(value[i + 1])) {\n                    product += '\\\\x00';\n                    continue\n                }\n            }\n\n            if (replacements[c]) {\n                product += replacements[c];\n                continue\n            }\n\n            if (c < ' ') {\n                let hexString = c.charCodeAt(0).toString(16);\n                product += '\\\\x' + ('00' + hexString).substring(hexString.length);\n                continue\n            }\n\n            product += c;\n        }\n\n        const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b);\n\n        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]);\n\n        return quoteChar + product + quoteChar\n    }\n\n    function serializeObject (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value);\n\n        let stepback = indent;\n        indent = indent + gap;\n\n        let keys = propertyList || Object.keys(value);\n        let partial = [];\n        for (const key of keys) {\n            const propertyString = serializeProperty(key, value);\n            if (propertyString !== undefined) {\n                let member = serializeKey(key) + ':';\n                if (gap !== '') {\n                    member += ' ';\n                }\n                member += propertyString;\n                partial.push(member);\n            }\n        }\n\n        let final;\n        if (partial.length === 0) {\n            final = '{}';\n        } else {\n            let properties;\n            if (gap === '') {\n                properties = partial.join(',');\n                final = '{' + properties + '}';\n            } else {\n                let separator = ',\\n' + indent;\n                properties = partial.join(separator);\n                final = '{\\n' + indent + properties + ',\\n' + stepback + '}';\n            }\n        }\n\n        stack.pop();\n        indent = stepback;\n        return final\n    }\n\n    function serializeKey (key) {\n        if (key.length === 0) {\n            return quoteString(key, true)\n        }\n\n        const firstChar = String.fromCodePoint(key.codePointAt(0));\n        if (!util.isIdStartChar(firstChar)) {\n            return quoteString(key, true)\n        }\n\n        for (let i = firstChar.length; i < key.length; i++) {\n            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n                return quoteString(key, true)\n            }\n        }\n\n        return key\n    }\n\n    function serializeArray (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value);\n\n        let stepback = indent;\n        indent = indent + gap;\n\n        let partial = [];\n        for (let i = 0; i < value.length; i++) {\n            const propertyString = serializeProperty(String(i), value);\n            partial.push((propertyString !== undefined) ? propertyString : 'null');\n        }\n\n        let final;\n        if (partial.length === 0) {\n            final = '[]';\n        } else {\n            if (gap === '') {\n                let properties = partial.join(',');\n                final = '[' + properties + ']';\n            } else {\n                let separator = ',\\n' + indent;\n                let properties = partial.join(separator);\n                final = '[\\n' + indent + properties + ',\\n' + stepback + ']';\n            }\n        }\n\n        stack.pop();\n        indent = stepback;\n        return final\n    }\n};\n\nconst JSON5 = {\n    parse,\n    stringify,\n};\n\nvar lib = JSON5;\n\nexport default lib;\n", "import type { ImportSource } from './ImportSource'\nimport type { ProjectPreferences } from './ProjectPreferences'\n\nexport interface ProjectConfig {\n  globalComponents?: Array<string | Record<string, string | ImportSource>>\n  globalDirectives?: Array<string | Record<string, string | ImportSource>>\n  preferences?: Partial<ProjectPreferences>\n}\n\nexport interface ResolvedProjectConfig {\n  globalComponents: Record<string, ImportSource[]>\n  globalDirectives: Record<string, ImportSource[]>\n  preferences: ProjectPreferences\n}\n\nexport const DEFAULT_PROJECT_CONFIG: ResolvedProjectConfig = {\n  globalComponents: {},\n  globalDirectives: {},\n  preferences: {\n    componentsDirectories: ['src/components'],\n    script: { mode: 'setup', language: 'js' },\n    style: { language: 'css' },\n    template: {\n      directiveSyntax: 'shorthand',\n      propCase: 'camel',\n      tagCase: 'auto',\n    },\n  },\n}\n", "import type { DeepPartial } from '@vuedx/shared'\n\nexport function deepDefaults<T extends object>(a: T, b?: DeepPartial<T>): T\nexport function deepDefaults(a: any, b: any): any {\n  if (b == null) return a\n  Object.keys(b).forEach((key) => {\n    const valueA = a[key]\n    const valueB = b[key]\n\n    if (valueB === undefined) return\n    if (valueA == null || Array.isArray(valueB)) {\n      a[key] = valueB\n    } else if (typeof valueA === 'object' && typeof valueB === 'object') {\n      a[key] = deepDefaults(valueA, valueB)\n    } else {\n      a[key] = valueB\n    }\n  })\n\n  return a\n}\n", "import * as Path from 'path'\nimport { toPosixPath } from '@vuedx/shared'\n\nexport interface FileWatcher {\n  close(): void\n}\nexport enum FileWatcherEventKind {\n  Created = 0,\n  Changed = 1,\n  Deleted = 2,\n}\nexport type FileWatcherCallback = (\n  fileName: string,\n  eventKind: FileWatcherEventKind,\n) => void\nexport type DirectoryWatcherCallback = (fileName: string) => void\nexport interface FilesystemHost {\n  readDirectory(rootDir: string, extensions: string[]): string[]\n  fileExists(path: string): boolean\n  readFile(path: string): string | undefined\n  watchFile(path: string, callback: FileWatcherCallback): FileWatcher\n  watchDirectory(\n    path: string,\n    callback: DirectoryWatcherCallback,\n    recursive?: boolean,\n  ): FileWatcher\n}\n\nexport function findNearestFile(\n  fs: FilesystemHost,\n  dir: string,\n  name: string,\n): string | null {\n  let cur = toPosixPath(dir)\n  while (cur.length > 1) {\n    const fileName = Path.posix.resolve(cur, name)\n    if (fs.fileExists(fileName)) return fileName\n    cur = Path.posix.dirname(cur)\n  }\n\n  return null\n}\n", "import { getComponentName, isString } from '@vuedx/shared'\nimport Path from 'path'\nimport type { ImportSource } from '../config/ImportSource'\n\nexport function resolveComponents(\n  rootDir: string,\n  resources: Array<string | Record<string, string | ImportSource>>,\n): Record<string, ImportSource[]> {\n  const components: Record<string, ImportSource[]> = {}\n\n  const add = (name: string, source: ImportSource): void => {\n    const sources = components[name] ?? (components[name] = [])\n    if (\n      sources.some(\n        (item) =>\n          item.moduleName === source.moduleName &&\n          item.exportName === source.exportName,\n      )\n    ) {\n      return // duplicate\n    }\n\n    sources.push(source)\n  }\n\n  for (const resource of resources) {\n    if (isString(resource)) {\n      add(getComponentName(resource), {\n        moduleName: resolve(resource),\n      })\n    } else {\n      Object.entries(resource).forEach(([key, value]) => {\n        add(key, isString(value) ? { moduleName: resolve(value) } : value)\n      })\n    }\n  }\n\n  return components\n\n  function resolve(resource: string): string {\n    if (resource.startsWith('.')) return Path.posix.resolve(rootDir, resource)\n    else return resource\n  }\n}\n", "import { isString } from '@vuedx/shared'\nimport Path from 'path'\nimport type { ImportSource } from '../config/ImportSource'\n\nexport function resolveDirectives(\n  rootDir: string,\n  resources: Array<string | Record<string, string | ImportSource>>,\n): Record<string, ImportSource[]> {\n  const directives: Record<string, ImportSource[]> = {}\n\n  const add = (name: string, source: ImportSource): void => {\n    const sources = directives[name] ?? (directives[name] = [])\n    if (\n      sources.some(\n        (item) =>\n          item.moduleName === source.moduleName &&\n          item.exportName === source.exportName,\n      )\n    ) {\n      return // duplicate\n    }\n\n    sources.push(source)\n  }\n\n  for (const resource of resources) {\n    if (isString(resource)) {\n      // ~ not supported for directives.\n    } else\n      Object.entries(resource).forEach(([key, value]) => {\n        add(key, isString(value) ? { moduleName: resolve(value) } : value)\n      })\n  }\n\n  return directives\n\n  function resolve(resource: string): string {\n    if (resource.startsWith('.')) return Path.posix.resolve(rootDir, resource)\n    else return resource\n  }\n}\n", "import {\n  DEFAULT_PROJECT_CONFIG,\n  ProjectConfig,\n  ResolvedProjectConfig,\n} from '../config/ProjectConfig'\nimport { deepDefaults } from './deepDefaults'\nimport {\n  FilesystemHost,\n  FileWatcher,\n  FileWatcherEventKind,\n  findNearestFile,\n} from './FilesystemHost'\nimport { resolveComponents } from './resolveComponents'\nimport { resolveDirectives } from './resolveDirectives'\nimport JSON5 from 'json5'\nimport * as Path from 'path'\n\nexport class VueProject {\n  static create(fs: FilesystemHost, rootDir: string): VueProject {\n    const projectFile = Path.posix.resolve(rootDir, 'vueconfig.json')\n    const packageFile = findNearestFile(fs, rootDir, 'package.json')\n\n    return new VueProject(\n      fs,\n      rootDir,\n      packageFile,\n      fs.fileExists(projectFile) ? projectFile : null,\n    )\n  }\n\n  private readonly watchers: FileWatcher[] = []\n\n  private _vueVersion: string\n  private _projectVersion: number = 1\n\n  public readonly runtimeFile: string\n\n  public get vueVersion(): string {\n    return this._vueVersion\n  }\n\n  public get projectVersion(): number {\n    return this._projectVersion\n  }\n\n  private constructor(\n    protected readonly fs: FilesystemHost,\n    public readonly rootDir: string,\n    public readonly packageFile: string | null = null,\n    public readonly projectFile: string | null = null,\n  ) {\n    this._vueVersion = '3.2.0'\n    this.runtimeFile = Path.resolve(\n      rootDir,\n      'project.vuedx_project_runtime.d.ts',\n    )\n    this.onPackageFileChange()\n    this.onProjectFileChange()\n\n    if (packageFile != null) {\n      this.watchers.push(\n        fs.watchFile(packageFile, (_fileName, event) => {\n          if (event === FileWatcherEventKind.Changed) {\n            this.onPackageFileChange()\n          }\n        }),\n      )\n    }\n\n    if (projectFile != null) {\n      this.watchers.push(\n        fs.watchFile(projectFile, (_fileName, event) => {\n          if (event === FileWatcherEventKind.Changed) {\n            this.onProjectFileChange()\n          } else if (event === FileWatcherEventKind.Deleted) {\n            this._config = DEFAULT_PROJECT_CONFIG\n          }\n        }),\n      )\n    }\n  }\n\n  private onProjectFileChange(): void {\n    if (this.projectFile == null) return\n\n    const content = this.fs.readFile(this.projectFile)\n    if (content != null) {\n      try {\n        this.setConfig(JSON5.parse(content))\n      } catch (e) {\n        const error = e as Error\n        console.error(\n          `[VueDX] (ProjectConfig) ${error.message} ${error.stack ?? ''}`,\n        )\n      }\n    }\n  }\n\n  private onPackageFileChange(): void {\n    if (this.packageFile == null) return\n\n    const content = this.fs.readFile(this.packageFile)\n    if (content != null) {\n      try {\n        const pkg = JSON.parse(content)\n        this.loadDependencies({\n          ...pkg.devDependencies,\n          ...pkg.dependencies,\n        })\n      } catch (e) {\n        const error = e as Error\n        console.error(\n          `[VueDX] (ProjectConfig) ${error.message} ${error.stack ?? ''}`,\n        )\n      }\n\n      const vueVersion = this._dependencies['vue']\n      if (vueVersion != null) {\n        this._vueVersion = vueVersion\n      }\n    }\n  }\n\n  private loadDependencies(dependencies: Record<string, string>): void {\n    if (this.packageFile == null) return\n    const modulesDir = Path.posix.resolve(\n      Path.posix.dirname(this.packageFile),\n      'node_modules',\n    )\n\n    Object.keys(dependencies).forEach((packageName) => {\n      const fileName = Path.posix.resolve(\n        modulesDir,\n        packageName,\n        'package.json',\n      )\n\n      if (this.fs.fileExists(fileName)) {\n        try {\n          this._dependencies[packageName] = JSON.parse(\n            this.fs.readFile(fileName) ?? '{}',\n          ).version\n        } catch (e) {\n          const error = e as Error\n          console.error(\n            `[VueDX] (ProjectConfig) ${error.message} in ${fileName} ${\n              error.stack ?? ''\n            }`,\n          )\n          this._dependencies[packageName] = '0.0.0'\n        }\n      }\n    })\n  }\n\n  public dispose(): void {\n    this.watchers.forEach((watcher) => watcher.close())\n    this.watchers.length = 0\n  }\n\n  public _dependencies: Record<string, string> = {}\n  public get dependencies(): Readonly<Record<string, string>> {\n    return this._dependencies\n  }\n\n  private _config = DEFAULT_PROJECT_CONFIG\n  public get config(): Readonly<ResolvedProjectConfig> {\n    return this._config\n  }\n\n  private setConfig(config: ProjectConfig): void {\n    this._config = {\n      globalComponents: this._config.globalComponents,\n      globalDirectives: this._config.globalDirectives,\n      preferences: deepDefaults(this._config.preferences, config.preferences),\n    }\n\n    if (config.globalComponents != null) {\n      this._config.globalComponents = resolveComponents(\n        this.rootDir,\n        config.globalComponents,\n      )\n    }\n\n    if (config.globalDirectives != null) {\n      this._config.globalDirectives = resolveDirectives(\n        this.rootDir,\n        config.globalDirectives,\n      )\n    }\n\n    this._projectVersion += 1\n  }\n\n  public get kind(): 'inferred' | 'configured' {\n    return this.projectFile == null ? 'inferred' : 'configured'\n  }\n}\n", "export const version = VERSION\nexport type {\n  ProjectConfig,\n  ResolvedProjectConfig,\n} from './config/ProjectConfig'\nexport type { ProjectPreferences } from './config/ProjectPreferences'\nexport type { FilesystemHost } from './project/FilesystemHost'\nexport { VueProject } from './project/VueProject'\n", "/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n", "export const NAMESPACE = `package:@vuedx/typescript-plugin-vue` as const\nexport const TS_LANGUAGE_SERVICE = Symbol('Undecorated Language Service')\n", "const PATCHED_METHODS = Symbol('Vue Patched Methods')\nexport function overrideMethod<T extends object, K extends keyof T>(\n  target: T,\n  methodName: K,\n  createOverride: (fn: T[K]) => T[K] extends undefined ? never : T[K],\n): () => void {\n  const patched: K[] = (target as any)[PATCHED_METHODS] ?? []\n  if (patched.includes(methodName)) {\n    return () => {\n      // @ts-expect-error\n      if (target[methodName]?._original != null) {\n        // @ts-expect-error\n        target[methodName] = target[methodName]._original\n      }\n    }\n  }\n  let fn = target[methodName]\n  if (typeof fn === 'function') {\n    try {\n      fn = fn.bind(target)\n    } catch {\n      // - ignore\n    }\n  }\n  target[methodName] = createOverride(fn)\n\n  // @ts-expect-error\n  target[methodName]._original = fn\n\n  patched.push(methodName)\n  ;(target as any)[PATCHED_METHODS] = patched\n\n  return (): void => {\n    target[methodName] = fn\n  }\n}\n", "import type { TypeScript } from '../contracts/TypeScript'\n\nexport function areOverlappingTextSpans(\n  a: TypeScript.TextSpan,\n  b: TypeScript.TextSpan,\n): boolean {\n  const aStart = a.start\n  const aEnd = a.start + a.length\n  const bStart = b.start\n  const bEnd = b.start + b.length\n\n  return aStart <= bEnd && bStart <= aEnd\n}\n", "import * as util from 'util'\n\ninterface Writer {\n  info(line: string): void\n  error(line: string): void\n  debug(line: string): void\n}\n\nexport const enum LogLevel {\n  DEBUG,\n  INFO,\n  ERROR,\n  SILENT,\n}\n\nexport class LoggerService {\n  readonly #id: string\n  readonly #context: string\n  #level: LogLevel\n\n  constructor(\n    context: string | { name: string },\n    level: LogLevel = LogLevel.DEBUG,\n  ) {\n    this.#id = LoggerService.currentId ?? ''\n    this.#context = typeof context === 'string' ? context : context.name\n    this.#level = level\n  }\n\n  public setLevel(level: LogLevel): void {\n    this.#level = level\n  }\n\n  public debug(message: string, ...args: any[]): void {\n    if (this.#level > LogLevel.DEBUG) return\n    this.#write('debug', message, ...args)\n  }\n\n  public info(message: string, ...args: any[]): void {\n    if (this.#level > LogLevel.INFO) return\n    this.#write('info', message, ...args)\n  }\n\n  public error(message: string | Error, ...args: any[]): void {\n    if (this.#level > LogLevel.ERROR) return\n    if (typeof message === 'string') {\n      this.#write('error', message, ...args)\n    } else {\n      this.#write('error', '', message, ...args)\n    }\n  }\n\n  #getPrefix(level: string): string {\n    return `${level.toUpperCase()} \"VueDX/${this.#context}/P${this.#id}\"`\n  }\n\n  #write(level: keyof Writer, message: string, ...args: any[]): void {\n    LoggerService.#writer[level](\n      `${this.#getPrefix(level)} ${util.formatWithOptions(\n        { colors: false },\n        message,\n        ...args,\n      )}`,\n    )\n  }\n\n  public static currentId: string | null = null\n\n  static #writer: Writer = {\n    info: (line) => process.stderr.write(line + '\\n'),\n    error: (line) => process.stderr.write(line + '\\n'),\n    debug: (line) => process.stderr.write(line + '\\n'),\n  }\n\n  public static setWriter(writer: Writer): void {\n    this.#writer = writer\n  }\n\n  public static getLogger(name: string, level?: LogLevel): LoggerService {\n    return new LoggerService(name, level)\n  }\n}\n", "import type { TextDocumentContentChangeEvent } from '@vuedx/vue-virtual-textdocument'\nimport type { FilesystemProvider } from '../contracts/FilesystemProvider'\nimport type { TypeScript } from '../contracts/TypeScript'\nimport { LoggerService } from '../services/LoggerService'\nimport { overrideMethod } from './overrideMethod'\n\nconst watchers = new Map<\n  string,\n  Set<(changes: TextDocumentContentChangeEvent[], version: number) => void>\n>()\n\nexport function createFilesystemProvider(\n  serverHost: TypeScript.server.ServerHost,\n  projectService?: TypeScript.server.ProjectService,\n): FilesystemProvider {\n  const logger = LoggerService.getLogger('virtualFs')\n\n  const fix = (fileName: string): void => {\n    const scriptInfo = projectService?.getScriptInfo(fileName)\n    if (scriptInfo == null) return\n    overrideMethod(\n      scriptInfo,\n      'editContent',\n      (editContent) => (start, end, newText) => {\n        editContent.call(scriptInfo, start, end, newText)\n        const current = watchers.get(fileName)\n        if (current != null && current.size > 0) {\n          const latestVersion = scriptInfo.getLatestVersion()\n          const version = parseFloat(\n            latestVersion.startsWith('Text-')\n              ? latestVersion.substring(5)\n              : latestVersion.substring(4).replace('-', '.'),\n          )\n          logger.debug(`${version} updated(${fileName})`)\n          const changes = [{ text: fs.read(fileName) }]\n          current.forEach((fn) => fn(changes, version))\n        }\n      },\n    )\n  }\n\n  const fs: FilesystemProvider = {\n    exists(fileName) {\n      const result =\n        projectService?.getScriptInfo(fileName) != null ||\n        serverHost.fileExists(fileName)\n\n      logger.debug(`${result ? 'Y' : 'N'} = exists(${fileName})`)\n\n      return result\n    },\n    read(fileName) {\n      const snapshot = projectService?.getScriptInfo(fileName)?.getSnapshot()\n      if (snapshot == null) return serverHost.readFile(fileName) ?? ''\n      return snapshot.getText(0, snapshot.getLength())\n    },\n    watch(fileName, onChange) {\n      fix(fileName)\n      if (!watchers.has(fileName)) watchers.set(fileName, new Set([onChange]))\n      else watchers.get(fileName)?.add(onChange)\n\n      return () => {\n        watchers.get(fileName)?.delete(onChange)\n      }\n    },\n  }\n\n  return fs\n}\n", "export default class QuickLRU {\n\tconstructor(options = {}) {\n\t\tif (!(options.maxSize && options.maxSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tif (typeof options.maxAge === 'number' && options.maxAge === 0) {\n\t\t\tthrow new TypeError('`maxAge` must be a number greater than 0');\n\t\t}\n\n\t\t// TODO: Use private class fields when ESLint supports them.\n\t\tthis.maxSize = options.maxSize;\n\t\tthis.maxAge = options.maxAge || Number.POSITIVE_INFINITY;\n\t\tthis.onEviction = options.onEviction;\n\t\tthis.cache = new Map();\n\t\tthis.oldCache = new Map();\n\t\tthis._size = 0;\n\t}\n\n\t// TODO: Use private class methods when targeting Node.js 16.\n\t_emitEvictions(cache) {\n\t\tif (typeof this.onEviction !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [key, item] of cache) {\n\t\t\tthis.onEviction(key, item.value);\n\t\t}\n\t}\n\n\t_deleteIfExpired(key, item) {\n\t\tif (typeof item.expiry === 'number' && item.expiry <= Date.now()) {\n\t\t\tif (typeof this.onEviction === 'function') {\n\t\t\t\tthis.onEviction(key, item.value);\n\t\t\t}\n\n\t\t\treturn this.delete(key);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t_getOrDeleteIfExpired(key, item) {\n\t\tconst deleted = this._deleteIfExpired(key, item);\n\t\tif (deleted === false) {\n\t\t\treturn item.value;\n\t\t}\n\t}\n\n\t_getItemValue(key, item) {\n\t\treturn item.expiry ? this._getOrDeleteIfExpired(key, item) : item.value;\n\t}\n\n\t_peek(key, cache) {\n\t\tconst item = cache.get(key);\n\n\t\treturn this._getItemValue(key, item);\n\t}\n\n\t_set(key, value) {\n\t\tthis.cache.set(key, value);\n\t\tthis._size++;\n\n\t\tif (this._size >= this.maxSize) {\n\t\t\tthis._size = 0;\n\t\t\tthis._emitEvictions(this.oldCache);\n\t\t\tthis.oldCache = this.cache;\n\t\t\tthis.cache = new Map();\n\t\t}\n\t}\n\n\t_moveToRecent(key, item) {\n\t\tthis.oldCache.delete(key);\n\t\tthis._set(key, item);\n\t}\n\n\t* _entriesAscending() {\n\t\tfor (const item of this.oldCache) {\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\tconst deleted = this._deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield item;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of this.cache) {\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this._deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\tget(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\tconst item = this.cache.get(key);\n\n\t\t\treturn this._getItemValue(key, item);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\tconst item = this.oldCache.get(key);\n\t\t\tif (this._deleteIfExpired(key, item) === false) {\n\t\t\t\tthis._moveToRecent(key, item);\n\t\t\t\treturn item.value;\n\t\t\t}\n\t\t}\n\t}\n\n\tset(key, value, {maxAge = this.maxAge === Number.POSITIVE_INFINITY ? undefined : Date.now() + this.maxAge} = {}) {\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.set(key, {\n\t\t\t\tvalue,\n\t\t\t\texpiry: maxAge\n\t\t\t});\n\t\t} else {\n\t\t\tthis._set(key, {value, expiry: maxAge});\n\t\t}\n\t}\n\n\thas(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn !this._deleteIfExpired(key, this.cache.get(key));\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\treturn !this._deleteIfExpired(key, this.oldCache.get(key));\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpeek(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this._peek(key, this.cache);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\treturn this._peek(key, this.oldCache);\n\t\t}\n\t}\n\n\tdelete(key) {\n\t\tconst deleted = this.cache.delete(key);\n\t\tif (deleted) {\n\t\t\tthis._size--;\n\t\t}\n\n\t\treturn this.oldCache.delete(key) || deleted;\n\t}\n\n\tclear() {\n\t\tthis.cache.clear();\n\t\tthis.oldCache.clear();\n\t\tthis._size = 0;\n\t}\n\n\tresize(newSize) {\n\t\tif (!(newSize && newSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tconst items = [...this._entriesAscending()];\n\t\tconst removeCount = items.length - newSize;\n\t\tif (removeCount < 0) {\n\t\t\tthis.cache = new Map(items);\n\t\t\tthis.oldCache = new Map();\n\t\t\tthis._size = items.length;\n\t\t} else {\n\t\t\tif (removeCount > 0) {\n\t\t\t\tthis._emitEvictions(items.slice(0, removeCount));\n\t\t\t}\n\n\t\t\tthis.oldCache = new Map(items.slice(removeCount));\n\t\t\tthis.cache = new Map();\n\t\t\tthis._size = 0;\n\t\t}\n\n\t\tthis.maxSize = newSize;\n\t}\n\n\t* keys() {\n\t\tfor (const [key] of this) {\n\t\t\tyield key;\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const [, value] of this) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const item of this.cache) {\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this._deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield [key, value.value];\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of this.oldCache) {\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\tconst deleted = this._deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield [key, value.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t* entriesDescending() {\n\t\tlet items = [...this.cache];\n\t\tfor (let i = items.length - 1; i >= 0; --i) {\n\t\t\tconst item = items[i];\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this._deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield [key, value.value];\n\t\t\t}\n\t\t}\n\n\t\titems = [...this.oldCache];\n\t\tfor (let i = items.length - 1; i >= 0; --i) {\n\t\t\tconst item = items[i];\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\tconst deleted = this._deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield [key, value.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t* entriesAscending() {\n\t\tfor (const [key, value] of this._entriesAscending()) {\n\t\t\tyield [key, value.value];\n\t\t}\n\t}\n\n\tget size() {\n\t\tif (!this._size) {\n\t\t\treturn this.oldCache.size;\n\t\t}\n\n\t\tlet oldCacheSize = 0;\n\t\tfor (const key of this.oldCache.keys()) {\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\toldCacheSize++;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this._size + oldCacheSize, this.maxSize);\n\t}\n}\n", "import QuickLRU from 'quick-lru'\nimport { LoggerService } from './LoggerService'\n\ninterface Item<T> {\n  version: string\n  value: T\n}\n\nexport class CacheService<T> {\n  private readonly logger = new LoggerService('Cache')\n  private readonly cache = new QuickLRU<string, Item<T>>({\n    maxSize: this.maxSize,\n  })\n\n  constructor(\n    private readonly getVersion: (fileName: string) => string,\n    private readonly maxSize: number = 1000,\n  ) {}\n\n  public getItem(fileName: string): T | null {\n    const item = this.cache.get(fileName)\n    if (item == null) return null\n    if (item.version === this.getVersion(fileName)) return item.value\n    this.logger.debug('Evict ' + item.version, fileName)\n    this.cache.delete(fileName)\n    return null\n  }\n\n  public setItem(fileName: string, value: T): void {\n    const version = this.getVersion(fileName)\n    this.logger.debug('Set ' + version, fileName)\n    this.cache.set(fileName, { version, value })\n  }\n\n  public withCache(fileName: string, fn: (item: T | null) => T): T {\n    const prevItem = this.getItem(fileName)\n    const nextItem = fn(prevItem)\n    if (prevItem !== nextItem) {\n      this.logger.debug('Miss', fileName)\n      this.setItem(fileName, nextItem)\n    } else {\n      this.logger.debug('Hit', fileName)\n    }\n    return nextItem\n  }\n}\n", "import {\n  isNotNull,\n  isProjectRuntimeFile,\n  isVueRuntimeFile,\n  last,\n} from '@vuedx/shared'\nimport {\n  Range,\n  TextDocument,\n  TextSpan,\n  VueSFCDocument,\n} from '@vuedx/vue-virtual-textdocument'\nimport * as Path from 'path'\nimport type { Disposable } from '../contracts/Disposable'\nimport type { FilesystemProvider } from '../contracts/FilesystemProvider'\nimport type { OffsetRangeLike } from '../contracts/OffsetRangeLike'\nimport type { TypeScript } from '../contracts/TypeScript'\nimport { areOverlappingTextSpans } from '../helpers/areOverlappingTextSpans'\nimport { createFilesystemProvider } from '../helpers/createFilesystemProvider'\nimport { CacheService } from './CacheService'\nimport { LoggerService } from './LoggerService'\nimport type { TypescriptContextService } from './TypescriptContextService'\n\nexport class FilesystemService implements Disposable {\n  public static createInstance(\n    ts: TypescriptContextService,\n  ): FilesystemService {\n    return new FilesystemService(\n      createFilesystemProvider(ts.serverHost, ts.projectService),\n      ts,\n    )\n  }\n\n  private readonly vueFiles = new Map<string, VueSFCDocument>()\n  private readonly watchers = new Set<() => void>()\n  private readonly logger = new LoggerService(FilesystemService.name)\n\n  constructor(\n    private readonly provider: FilesystemProvider,\n    private readonly ts: TypescriptContextService,\n  ) {}\n\n  public getVersion(fileName: string): string {\n    return this.ts.serviceHost.getScriptVersion(fileName)\n  }\n\n  private readonly textDocumentCache = new CacheService<TextDocument>(\n    (fileName) => this.getVersion(fileName),\n  )\n\n  /**\n   * Returns source file for virtual files.\n   */\n  public getSourceFile(fileName: string): TextDocument | null {\n    return this.getFile(fileName)\n  }\n\n  public getFile(fileName: string): TextDocument | null {\n    if (this.isVueFile(fileName)) return this.getVueFile(fileName)\n    if (!this.provider.exists(fileName)) return null\n\n    return this.textDocumentCache.withCache(fileName, (prevFile) => {\n      if (prevFile != null) return prevFile\n\n      return TextDocument.create(\n        fileName,\n        this.getLanguageId(fileName),\n        Date.now(),\n        this.provider.read(fileName),\n      )\n    })\n  }\n\n  public getLanguageId(fileName: string): string {\n    const ext = this.getFileExtension(fileName)\n\n    switch (ext) {\n      case 'js':\n      case 'cjs':\n      case 'mjs':\n      case 'node':\n        return 'javascript'\n\n      case 'ts':\n        return 'typescript'\n\n      case 'tsx':\n        return 'typescriptreact'\n\n      default:\n        return ext\n    }\n  }\n\n  /**\n   * Get Vue SFC File\n   * TODO: Create a shared cache for closed files.\n   * @returns null for non-vue files and when file does not exist\n   */\n  public getVueFile(fileName: string): VueSFCDocument | null {\n    fileName = this.getRealFileNameIfAny(fileName)\n\n    if (!this.isVueFile(fileName)) return null\n    const cachedFile = this.vueFiles.get(fileName)\n    if (cachedFile != null) return cachedFile\n    if (!this.provider.exists(fileName)) return null\n\n    const file = VueSFCDocument.create(fileName, this.provider.read(fileName), {\n      isTypeScript: true,\n      typescript: this.ts.lib,\n    })\n\n    const project = this.ts.project\n    if (project != null) {\n      const registerFileUpdate = (\n        fileName: string,\n      ): TypeScript.server.ScriptInfo | undefined => {\n        const info = project.getScriptInfo(fileName)\n        project.registerFileUpdate(fileName)\n        project.markAsDirty()\n        if (info == null) return\n        info.registerFileUpdate()\n        info.markContainingProjectsAsDirty()\n        return info\n      }\n\n      const stopWatching = this.provider.watch(\n        file.originalFileName,\n        (changes, version) => {\n          file.update(changes, version)\n          registerFileUpdate(file.generatedFileName)\n          const scriptInfo = registerFileUpdate(file.originalFileName)\n          if (scriptInfo == null) return\n          scriptInfo.containingProjects.forEach((project) => {\n            project.refreshDiagnostics()\n          })\n        },\n      )\n\n      this.watchers.add(stopWatching)\n      this.vueFiles.set(fileName, file)\n\n      const fsWatcher = this.ts.serverHost.watchFile(\n        file.originalFileName,\n        (fileName, eventKind) => {\n          this.logger.info(`File changed: ${eventKind} - ${fileName}`)\n          if (eventKind === this.ts.lib.FileWatcherEventKind.Deleted) {\n            const generatedScriptInfo = project.getScriptInfo(\n              file.generatedFileName,\n            )\n            if (generatedScriptInfo != null) {\n              project.removeFile(generatedScriptInfo, false, true)\n            }\n\n            const originalScriptInfo = project.getScriptInfo(\n              file.originalFileName,\n            )\n            if (originalScriptInfo != null) {\n              project.removeFile(originalScriptInfo, false, true)\n            }\n\n            stopWatching()\n            this.vueFiles.delete(file.originalFileName)\n            this.watchers.delete(stopWatching)\n            fsWatcher.close()\n          }\n        },\n      )\n    }\n    return file\n  }\n\n  public getTextSpan(\n    doc: Pick<TextDocument, 'getText'>,\n    span: TextSpan,\n  ): string {\n    return doc.getText().slice(span.start, span.start + span.length)\n  }\n\n  public getLineText(\n    doc: Pick<TextDocument, 'getText' | 'positionAt' | 'offsetAt'>,\n    offset: number,\n  ): string {\n    const { line } = doc.positionAt(offset)\n    const start = doc.offsetAt({ line, character: 0 })\n    const end = doc.offsetAt({ line: line + 1, character: 0 })\n\n    return doc.getText().slice(start, end - 1)\n  }\n\n  public isVueFile(fileName: string): boolean {\n    return fileName.endsWith('.vue')\n  }\n\n  /**\n   * @deprecated Use {@link isGeneratedVueFile} instead\n   */\n  public isVueTsFile(fileName: string): boolean {\n    return fileName.endsWith('.vue.tsx') || fileName.endsWith('.vue.jsx')\n  }\n\n  public isGeneratedVueFile(fileName: string): boolean {\n    return fileName.endsWith('.vue.tsx') || fileName.endsWith('.vue.jsx')\n  }\n\n  public getRealFileNameIfAny(fileName: string): string {\n    if (this.isGeneratedVueFile(fileName)) return fileName.slice(0, -4)\n\n    return fileName\n  }\n\n  public isVueRuntimeFile(fileName: string): boolean {\n    return isVueRuntimeFile(fileName)\n  }\n\n  public isProjectRuntimeFile(fileName: string): boolean {\n    return isProjectRuntimeFile(fileName)\n  }\n\n  private readonly NULL_RANGE: Range = {\n    start: { line: 0, character: 0 },\n    end: { line: 0, character: 0 },\n  }\n\n  public toFileName(uri: string): string {\n    return uri\n  }\n\n  public toRange(file: TextDocument, range: OffsetRangeLike): Range {\n    if (range.start == null) return this.NULL_RANGE\n\n    const start = file.positionAt(range.start)\n    if (range.length == null) return { start, end: start }\n    const end = file.positionAt(range.start + range.length)\n\n    return { start, end }\n  }\n\n  public toOffsets(file: TextDocument, range: Range): OffsetRangeLike {\n    const start = file.offsetAt(range.start)\n    const end = file.offsetAt(range.end)\n\n    return { start, length: end - start }\n  }\n\n  public getFileExtension(fileName: string): string {\n    return Path.posix.extname(fileName).slice(1)\n  }\n\n  public getPositionString(\n    doc: Pick<TextDocument, 'positionAt'>,\n    offset: number,\n  ): string {\n    const position = doc.positionAt(offset)\n\n    return `${position.line + 1}:${position.character + 1}`\n  }\n\n  public dispose(): void {\n    this.watchers.forEach((stop) => stop())\n    this.watchers.clear()\n    this.vueFiles.clear()\n  }\n\n  /**\n   * Dedupe changes by fileName\n   */\n  public resolveAllFileTextChanges<T extends TypeScript.FileTextChanges>(\n    changes: readonly T[],\n  ): T[] {\n    const changesByFileName = new Map<string, T>()\n\n    for (const textChanges of changes) {\n      const transformedChanges = this.resolveFileTextChanges(textChanges)\n      if (transformedChanges == null) continue\n      const current = changesByFileName.get(transformedChanges.fileName)\n      if (current != null) {\n        const changes = [...current.textChanges]\n        transformedChanges.textChanges.forEach((change) => {\n          const duplicate = current.textChanges.find((c) =>\n            areOverlappingTextSpans(c.span, change.span),\n          )\n          if (duplicate != null) return\n          changes.push(change)\n        })\n        current.textChanges = changes\n      } else {\n        changesByFileName.set(transformedChanges.fileName, transformedChanges)\n      }\n    }\n\n    return Array.from(changesByFileName.values())\n  }\n\n  public resolveFileTextChanges<T extends TypeScript.FileTextChanges>(\n    fileTextChanges: T,\n  ): T | null {\n    if (this.isGeneratedVueFile(fileTextChanges.fileName)) {\n      const asFileTextChanges = (changes: T): T => {\n        if (fileTextChanges.isNewFile !== true) return changes\n        return { ...changes, isNewFile: fileTextChanges.isNewFile }\n      }\n\n      const file = this.getVueFile(fileTextChanges.fileName)\n      if (file == null) return null\n      return asFileTextChanges({\n        ...fileTextChanges,\n        fileName: file.originalFileName,\n        textChanges: fileTextChanges.textChanges\n          .map((textChange) => {\n            const span = file.findOriginalTextSpan(textChange.span)\n            if (span == null) return null\n            const block = file.getBlockAt(span.start)\n            if (block == null) {\n              const previous = file.blocks.filter(\n                (block) => block.loc.end.offset <= span.start,\n              )\n              const target =\n                previous.length === 0\n                  ? file.descriptor.scriptSetup ?? file.descriptor.script\n                  : last(previous)\n\n              if (target != null) {\n                span.start = target.loc.end.offset\n                span.length = 0\n              }\n            }\n\n            return { span, newText: textChange.newText }\n          })\n          .filter(isNotNull),\n      })\n    }\n\n    return fileTextChanges\n  }\n}\n", "import type { ProjectPreferences } from '@vuedx/projectconfig'\nimport {\n  createModel,\n  effect,\n  Model,\n  readonly,\n  ReadonlyModel,\n  Telemetry,\n} from '@vuedx/shared'\n\nexport interface PluginConfig {\n  /** Enable/disable .vue support */\n  enabled: boolean\n  /** Enable/disable telemetry */\n  telemetry: boolean\n  /** A file to communicate with extension? */\n  extensionSocketId?: string\n  /** Include sourcemaps in debug mode */\n  debugSourceMaps?: boolean\n  /** Prefrences  */\n  preferences?: Partial<\n    Pick<ProjectPreferences, 'script' | 'style' | 'template'>\n  >\n}\n\nexport class ConfigManager {\n  public static instance = new ConfigManager()\n\n  private readonly _config: Model<PluginConfig>\n\n  private constructor() {\n    this._config = createModel<PluginConfig>({\n      enabled: true,\n      telemetry: true,\n    })\n\n    effect(this._config, ['telemetry'], () => {\n      Telemetry.setTelemetryEnabled(this.state.telemetry)\n    })\n  }\n\n  public get state(): ReadonlyModel<PluginConfig> {\n    return readonly(this._config)\n  }\n\n  public setConfig(config: PluginConfig): void {\n    this._config.setAll(config)\n  }\n}\n", "/* eslint-disable no-labels */\nimport { ProjectPreferences, VueProject } from '@vuedx/projectconfig'\nimport {\n  binarySearchKey,\n  cache,\n  invariant,\n  isVueFile,\n  toPosixPath,\n} from '@vuedx/shared'\nimport * as Path from 'path'\nimport type { Disposable } from '../contracts/Disposable'\nimport type {\n  TSLanguageService,\n  TSLanguageServiceHost,\n  TSProject,\n  TypeScript,\n} from '../contracts/TypeScript'\nimport { ConfigManager } from '../managers/ConfigManager'\nimport { CacheService } from './CacheService'\nimport { LoggerService, LogLevel } from './LoggerService'\n\ninterface TypescriptContextServiceOptions {\n  project?: TSProject\n  typesDir: string\n  typescript: typeof TypeScript\n  languageService: TSLanguageService\n  languageServiceHost: TSLanguageServiceHost\n  serverHost: TypeScript.server.ServerHost\n}\n\nexport class TypescriptContextService implements Disposable {\n  private readonly logger = LoggerService.getLogger(\n    TypescriptContextService.name,\n    LogLevel.DEBUG,\n  )\n\n  private options: TypescriptContextServiceOptions\n\n  public constructor(options: TypescriptContextServiceOptions) {\n    this.options = options\n  }\n\n  public get lib(): typeof TypeScript {\n    return this.options.typescript\n  }\n\n  public get serverHost(): TypeScript.server.ServerHost {\n    return this.options.serverHost\n  }\n\n  public get projectService(): TypeScript.server.ProjectService | undefined {\n    return this.options.project?.projectService\n  }\n\n  public get service(): TSLanguageService {\n    return this.options.languageService\n  }\n\n  public get serviceHost(): TSLanguageServiceHost {\n    return this.options.languageServiceHost\n  }\n\n  public get project(): TSProject | undefined {\n    return this.options.project\n  }\n\n  public updateOptions(\n    options: Partial<TypescriptContextServiceOptions>,\n  ): void {\n    if (options.typescript != null) this.options.typescript = options.typescript\n    if (options.serverHost != null) this.options.serverHost = options.serverHost\n    if (options.languageService != null)\n      this.options.languageService = options.languageService\n    if (options.typesDir != null) this.options.typesDir = options.typesDir\n    if (options.project != null) {\n      this.options.project = options.project\n    }\n  }\n\n  readonly #projectRuntimeFileCache = new CacheService<string>((fileName) =>\n    String(this.getVueProjectFor(fileName).projectVersion),\n  )\n\n  public getVueRuntimeFileName(_version: string): string {\n    return toPosixPath(\n      Path.resolve(this.options.typesDir, '3.x.vuedx_runtime.d.ts'),\n    )\n  }\n\n  public getVueRuntimeFileNameFor(fileName: string): string {\n    return this.getVueRuntimeFileName(\n      this.getVueProjectFor(fileName).vueVersion,\n    )\n  }\n\n  public getProjectRuntimeFile(fileName: string): string {\n    const runtimeFileName = this.getProjectRuntimeFileNameFor(fileName)\n\n    return this.#projectRuntimeFileCache.withCache(\n      runtimeFileName,\n      (previous) => {\n        if (previous != null) return previous\n\n        const project = this.getVueProjectFor(fileName)\n        const lines: string[] = []\n\n        const components = Array.from(\n          Object.entries(project.config.globalComponents),\n        )\n\n        if (components.length > 0) {\n          const declarations = components.map(([name, sources]) => {\n            const types = sources\n              // Ignore namespace imports for now.\n              .filter((source) => source.exportName !== '*')\n              .map((source, index) => {\n                const localName = `${name}${index}`\n\n                if (source.exportName != null) {\n                  lines.push(\n                    `import { ${source.exportName} as ${localName} } from \"${source.moduleName}\"`,\n                  )\n                } else {\n                  lines.push(`import ${localName} from \"${source.moduleName}\"`)\n                }\n\n                return `typeof ${localName}`\n              })\n              .join(' | ')\n\n            return `${name}: ${types.trim().length === 0 ? 'never' : types}`\n          })\n\n          const globalComponentProperties = declarations\n            .map((declaration) => `    ${declaration}`)\n            .join('\\n')\n          lines.push(\n            // Add global components to both vue an @vue/runtime-core\n            `declare module '@vue/runtime-core' {`,\n            `   interface GlobalComponents {`,\n            globalComponentProperties,\n            `   }`,\n            `}`,\n            `declare module 'vue' {`,\n            `   interface GlobalComponents {`,\n            globalComponentProperties,\n            `   }`,\n            `}`,\n          )\n        }\n\n        const code = lines.join('\\n') + '\\n'\n\n        this.logger.debug(\n          `Creating ${runtimeFileName} from ${\n            project.projectFile ?? '<inferred>'\n          }`,\n          project.config.globalComponents,\n          code,\n        )\n\n        return code\n      },\n    )\n  }\n\n  public getProjectRuntimeFileNameFor(fileName: string): string {\n    const project = this.getVueProjectFor(fileName)\n    return toPosixPath(project.runtimeFile)\n  }\n\n  public getVuePreferencesFor(fileName: string): ProjectPreferences {\n    const project = this.getVueProjectFor(fileName)\n    const preferences = ConfigManager.instance.state.preferences\n\n    this.logger.debug('Preferences', preferences)\n\n    return project.kind === 'inferred'\n      ? {\n          ...project.config.preferences,\n          script: {\n            ...project.config.preferences.script,\n            ...preferences?.script,\n          },\n          template: {\n            ...project.config.preferences.template,\n            ...preferences?.template,\n          },\n          style: {\n            ...project.config.preferences.style,\n            ...preferences?.style,\n          },\n        }\n      : project.config.preferences\n  }\n\n  readonly #projects = new Map<string, VueProject>()\n\n  @cache()\n  public getVueProjectFor(fileName: string): VueProject {\n    const find = (name: string): string | undefined =>\n      this.lib.findConfigFile(fileName, this.lib.sys.fileExists, name)\n\n    const rootDir = Path.posix.dirname(\n      find('vueconfig.json') ?? find('package.json') ?? fileName,\n    )\n\n    const key = Array.from(this.#projects.keys()).find((key) =>\n      rootDir.startsWith(key),\n    )\n\n    if (key != null) {\n      const project = this.#projects.get(key)\n      invariant(project != null)\n      return project\n    }\n\n    const project = VueProject.create(this.serverHost, rootDir)\n    this.#projects.set(rootDir, project)\n\n    return project\n  }\n\n  /**\n   * Find source file in typescript program\n   */\n  public getSourceFile(fileName: string): TypeScript.SourceFile | null {\n    try {\n      return this.service.getProgram()?.getSourceFile(fileName) ?? null\n    } catch {\n      return null\n    }\n  }\n\n  public dispose(): void {\n    this.#projects.forEach((project) => project.dispose())\n    this.#projects.clear()\n  }\n\n  #isRunningSchemeMode: boolean = false\n\n  public get isRunningSchemeMode(): boolean {\n    return this.#isRunningSchemeMode\n  }\n\n  public runInSchemeMode<R>(fn: () => R): R {\n    const before = this.#isRunningSchemeMode\n    this.#isRunningSchemeMode = true\n    try {\n      return fn()\n    } finally {\n      this.#isRunningSchemeMode = before\n    }\n  }\n\n  public getGeneratedFileName(fileName: string): string {\n    invariant(isVueFile(fileName), 'fileName must be a vue file')\n    return `${fileName}.tsx`\n  }\n\n  public getTokenAtPosition(\n    sourceFile: TypeScript.SourceFile,\n    position: number,\n  ): TypeScript.Node {\n    return this.#getTokenAtPositionWorker(sourceFile, position)\n  }\n\n  #getTokenAtPositionWorker(\n    sourceFile: TypeScript.SourceFile,\n    position: number,\n  ): TypeScript.Node {\n    let current: TypeScript.Node = sourceFile\n    let foundToken: TypeScript.Node | undefined\n    const { SyntaxKind } = this.lib\n    outer: while (true) {\n      // find the child that contains 'position'\n\n      const children = current.getChildren(sourceFile)\n      const i = binarySearchKey(\n        children,\n        position,\n        (_, index) => index,\n        (middle, _) => {\n          const child = children[middle]\n          invariant(child != null)\n          const end = child.getEnd()\n          if (end < position) return -1\n\n          const start = child.getStart(sourceFile, /*includeJsDoc*/ true)\n          if (start > position) return 1\n\n          // First element whose start position is before the input and\n          // whose end position is after or equal to the input.\n          if (nodeContainsPosition(child, start, end)) {\n            const previous = children[middle - 1]\n            if (previous != null) {\n              // We want the _first_ element that contains the position,\n              // so left-recur if the prior node also contains the position.\n              if (nodeContainsPosition(previous)) {\n                return 1\n              }\n            }\n\n            return 0\n          }\n\n          const previous = children[middle - 1]\n          // This complex condition makes us left-recur around a zero-length\n          // node when includePrecedingTokenAtEndPosition is set, rather than\n          // right-recur on it.\n          if (\n            start === position &&\n            previous != null &&\n            previous.getEnd() === position &&\n            nodeContainsPosition(previous)\n          ) {\n            return 1\n          }\n          return -1\n        },\n      )\n\n      if (foundToken != null) {\n        return foundToken\n      }\n      if (i >= 0 && children[i] != null) {\n        current = children[i] as TypeScript.Node\n        continue outer\n      }\n\n      return current\n    }\n\n    function nodeContainsPosition(\n      node: TypeScript.Node,\n      start?: number,\n      end?: number,\n    ): boolean {\n      end ??= node.getEnd()\n      if (end < position) return false\n\n      start ??= node.getFullStart()\n      // If this child begins after position, then all subsequent children will as well.\n      if (start > position) {\n        return false\n      } else if (position < end) {\n        return true\n      } else if (position === end && node.kind === SyntaxKind.EndOfFileToken) {\n        return true\n      } else {\n        return false\n      }\n    }\n  }\n}\n", "import { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class CodeFixService\n  implements\n    Pick<TSLanguageService, 'getCodeFixesAtPosition' | 'getCombinedCodeFix'>\n{\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n  ) {}\n\n  public getCodeFixesAtPosition(\n    fileName: string,\n    start: number,\n    end: number,\n    errorCodes: readonly number[],\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences,\n  ): readonly TypeScript.CodeFixAction[] {\n    return (\n      this.pick(fileName, start, {\n        script: (file) => {\n          const span = file.findGeneratedTextSpan({\n            start,\n            length: end - start,\n          })\n          if (span == null) return []\n\n          return this.processCodeFixActions(\n            this.ts.service.getCodeFixesAtPosition(\n              file.generatedFileName,\n              span.start,\n              span.start + span.length,\n              errorCodes,\n              formatOptions,\n              preferences,\n            ),\n          )\n        },\n      }) ?? []\n    )\n  }\n\n  public getCombinedCodeFix(\n    scope: TypeScript.CombinedCodeFixScope,\n    fixId: {},\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences,\n  ): TypeScript.CombinedCodeActions {\n    const file = this.fs.getVueFile(scope.fileName)\n    if (file == null) return { changes: [], commands: [] }\n\n    const result = this.ts.service.getCombinedCodeFix(\n      { ...scope, fileName: file.generatedFileName },\n      fixId,\n      formatOptions,\n      preferences,\n    )\n\n    return {\n      ...result,\n      changes: this.fs.resolveAllFileTextChanges(result.changes),\n    }\n  }\n\n  private pick<R>(\n    fileName: string,\n    position: number,\n    fns: Record<string, (file: VueSFCDocument) => R>,\n  ): R | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const block = file.getBlockAt(position)\n    if (block == null) return\n    const fn = fns[block.type]\n    if (fn == null) return\n    return fn(file)\n  }\n\n  public processCodeFixActions(\n    fixes: readonly TypeScript.CodeFixAction[],\n  ): TypeScript.CodeFixAction[] {\n    return fixes.map((fix) => ({\n      ...fix,\n      changes: this.fs.resolveAllFileTextChanges(fix.changes),\n    }))\n  }\n}\n", "/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n    const map = Object.create(null);\r\n    const list = str.split(',');\r\n    for (let i = 0; i < list.length; i++) {\r\n        map[list[i]] = true;\r\n    }\r\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\r\n}\n\n/**\r\n * dev only flag -> name mapping\r\n */\r\nconst PatchFlagNames = {\r\n    [1 /* TEXT */]: `TEXT`,\r\n    [2 /* CLASS */]: `CLASS`,\r\n    [4 /* STYLE */]: `STYLE`,\r\n    [8 /* PROPS */]: `PROPS`,\r\n    [16 /* FULL_PROPS */]: `FULL_PROPS`,\r\n    [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\r\n    [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\r\n    [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\r\n    [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\r\n    [512 /* NEED_PATCH */]: `NEED_PATCH`,\r\n    [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\r\n    [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\r\n    [-1 /* HOISTED */]: `HOISTED`,\r\n    [-2 /* BAIL */]: `BAIL`\r\n};\n\n/**\r\n * Dev only\r\n */\r\nconst slotFlagsText = {\r\n    [1 /* STABLE */]: 'STABLE',\r\n    [2 /* DYNAMIC */]: 'DYNAMIC',\r\n    [3 /* FORWARDED */]: 'FORWARDED'\r\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\r\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\r\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\r\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n    // Split the content into individual lines but capture the newline sequence\r\n    // that separated each line. This is important because the actual sequence is\r\n    // needed to properly take into account the full line length for offset\r\n    // comparison\r\n    let lines = source.split(/(\\r?\\n)/);\r\n    // Separate the lines and newline sequences into separate arrays for easier referencing\r\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\r\n    lines = lines.filter((_, idx) => idx % 2 === 0);\r\n    let count = 0;\r\n    const res = [];\r\n    for (let i = 0; i < lines.length; i++) {\r\n        count +=\r\n            lines[i].length +\r\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\r\n        if (count >= start) {\r\n            for (let j = i - range; j <= i + range || end > count; j++) {\r\n                if (j < 0 || j >= lines.length)\r\n                    continue;\r\n                const line = j + 1;\r\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\r\n                const lineLength = lines[j].length;\r\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\r\n                if (j === i) {\r\n                    // push underline\r\n                    const pad = start - (count - (lineLength + newLineSeqLength));\r\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\r\n                }\r\n                else if (j > i) {\r\n                    if (end > count) {\r\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\r\n                        res.push(`   |  ` + '^'.repeat(length));\r\n                    }\r\n                    count += lineLength + newLineSeqLength;\r\n                }\r\n            }\r\n            break;\r\n        }\r\n    }\r\n    return res.join('\\n');\r\n}\n\n/**\r\n * On the client we only need to offer special cases for boolean attributes that\r\n * have different names from their corresponding dom properties:\r\n * - itemscope -> N/A\r\n * - allowfullscreen -> allowFullscreen\r\n * - formnovalidate -> formNoValidate\r\n * - ismap -> isMap\r\n * - nomodule -> noModule\r\n * - novalidate -> noValidate\r\n * - readonly -> readOnly\r\n */\r\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\r\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\r\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\r\n    `loop,open,required,reversed,scoped,seamless,` +\r\n    `checked,muted,multiple,selected`);\r\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\r\nconst attrValidationCache = {};\r\nfunction isSSRSafeAttrName(name) {\r\n    if (attrValidationCache.hasOwnProperty(name)) {\r\n        return attrValidationCache[name];\r\n    }\r\n    const isUnsafe = unsafeAttrCharRE.test(name);\r\n    if (isUnsafe) {\r\n        console.error(`unsafe attribute name: ${name}`);\r\n    }\r\n    return (attrValidationCache[name] = !isUnsafe);\r\n}\r\nconst propsToAttrMap = {\r\n    acceptCharset: 'accept-charset',\r\n    className: 'class',\r\n    htmlFor: 'for',\r\n    httpEquiv: 'http-equiv'\r\n};\r\n/**\r\n * CSS properties that accept plain numbers\r\n */\r\nconst isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +\r\n    `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +\r\n    `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +\r\n    `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +\r\n    `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +\r\n    `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +\r\n    // SVG\r\n    `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +\r\n    `stroke-miterlimit,stroke-opacity,stroke-width`);\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\r\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\r\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\r\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\r\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\r\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\r\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\r\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\r\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\r\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\r\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\r\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\r\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\r\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\r\n    `value,width,wrap`);\r\n/**\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\r\n */\r\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\r\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\r\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\r\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\r\n    `color-interpolation-filters,color-profile,color-rendering,` +\r\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\r\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\r\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\r\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\r\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\r\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\r\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\r\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\r\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\r\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\r\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\r\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\r\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\r\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\r\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\r\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\r\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\r\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\r\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\r\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\r\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\r\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\r\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\r\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\r\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\r\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\r\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\r\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\r\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\r\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\r\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\r\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\r\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\r\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nfunction normalizeStyle(value) {\r\n    if (isArray(value)) {\r\n        const res = {};\r\n        for (let i = 0; i < value.length; i++) {\r\n            const item = value[i];\r\n            const normalized = isString(item)\r\n                ? parseStringStyle(item)\r\n                : normalizeStyle(item);\r\n            if (normalized) {\r\n                for (const key in normalized) {\r\n                    res[key] = normalized[key];\r\n                }\r\n            }\r\n        }\r\n        return res;\r\n    }\r\n    else if (isString(value)) {\r\n        return value;\r\n    }\r\n    else if (isObject(value)) {\r\n        return value;\r\n    }\r\n}\r\nconst listDelimiterRE = /;(?![^(]*\\))/g;\r\nconst propertyDelimiterRE = /:(.+)/;\r\nfunction parseStringStyle(cssText) {\r\n    const ret = {};\r\n    cssText.split(listDelimiterRE).forEach(item => {\r\n        if (item) {\r\n            const tmp = item.split(propertyDelimiterRE);\r\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\r\n        }\r\n    });\r\n    return ret;\r\n}\r\nfunction stringifyStyle(styles) {\r\n    let ret = '';\r\n    if (!styles || isString(styles)) {\r\n        return ret;\r\n    }\r\n    for (const key in styles) {\r\n        const value = styles[key];\r\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\r\n        if (isString(value) ||\r\n            (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {\r\n            // only render valid values\r\n            ret += `${normalizedKey}:${value};`;\r\n        }\r\n    }\r\n    return ret;\r\n}\r\nfunction normalizeClass(value) {\r\n    let res = '';\r\n    if (isString(value)) {\r\n        res = value;\r\n    }\r\n    else if (isArray(value)) {\r\n        for (let i = 0; i < value.length; i++) {\r\n            const normalized = normalizeClass(value[i]);\r\n            if (normalized) {\r\n                res += normalized + ' ';\r\n            }\r\n        }\r\n    }\r\n    else if (isObject(value)) {\r\n        for (const name in value) {\r\n            if (value[name]) {\r\n                res += name + ' ';\r\n            }\r\n        }\r\n    }\r\n    return res.trim();\r\n}\r\nfunction normalizeProps(props) {\r\n    if (!props)\r\n        return null;\r\n    let { class: klass, style } = props;\r\n    if (klass && !isString(klass)) {\r\n        props.class = normalizeClass(klass);\r\n    }\r\n    if (style) {\r\n        props.style = normalizeStyle(style);\r\n    }\r\n    return props;\r\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\r\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\r\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\r\n    'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\r\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\r\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\r\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\r\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\r\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\r\n    'option,output,progress,select,textarea,details,dialog,menu,' +\r\n    'summary,template,blockquote,iframe,tfoot';\r\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\r\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\r\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\r\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\r\n    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\r\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\r\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\r\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\r\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\r\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\r\n    'text,textPath,title,tspan,unknown,use,view';\r\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\r\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\r\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\r\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst escapeRE = /[\"'&<>]/;\r\nfunction escapeHtml(string) {\r\n    const str = '' + string;\r\n    const match = escapeRE.exec(str);\r\n    if (!match) {\r\n        return str;\r\n    }\r\n    let html = '';\r\n    let escaped;\r\n    let index;\r\n    let lastIndex = 0;\r\n    for (index = match.index; index < str.length; index++) {\r\n        switch (str.charCodeAt(index)) {\r\n            case 34: // \"\r\n                escaped = '&quot;';\r\n                break;\r\n            case 38: // &\r\n                escaped = '&amp;';\r\n                break;\r\n            case 39: // '\r\n                escaped = '&#39;';\r\n                break;\r\n            case 60: // <\r\n                escaped = '&lt;';\r\n                break;\r\n            case 62: // >\r\n                escaped = '&gt;';\r\n                break;\r\n            default:\r\n                continue;\r\n        }\r\n        if (lastIndex !== index) {\r\n            html += str.substring(lastIndex, index);\r\n        }\r\n        lastIndex = index + 1;\r\n        html += escaped;\r\n    }\r\n    return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\r\n}\r\n// https://www.w3.org/TR/html52/syntax.html#comments\r\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\r\nfunction escapeHtmlComment(src) {\r\n    return src.replace(commentStripRE, '');\r\n}\n\nfunction looseCompareArrays(a, b) {\r\n    if (a.length !== b.length)\r\n        return false;\r\n    let equal = true;\r\n    for (let i = 0; equal && i < a.length; i++) {\r\n        equal = looseEqual(a[i], b[i]);\r\n    }\r\n    return equal;\r\n}\r\nfunction looseEqual(a, b) {\r\n    if (a === b)\r\n        return true;\r\n    let aValidType = isDate(a);\r\n    let bValidType = isDate(b);\r\n    if (aValidType || bValidType) {\r\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\r\n    }\r\n    aValidType = isArray(a);\r\n    bValidType = isArray(b);\r\n    if (aValidType || bValidType) {\r\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\r\n    }\r\n    aValidType = isObject(a);\r\n    bValidType = isObject(b);\r\n    if (aValidType || bValidType) {\r\n        /* istanbul ignore if: this if will probably never be called */\r\n        if (!aValidType || !bValidType) {\r\n            return false;\r\n        }\r\n        const aKeysCount = Object.keys(a).length;\r\n        const bKeysCount = Object.keys(b).length;\r\n        if (aKeysCount !== bKeysCount) {\r\n            return false;\r\n        }\r\n        for (const key in a) {\r\n            const aHasKey = a.hasOwnProperty(key);\r\n            const bHasKey = b.hasOwnProperty(key);\r\n            if ((aHasKey && !bHasKey) ||\r\n                (!aHasKey && bHasKey) ||\r\n                !looseEqual(a[key], b[key])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return String(a) === String(b);\r\n}\r\nfunction looseIndexOf(arr, val) {\r\n    return arr.findIndex(item => looseEqual(item, val));\r\n}\n\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nconst toDisplayString = (val) => {\r\n    return val == null\r\n        ? ''\r\n        : isArray(val) || (isObject(val) && val.toString === objectToString)\r\n            ? JSON.stringify(val, replacer, 2)\r\n            : String(val);\r\n};\r\nconst replacer = (_key, val) => {\r\n    // can't use isRef here since @vue/shared has no deps\r\n    if (val && val.__v_isRef) {\r\n        return replacer(_key, val.value);\r\n    }\r\n    else if (isMap(val)) {\r\n        return {\r\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\r\n                entries[`${key} =>`] = val;\r\n                return entries;\r\n            }, {})\r\n        };\r\n    }\r\n    else if (isSet(val)) {\r\n        return {\r\n            [`Set(${val.size})`]: [...val.values()]\r\n        };\r\n    }\r\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\r\n        return String(val);\r\n    }\r\n    return val;\r\n};\n\n/**\r\n * List of @babel/parser plugins that are used for template expression\r\n * transforms and SFC script transforms. By default we enable proposals slated\r\n * for ES2020. This will need to be updated as the spec moves forward.\r\n * Full list at https://babeljs.io/docs/en/next/babel-parser#plugins\r\n */\r\nconst babelParserDefaultPlugins = [\r\n    'bigInt',\r\n    'optionalChaining',\r\n    'nullishCoalescingOperator'\r\n];\r\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n    ? Object.freeze({})\r\n    : {};\r\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst NOOP = () => { };\r\n/**\r\n * Always return false.\r\n */\r\nconst NO = () => false;\r\nconst onRE = /^on[^a-z]/;\r\nconst isOn = (key) => onRE.test(key);\r\nconst isModelListener = (key) => key.startsWith('onUpdate:');\r\nconst extend = Object.assign;\r\nconst remove = (arr, el) => {\r\n    const i = arr.indexOf(el);\r\n    if (i > -1) {\r\n        arr.splice(i, 1);\r\n    }\r\n};\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\r\nconst isArray = Array.isArray;\r\nconst isMap = (val) => toTypeString(val) === '[object Map]';\r\nconst isSet = (val) => toTypeString(val) === '[object Set]';\r\nconst isDate = (val) => val instanceof Date;\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst toRawType = (value) => {\r\n    // extract \"RawType\" from strings like \"[object RawType]\"\r\n    return toTypeString(value).slice(8, -1);\r\n};\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\nconst isIntegerKey = (key) => isString(key) &&\r\n    key !== 'NaN' &&\r\n    key[0] !== '-' &&\r\n    '' + parseInt(key, 10) === key;\r\nconst isReservedProp = /*#__PURE__*/ makeMap(\r\n// the leading comma is intentional so empty string \"\" is also included\r\n',key,ref,' +\r\n    'onVnodeBeforeMount,onVnodeMounted,' +\r\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\r\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\n/**\r\n * @private\r\n */\r\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\r\n/**\r\n * @private\r\n */\r\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\r\n/**\r\n * @private\r\n */\r\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\r\n// compare whether a value has changed, accounting for NaN.\r\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\r\nconst invokeArrayFns = (fns, arg) => {\r\n    for (let i = 0; i < fns.length; i++) {\r\n        fns[i](arg);\r\n    }\r\n};\r\nconst def = (obj, key, value) => {\r\n    Object.defineProperty(obj, key, {\r\n        configurable: true,\r\n        enumerable: false,\r\n        value\r\n    });\r\n};\r\nconst toNumber = (val) => {\r\n    const n = parseFloat(val);\r\n    return isNaN(n) ? val : n;\r\n};\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n    return (_globalThis ||\r\n        (_globalThis =\r\n            typeof globalThis !== 'undefined'\r\n                ? globalThis\r\n                : typeof self !== 'undefined'\r\n                    ? self\r\n                    : typeof window !== 'undefined'\r\n                        ? window\r\n                        : typeof global !== 'undefined'\r\n                            ? global\r\n                            : {}));\r\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, babelParserDefaultPlugins, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, invokeArrayFns, isArray, isBooleanAttr, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   \u201CsourceRoot\u201D, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n", "/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\nclass TokenType {\n  constructor(label, conf = {}) {\n    this.label = void 0;\n    this.keyword = void 0;\n    this.beforeExpr = void 0;\n    this.startsExpr = void 0;\n    this.rightAssociative = void 0;\n    this.isLoop = void 0;\n    this.isAssign = void 0;\n    this.prefix = void 0;\n    this.postfix = void 0;\n    this.binop = void 0;\n    this.updateContext = void 0;\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    this.updateContext = null;\n  }\n\n}\nconst keywords$1 = new Map();\n\nfunction createKeyword(name, options = {}) {\n  options.keyword = name;\n  const token = new TokenType(name, options);\n  keywords$1.set(name, token);\n  return token;\n}\n\nfunction createBinop(name, binop) {\n  return new TokenType(name, {\n    beforeExpr,\n    binop\n  });\n}\n\nconst types$1 = {\n  num: new TokenType(\"num\", {\n    startsExpr\n  }),\n  bigint: new TokenType(\"bigint\", {\n    startsExpr\n  }),\n  decimal: new TokenType(\"decimal\", {\n    startsExpr\n  }),\n  regexp: new TokenType(\"regexp\", {\n    startsExpr\n  }),\n  string: new TokenType(\"string\", {\n    startsExpr\n  }),\n  name: new TokenType(\"name\", {\n    startsExpr\n  }),\n  privateName: new TokenType(\"#name\", {\n    startsExpr\n  }),\n  eof: new TokenType(\"eof\"),\n  bracketL: new TokenType(\"[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketHashL: new TokenType(\"#[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketBarL: new TokenType(\"[|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketR: new TokenType(\"]\"),\n  bracketBarR: new TokenType(\"|]\"),\n  braceL: new TokenType(\"{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceBarL: new TokenType(\"{|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceHashL: new TokenType(\"#{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceR: new TokenType(\"}\", {\n    beforeExpr\n  }),\n  braceBarR: new TokenType(\"|}\"),\n  parenL: new TokenType(\"(\", {\n    beforeExpr,\n    startsExpr\n  }),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", {\n    beforeExpr\n  }),\n  semi: new TokenType(\";\", {\n    beforeExpr\n  }),\n  colon: new TokenType(\":\", {\n    beforeExpr\n  }),\n  doubleColon: new TokenType(\"::\", {\n    beforeExpr\n  }),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", {\n    beforeExpr\n  }),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", {\n    beforeExpr\n  }),\n  template: new TokenType(\"template\"),\n  ellipsis: new TokenType(\"...\", {\n    beforeExpr\n  }),\n  backQuote: new TokenType(\"`\", {\n    startsExpr\n  }),\n  dollarBraceL: new TokenType(\"${\", {\n    beforeExpr,\n    startsExpr\n  }),\n  at: new TokenType(\"@\"),\n  hash: new TokenType(\"#\", {\n    startsExpr\n  }),\n  interpreterDirective: new TokenType(\"#!...\"),\n  eq: new TokenType(\"=\", {\n    beforeExpr,\n    isAssign\n  }),\n  assign: new TokenType(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  slashAssign: new TokenType(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  moduloAssign: new TokenType(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  incDec: new TokenType(\"++/--\", {\n    prefix,\n    postfix,\n    startsExpr\n  }),\n  bang: new TokenType(\"!\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  tilde: new TokenType(\"~\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {\n    beforeExpr,\n    binop: 9,\n    prefix,\n    startsExpr\n  }),\n  modulo: new TokenType(\"%\", {\n    binop: 10,\n    startsExpr\n  }),\n  star: new TokenType(\"*\", {\n    binop: 10\n  }),\n  slash: createBinop(\"/\", 10),\n  exponent: new TokenType(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true\n  }),\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", {\n    beforeExpr\n  }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", {\n    beforeExpr\n  }),\n  _do: createKeyword(\"do\", {\n    isLoop,\n    beforeExpr\n  }),\n  _else: createKeyword(\"else\", {\n    beforeExpr\n  }),\n  _finally: createKeyword(\"finally\"),\n  _for: createKeyword(\"for\", {\n    isLoop\n  }),\n  _function: createKeyword(\"function\", {\n    startsExpr\n  }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", {\n    beforeExpr\n  }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _while: createKeyword(\"while\", {\n    isLoop\n  }),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", {\n    beforeExpr,\n    startsExpr\n  }),\n  _this: createKeyword(\"this\", {\n    startsExpr\n  }),\n  _super: createKeyword(\"super\", {\n    startsExpr\n  }),\n  _class: createKeyword(\"class\", {\n    startsExpr\n  }),\n  _extends: createKeyword(\"extends\", {\n    beforeExpr\n  }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", {\n    startsExpr\n  }),\n  _null: createKeyword(\"null\", {\n    startsExpr\n  }),\n  _true: createKeyword(\"true\", {\n    startsExpr\n  }),\n  _false: createKeyword(\"false\", {\n    startsExpr\n  }),\n  _in: createKeyword(\"in\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _instanceof: createKeyword(\"instanceof\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _typeof: createKeyword(\"typeof\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _void: createKeyword(\"void\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _delete: createKeyword(\"delete\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  })\n};\n\nconst lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nconst lineBreakG = new RegExp(lineBreak.source, \"g\");\nfunction isNewLine(code) {\n  switch (code) {\n    case 10:\n    case 13:\n    case 8232:\n    case 8233:\n      return true;\n\n    default:\n      return false;\n  }\n}\nconst skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nfunction isWhitespace(code) {\n  switch (code) {\n    case 0x0009:\n    case 0x000b:\n    case 0x000c:\n    case 32:\n    case 160:\n    case 5760:\n    case 0x2000:\n    case 0x2001:\n    case 0x2002:\n    case 0x2003:\n    case 0x2004:\n    case 0x2005:\n    case 0x2006:\n    case 0x2007:\n    case 0x2008:\n    case 0x2009:\n    case 0x200a:\n    case 0x202f:\n    case 0x205f:\n    case 0x3000:\n    case 0xfeff:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nclass Position {\n  constructor(line, col) {\n    this.line = void 0;\n    this.column = void 0;\n    this.line = line;\n    this.column = col;\n  }\n\n}\nclass SourceLocation {\n  constructor(start, end) {\n    this.start = void 0;\n    this.end = void 0;\n    this.filename = void 0;\n    this.identifierName = void 0;\n    this.start = start;\n    this.end = end;\n  }\n\n}\nfunction getLineInfo(input, offset) {\n  let line = 1;\n  let lineStart = 0;\n  let match;\n  lineBreakG.lastIndex = 0;\n\n  while ((match = lineBreakG.exec(input)) && match.index < offset) {\n    line++;\n    lineStart = lineBreakG.lastIndex;\n  }\n\n  return new Position(line, offset - lineStart);\n}\n\nclass BaseParser {\n  constructor() {\n    this.sawUnambiguousESM = false;\n    this.ambiguousScriptDifferentAst = false;\n  }\n\n  hasPlugin(name) {\n    return this.plugins.has(name);\n  }\n\n  getPluginOption(plugin, name) {\n    if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n  }\n\n}\n\nfunction setTrailingComments(node, comments) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\nfunction setInnerComments(node, comments) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else if (comments !== undefined) {\n    node.innerComments.unshift(...comments);\n  }\n}\n\nfunction adjustInnerComments(node, elements, commentWS) {\n  let lastElement = null;\n  let i = elements.length;\n\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nclass CommentsParser extends BaseParser {\n  addComment(comment) {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.comments.push(comment);\n  }\n\n  processComment(node) {\n    const {\n      commentStack\n    } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const {\n      start: nodeStart\n    } = node;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n\n      if (commentEnd > nodeStart) {\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n\n        break;\n      }\n    }\n  }\n\n  finalizeComment(commentWS) {\n    const {\n      comments\n    } = commentWS;\n\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n\n      if (commentWS.trailingNode !== null) {\n        commentWS.trailingNode.leadingComments = comments;\n      }\n    } else {\n      const {\n        containingNode: node,\n        start: commentStart\n      } = commentWS;\n\n      if (this.input.charCodeAt(commentStart - 1) === 44) {\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n\n          default:\n            {\n              setInnerComments(node, comments);\n            }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  finalizeRemainingComments() {\n    const {\n      commentStack\n    } = this.state;\n\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n\n    this.state.commentStack = [];\n  }\n\n  resetPreviousNodeTrailingComments(node) {\n    const {\n      commentStack\n    } = this.state;\n    const {\n      length\n    } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n}\n\nconst ErrorCodes = Object.freeze({\n  SyntaxError: \"BABEL_PARSER_SYNTAX_ERROR\",\n  SourceTypeModuleError: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\"\n});\n\nconst ErrorMessages = makeErrorTemplates({\n  AccessorIsGenerator: \"A %0ter cannot be a generator.\",\n  ArgumentsInClass: \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier: \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock: \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter: \"'await' is not allowed in async function parameters.\",\n  AwaitNotInAsyncContext: \"'await' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n  BadGetterArity: \"A 'get' accesor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accesor must have exactly one formal parameter.\",\n  BadSetterRestParameter: \"A 'set' accesor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField: \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: \"'%0' require an initialization value.\",\n  DecoratorBeforeExport: \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.\",\n  DecoratorConstructor: \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass: \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport: \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: \"`%0` has already been exported. Exported identifiers must be unique.\",\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: \"A string literal cannot be used as an exported binding without `from`.\\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?\",\n  ExportDefaultFromAsIdentifier: \"'from' is not allowed as an identifier after 'export default'.\",\n  ForInOfLoopInitializer: \"'%0' loop variable declaration may not have an initializer.\",\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext: \"Generators can only be declared at the top level or inside a block.\",\n  IllegalBreakContinue: \"Unsyntactic %0.\",\n  IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportBindingIsString: 'A string literal cannot be used as an imported binding.\\n- Did you mean `import { \"%0\" as foo }`?',\n  ImportCallArgumentTrailingComma: \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: \"`import()` requires exactly %0.\",\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: \"Expected number in radix %0.\",\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: \"Escape sequence in keyword %0.\",\n  InvalidIdentifier: \"Invalid identifier %0.\",\n  InvalidLhs: \"Invalid left-hand side in %0.\",\n  InvalidLhsBinding: \"Binding invalid left-hand side in %0.\",\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent: \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: \"Unexpected character '%0'.\",\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: \"Private name #%0 is not defined.\",\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty: \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: \"Label '%0' is already declared.\",\n  LetInLexicalBinding: \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment: \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical: \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType: \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue: \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: 'Duplicate key \"%0\" is not allowed in module attributes.',\n  ModuleExportNameHasLoneSurrogate: \"An export name cannot include a lone surrogate, found '\\\\u%0'.\",\n  ModuleExportUndefined: \"Export '%0' is not defined.\",\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence: \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar: \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew: \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate: \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor: \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PipeBodyIsTighter: \"Unexpected %0 after pipeline body; any %0 expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound: \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: 'Invalid topic token %0. In order to use %0 as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"%0\" }.',\n  PipeTopicUnused: \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipelineBodyNoArrow: 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n  PipelineBodySequenceExpression: \"Pipeline body may not be a comma-separated sequence expression.\",\n  PipelineHeadSequenceExpression: \"Pipeline head should not be a comma-separated sequence expression.\",\n  PipelineTopicUnused: \"Pipeline is in topic style but does not use topic reference.\",\n  PrimaryTopicNotAllowed: \"Topic reference was used in a lexical context without topic binding.\",\n  PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PrivateInExpectedIn: \"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).\",\n  PrivateNameRedeclaration: \"Duplicate private name #%0.\",\n  RecordExpressionBarIncorrectEndSyntaxType: \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType: \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType: \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction: \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  StrictDelete: \"Deleting local variable in strict mode.\",\n  StrictEvalArguments: \"Assigning to '%0' in strict mode.\",\n  StrictEvalArgumentsBinding: \"Binding '%0' in strict mode.\",\n  StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block.\",\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n  StrictWith: \"'with' in strict mode.\",\n  SuperNotAllowed: \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType: \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType: \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType: \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody: 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport: \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: \"Unexpected keyword '%0'.\",\n  UnexpectedLeadingDecorator: \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration: \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget: \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator: \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n  UnexpectedReservedWord: \"Unexpected reserved word '%0'.\",\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: \"Unexpected token '%0'.\",\n  UnexpectedTokenUnaryExponentiation: \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport: \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport: \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport: \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: \"The only valid meta property for %0 is %0.%1.\",\n  UnsupportedParameterDecorator: \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator: \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper: \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  VarRedeclaration: \"Identifier '%0' has already been declared.\",\n  YieldBindingIdentifier: \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  ZeroDigitNumericSeparator: \"Numeric separator can not be used after leading 0.\"\n}, ErrorCodes.SyntaxError);\nconst SourceTypeModuleErrorMessages = makeErrorTemplates({\n  ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: \"module\"'`,\n  ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: \"module\"'`\n}, ErrorCodes.SourceTypeModuleError);\n\nfunction makeErrorTemplates(messages, code) {\n  const templates = {};\n  Object.keys(messages).forEach(reasonCode => {\n    templates[reasonCode] = Object.freeze({\n      code,\n      reasonCode,\n      template: messages[reasonCode]\n    });\n  });\n  return Object.freeze(templates);\n}\nclass ParserError extends CommentsParser {\n  getLocationForPosition(pos) {\n    let loc;\n    if (pos === this.state.start) loc = this.state.startLoc;else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;else if (pos === this.state.end) loc = this.state.endLoc;else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;else loc = getLineInfo(this.input, pos);\n    return loc;\n  }\n\n  raise(pos, {\n    code,\n    reasonCode,\n    template\n  }, ...params) {\n    return this.raiseWithData(pos, {\n      code,\n      reasonCode\n    }, template, ...params);\n  }\n\n  raiseOverwrite(pos, {\n    code,\n    template\n  }, ...params) {\n    const loc = this.getLocationForPosition(pos);\n    const message = template.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n\n    if (this.options.errorRecovery) {\n      const errors = this.state.errors;\n\n      for (let i = errors.length - 1; i >= 0; i--) {\n        const error = errors[i];\n\n        if (error.pos === pos) {\n          return Object.assign(error, {\n            message\n          });\n        } else if (error.pos < pos) {\n          break;\n        }\n      }\n    }\n\n    return this._raise({\n      code,\n      loc,\n      pos\n    }, message);\n  }\n\n  raiseWithData(pos, data, errorTemplate, ...params) {\n    const loc = this.getLocationForPosition(pos);\n    const message = errorTemplate.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n    return this._raise(Object.assign({\n      loc,\n      pos\n    }, data), message);\n  }\n\n  _raise(errorContext, message) {\n    const err = new SyntaxError(message);\n    Object.assign(err, errorContext);\n\n    if (this.options.errorRecovery) {\n      if (!this.isLookahead) this.state.errors.push(err);\n      return err;\n    } else {\n      throw err;\n    }\n  }\n\n}\n\nvar estree = (superClass => class extends superClass {\n  parseRegExpLiteral({\n    pattern,\n    flags\n  }) {\n    let regex = null;\n\n    try {\n      regex = new RegExp(pattern, flags);\n    } catch (e) {}\n\n    const node = this.estreeParseLiteral(regex);\n    node.regex = {\n      pattern,\n      flags\n    };\n    return node;\n  }\n\n  parseBigIntLiteral(value) {\n    let bigInt;\n\n    try {\n      bigInt = BigInt(value);\n    } catch (_unused) {\n      bigInt = null;\n    }\n\n    const node = this.estreeParseLiteral(bigInt);\n    node.bigint = String(node.value || value);\n    return node;\n  }\n\n  parseDecimalLiteral(value) {\n    const decimal = null;\n    const node = this.estreeParseLiteral(decimal);\n    node.decimal = String(node.value || value);\n    return node;\n  }\n\n  estreeParseLiteral(value) {\n    return this.parseLiteral(value, \"Literal\");\n  }\n\n  parseStringLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n\n  parseNumericLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n\n  parseNullLiteral() {\n    return this.estreeParseLiteral(null);\n  }\n\n  parseBooleanLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n\n  directiveToStmt(directive) {\n    const directiveLiteral = directive.value;\n    const stmt = this.startNodeAt(directive.start, directive.loc.start);\n    const expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start);\n    expression.value = directiveLiteral.extra.expressionValue;\n    expression.raw = directiveLiteral.extra.raw;\n    stmt.expression = this.finishNodeAt(expression, \"Literal\", directiveLiteral.end, directiveLiteral.loc.end);\n    stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n    return this.finishNodeAt(stmt, \"ExpressionStatement\", directive.end, directive.loc.end);\n  }\n\n  initFunction(node, isAsync) {\n    super.initFunction(node, isAsync);\n    node.expression = false;\n  }\n\n  checkDeclaration(node) {\n    if (node != null && this.isObjectProperty(node)) {\n      this.checkDeclaration(node.value);\n    } else {\n      super.checkDeclaration(node);\n    }\n  }\n\n  getObjectOrClassMethodParams(method) {\n    return method.value.params;\n  }\n\n  isValidDirective(stmt) {\n    var _stmt$expression$extr;\n\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && typeof stmt.expression.value === \"string\" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);\n  }\n\n  stmtToDirective(stmt) {\n    const value = stmt.expression.value;\n    const directive = super.stmtToDirective(stmt);\n    this.addExtra(directive.value, \"expressionValue\", value);\n    return directive;\n  }\n\n  parseBlockBody(node, ...args) {\n    super.parseBlockBody(node, ...args);\n    const directiveStatements = node.directives.map(d => this.directiveToStmt(d));\n    node.body = directiveStatements.concat(node.body);\n    delete node.directives;\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true);\n\n    if (method.typeParameters) {\n      method.value.typeParameters = method.typeParameters;\n      delete method.typeParameters;\n    }\n\n    classBody.body.push(method);\n  }\n\n  parseMaybePrivateName(...args) {\n    const node = super.parseMaybePrivateName(...args);\n\n    if (node.type === \"PrivateName\" && this.getPluginOption(\"estree\", \"classFeatures\")) {\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    return node;\n  }\n\n  convertPrivateNameToPrivateIdentifier(node) {\n    const name = super.getPrivateNameSV(node);\n    node = node;\n    delete node.id;\n    node.name = name;\n    node.type = \"PrivateIdentifier\";\n    return node;\n  }\n\n  isPrivateName(node) {\n    if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n      return super.isPrivateName(node);\n    }\n\n    return node.type === \"PrivateIdentifier\";\n  }\n\n  getPrivateNameSV(node) {\n    if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n      return super.getPrivateNameSV(node);\n    }\n\n    return node.name;\n  }\n\n  parseLiteral(value, type) {\n    const node = super.parseLiteral(value, type);\n    node.raw = node.extra.raw;\n    delete node.extra;\n    return node;\n  }\n\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    super.parseFunctionBody(node, allowExpression, isMethod);\n    node.expression = node.body.type !== \"BlockStatement\";\n  }\n\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    let funcNode = this.startNode();\n    funcNode.kind = node.kind;\n    funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);\n    funcNode.type = \"FunctionExpression\";\n    delete funcNode.kind;\n    node.value = funcNode;\n\n    if (type === \"ClassPrivateMethod\") {\n      node.computed = false;\n    }\n\n    type = \"MethodDefinition\";\n    return this.finishNode(node, type);\n  }\n\n  parseClassProperty(...args) {\n    const propertyNode = super.parseClassProperty(...args);\n\n    if (this.getPluginOption(\"estree\", \"classFeatures\")) {\n      propertyNode.type = \"PropertyDefinition\";\n    }\n\n    return propertyNode;\n  }\n\n  parseClassPrivateProperty(...args) {\n    const propertyNode = super.parseClassPrivateProperty(...args);\n\n    if (this.getPluginOption(\"estree\", \"classFeatures\")) {\n      propertyNode.type = \"PropertyDefinition\";\n      propertyNode.computed = false;\n    }\n\n    return propertyNode;\n  }\n\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);\n\n    if (node) {\n      node.type = \"Property\";\n      if (node.kind === \"method\") node.kind = \"init\";\n      node.shorthand = false;\n    }\n\n    return node;\n  }\n\n  parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n    const node = super.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n\n    if (node) {\n      node.kind = \"init\";\n      node.type = \"Property\";\n    }\n\n    return node;\n  }\n\n  isAssignable(node, isBinding) {\n    if (node != null && this.isObjectProperty(node)) {\n      return this.isAssignable(node.value, isBinding);\n    }\n\n    return super.isAssignable(node, isBinding);\n  }\n\n  toAssignable(node, isLHS = false) {\n    if (node != null && this.isObjectProperty(node)) {\n      this.toAssignable(node.value, isLHS);\n      return node;\n    }\n\n    return super.toAssignable(node, isLHS);\n  }\n\n  toAssignableObjectExpressionProp(prop, ...args) {\n    if (prop.kind === \"get\" || prop.kind === \"set\") {\n      this.raise(prop.key.start, ErrorMessages.PatternHasAccessor);\n    } else if (prop.method) {\n      this.raise(prop.key.start, ErrorMessages.PatternHasMethod);\n    } else {\n      super.toAssignableObjectExpressionProp(prop, ...args);\n    }\n  }\n\n  finishCallExpression(node, optional) {\n    super.finishCallExpression(node, optional);\n\n    if (node.callee.type === \"Import\") {\n      node.type = \"ImportExpression\";\n      node.source = node.arguments[0];\n\n      if (this.hasPlugin(\"importAssertions\")) {\n        var _node$arguments$;\n\n        node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;\n      }\n\n      delete node.arguments;\n      delete node.callee;\n    }\n\n    return node;\n  }\n\n  toReferencedArguments(node) {\n    if (node.type === \"ImportExpression\") {\n      return;\n    }\n\n    super.toReferencedArguments(node);\n  }\n\n  parseExport(node) {\n    super.parseExport(node);\n\n    switch (node.type) {\n      case \"ExportAllDeclaration\":\n        node.exported = null;\n        break;\n\n      case \"ExportNamedDeclaration\":\n        if (node.specifiers.length === 1 && node.specifiers[0].type === \"ExportNamespaceSpecifier\") {\n          node.type = \"ExportAllDeclaration\";\n          node.exported = node.specifiers[0].exported;\n          delete node.specifiers;\n        }\n\n        break;\n    }\n\n    return node;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    const node = super.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n    if (state.optionalChainMember) {\n      if (node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\") {\n        node.type = node.type.substring(8);\n      }\n\n      if (state.stop) {\n        const chain = this.startNodeAtNode(node);\n        chain.expression = node;\n        return this.finishNode(chain, \"ChainExpression\");\n      }\n    } else if (node.type === \"MemberExpression\" || node.type === \"CallExpression\") {\n      node.optional = false;\n    }\n\n    return node;\n  }\n\n  hasPropertyAsPrivateName(node) {\n    if (node.type === \"ChainExpression\") {\n      node = node.expression;\n    }\n\n    return super.hasPropertyAsPrivateName(node);\n  }\n\n  isOptionalChain(node) {\n    return node.type === \"ChainExpression\";\n  }\n\n  isObjectProperty(node) {\n    return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n  }\n\n  isObjectMethod(node) {\n    return node.method || node.kind === \"get\" || node.kind === \"set\";\n  }\n\n});\n\nclass TokContext {\n  constructor(token, preserveSpace) {\n    this.token = void 0;\n    this.preserveSpace = void 0;\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n}\nconst types = {\n  brace: new TokContext(\"{\"),\n  template: new TokContext(\"`\", true)\n};\n\ntypes$1.braceR.updateContext = context => {\n  context.pop();\n};\n\ntypes$1.braceL.updateContext = types$1.braceHashL.updateContext = types$1.dollarBraceL.updateContext = context => {\n  context.push(types.brace);\n};\n\ntypes$1.backQuote.updateContext = context => {\n  if (context[context.length - 1] === types.template) {\n    context.pop();\n  } else {\n    context.push(types.template);\n  }\n};\n\nlet 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\\u08a0-\\u08b4\\u08b6-\\u08c7\\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\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\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-\\u170c\\u170e-\\u1711\\u1720-\\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-\\u1b4b\\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-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\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-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\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\";\nlet 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\\u08d3-\\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\\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\\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-\\u0ecd\\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-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\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-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\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\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst 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, 157, 310, 10, 21, 11, 7, 153, 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, 107, 20, 28, 22, 13, 52, 76, 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, 85, 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, 230, 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, 35, 56, 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, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 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, 8952, 286, 50, 2, 18, 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, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 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, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];\nconst 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, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 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, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 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, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n\n  return false;\n}\n\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nconst reservedWords = {\n  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\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\nfunction isKeyword(word) {\n  return keywords.has(word);\n}\n\nfunction isIteratorStart(current, next) {\n  return current === 64 && next === 64;\n}\nconst reservedWordLikeSet = new Set([\"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\", \"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\", \"eval\", \"arguments\", \"enum\", \"await\"]);\nfunction canBeReservedWord(word) {\n  return reservedWordLikeSet.has(word);\n}\n\nconst SCOPE_OTHER = 0b000000000,\n      SCOPE_PROGRAM = 0b000000001,\n      SCOPE_FUNCTION = 0b000000010,\n      SCOPE_ARROW = 0b000000100,\n      SCOPE_SIMPLE_CATCH = 0b000001000,\n      SCOPE_SUPER = 0b000010000,\n      SCOPE_DIRECT_SUPER = 0b000100000,\n      SCOPE_CLASS = 0b001000000,\n      SCOPE_STATIC_BLOCK = 0b010000000,\n      SCOPE_TS_MODULE = 0b100000000,\n      SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\nconst BIND_KIND_VALUE = 0b000000000001,\n      BIND_KIND_TYPE = 0b000000000010,\n      BIND_SCOPE_VAR = 0b000000000100,\n      BIND_SCOPE_LEXICAL = 0b000000001000,\n      BIND_SCOPE_FUNCTION = 0b000000010000,\n      BIND_FLAGS_NONE = 0b000001000000,\n      BIND_FLAGS_CLASS = 0b000010000000,\n      BIND_FLAGS_TS_ENUM = 0b000100000000,\n      BIND_FLAGS_TS_CONST_ENUM = 0b001000000000,\n      BIND_FLAGS_TS_EXPORT_ONLY = 0b010000000000,\n      BIND_FLAGS_FLOW_DECLARE_FN = 0b100000000000;\nconst BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS,\n      BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,\n      BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,\n      BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,\n      BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,\n      BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,\n      BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,\n      BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n      BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,\n      BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,\n      BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n      BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n      BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\nconst CLASS_ELEMENT_FLAG_STATIC = 0b100,\n      CLASS_ELEMENT_KIND_GETTER = 0b010,\n      CLASS_ELEMENT_KIND_SETTER = 0b001,\n      CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\nconst CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n      CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n      CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n      CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n      CLASS_ELEMENT_OTHER = 0;\n\nclass Scope {\n  constructor(flags) {\n    this.var = new Set();\n    this.lexical = new Set();\n    this.functions = new Set();\n    this.flags = flags;\n  }\n\n}\nclass ScopeHandler {\n  constructor(raise, inModule) {\n    this.scopeStack = [];\n    this.undefinedExports = new Map();\n    this.undefinedPrivateNames = new Map();\n    this.raise = raise;\n    this.inModule = inModule;\n  }\n\n  get inFunction() {\n    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n  }\n\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n  }\n\n  get inClass() {\n    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n  }\n\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n  }\n\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n\n      if (flags & SCOPE_STATIC_BLOCK) {\n        return true;\n      }\n\n      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n        return false;\n      }\n    }\n  }\n\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags) {\n    return new Scope(flags);\n  }\n\n  enter(flags) {\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit() {\n    this.scopeStack.pop();\n  }\n\n  treatFunctionsAsVarInScope(scope) {\n    return !!(scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_PROGRAM);\n  }\n\n  declareName(name, bindingType, pos) {\n    let scope = this.currentScope();\n\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.add(name);\n      } else {\n        scope.lexical.add(name);\n      }\n\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        scope.var.add(name);\n        this.maybeExportDefined(scope, name);\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope, name) {\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(scope, name, bindingType, pos) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.raise(pos, ErrorMessages.VarRedeclaration, name);\n    }\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);\n    }\n\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);\n    }\n\n    return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);\n  }\n\n  checkLocalExport(id) {\n    const {\n      name\n    } = id;\n    const topLevelScope = this.scopeStack[0];\n\n    if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) {\n      this.undefinedExports.set(name, id.start);\n    }\n  }\n\n  currentScope() {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n\n      if (flags & SCOPE_VAR) {\n        return flags;\n      }\n    }\n  }\n\n  currentThisScopeFlags() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n\n      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n        return flags;\n      }\n    }\n  }\n\n}\n\nclass FlowScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.declareFunctions = new Set();\n  }\n\n}\n\nclass FlowScopeHandler extends ScopeHandler {\n  createScope(flags) {\n    return new FlowScope(flags);\n  }\n\n  declareName(name, bindingType, pos) {\n    const scope = this.currentScope();\n\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (super.isRedeclaredInScope(...arguments)) return true;\n\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n\n}\n\nclass State {\n  constructor() {\n    this.strict = void 0;\n    this.curLine = void 0;\n    this.startLoc = void 0;\n    this.endLoc = void 0;\n    this.errors = [];\n    this.potentialArrowAt = -1;\n    this.noArrowAt = [];\n    this.noArrowParamsConversionAt = [];\n    this.maybeInArrowParameters = false;\n    this.inType = false;\n    this.noAnonFunctionType = false;\n    this.inPropertyName = false;\n    this.hasFlowComment = false;\n    this.isAmbientContext = false;\n    this.inAbstractClass = false;\n    this.topicContext = {\n      maxNumOfResolvableTopics: 0,\n      maxTopicIndex: null\n    };\n    this.soloAwait = false;\n    this.inFSharpPipelineDirectBody = false;\n    this.labels = [];\n    this.decoratorStack = [[]];\n    this.comments = [];\n    this.commentStack = [];\n    this.pos = 0;\n    this.lineStart = 0;\n    this.type = types$1.eof;\n    this.value = null;\n    this.start = 0;\n    this.end = 0;\n    this.lastTokEndLoc = null;\n    this.lastTokStartLoc = null;\n    this.lastTokStart = 0;\n    this.lastTokEnd = 0;\n    this.context = [types.brace];\n    this.exprAllowed = true;\n    this.containsEsc = false;\n    this.strictErrors = new Map();\n    this.tokensLength = 0;\n  }\n\n  init(options) {\n    this.strict = options.strictMode === false ? false : options.strictMode === true ? true : options.sourceType === \"module\";\n    this.curLine = options.startLine;\n    this.startLoc = this.endLoc = this.curPosition();\n  }\n\n  curPosition() {\n    return new Position(this.curLine, this.pos - this.lineStart);\n  }\n\n  clone(skipArrays) {\n    const state = new State();\n    const keys = Object.keys(this);\n\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      let val = this[key];\n\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n\n      state[key] = val;\n    }\n\n    return state;\n  }\n\n}\n\nvar _isDigit = function isDigit(code) {\n  return code >= 48 && code <= 57;\n};\nconst VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100]);\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: [46, 66, 69, 79, 95, 98, 101, 111],\n  hex: [46, 88, 95, 120]\n};\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [48, 49];\nallowedNumericSeparatorSiblings.oct = [...allowedNumericSeparatorSiblings.bin, 50, 51, 52, 53, 54, 55];\nallowedNumericSeparatorSiblings.dec = [...allowedNumericSeparatorSiblings.oct, 56, 57];\nallowedNumericSeparatorSiblings.hex = [...allowedNumericSeparatorSiblings.dec, 65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102];\nclass Token {\n  constructor(state) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n}\nclass Tokenizer extends ParserError {\n  constructor(options, input) {\n    super();\n    this.isLookahead = void 0;\n    this.tokens = [];\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n\n  pushToken(token) {\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  next() {\n    this.checkKeywordEscapes();\n\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEnd = this.state.end;\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type) {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  match(type) {\n    return this.state.type === type;\n  }\n\n  createLookaheadState(state) {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      lastTokEnd: state.end,\n      context: [this.curContext()],\n      inType: state.inType\n    };\n  }\n\n  lookahead() {\n    const old = this.state;\n    this.state = this.createLookaheadState(old);\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart() {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos) {\n    skipWhiteSpace.lastIndex = pos;\n    const skip = skipWhiteSpace.exec(this.input);\n    return pos + skip[0].length;\n  }\n\n  lookaheadCharCode() {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  codePointAtPos(pos) {\n    let cp = this.input.charCodeAt(pos);\n\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n\n    return cp;\n  }\n\n  setStrict(strict) {\n    this.state.strict = strict;\n\n    if (strict) {\n      this.state.strictErrors.forEach((message, pos) => this.raise(pos, message));\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext() {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  nextToken() {\n    const curContext = this.curContext();\n    if (!curContext.preserveSpace) this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n\n    if (this.state.pos >= this.length) {\n      this.finishToken(types$1.eof);\n      return;\n    }\n\n    if (curContext === types.template) {\n      this.readTmplToken();\n    } else {\n      this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n    }\n  }\n\n  skipBlockComment() {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(\"*/\", this.state.pos + 2);\n    if (end === -1) throw this.raise(start, ErrorMessages.UnterminatedComment);\n    this.state.pos = end + 2;\n    lineBreakG.lastIndex = start;\n    let match;\n\n    while ((match = lineBreakG.exec(this.input)) && match.index < this.state.pos) {\n      ++this.state.curLine;\n      this.state.lineStart = match.index + match[0].length;\n    }\n\n    if (this.isLookahead) return;\n    const value = this.input.slice(start + 2, end);\n    const comment = {\n      type: \"CommentBlock\",\n      value: value,\n      start: start,\n      end: end + 2,\n      loc: new SourceLocation(startLoc, this.state.curPosition())\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip) {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt(this.state.pos += startSkip);\n\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    if (this.isLookahead) return;\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n    const comment = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition())\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipSpace() {\n    const spaceStart = this.state.pos;\n    const comments = [];\n\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      switch (ch) {\n        case 32:\n        case 160:\n        case 9:\n          ++this.state.pos;\n          break;\n\n        case 13:\n          if (this.input.charCodeAt(this.state.pos + 1) === 10) {\n            ++this.state.pos;\n          }\n\n        case 10:\n        case 8232:\n        case 8233:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case 47:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case 42:\n              {\n                const comment = this.skipBlockComment();\n\n                if (comment !== undefined) {\n                  this.addComment(comment);\n                  if (this.options.attachComment) comments.push(comment);\n                }\n\n                break;\n              }\n\n            case 47:\n              {\n                const comment = this.skipLineComment(2);\n\n                if (comment !== undefined) {\n                  this.addComment(comment);\n                  if (this.options.attachComment) comments.push(comment);\n                }\n\n                break;\n              }\n\n            default:\n              break loop;\n          }\n\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (ch === 45 && !this.inModule) {\n            const pos = this.state.pos;\n\n            if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) {\n              const comment = this.skipLineComment(3);\n\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (ch === 60 && !this.inModule) {\n            const pos = this.state.pos;\n\n            if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) {\n              const comment = this.skipLineComment(4);\n\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n\n      }\n    }\n\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const CommentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null\n      };\n      this.state.commentStack.push(CommentWhitespace);\n    }\n  }\n\n  finishToken(type, val) {\n    this.state.end = this.state.pos;\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.state.endLoc = this.state.curPosition();\n      this.updateContext(prevType);\n    }\n  }\n\n  readToken_numberSign() {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n\n    if (next >= 48 && next <= 57) {\n      throw this.raise(this.state.pos, ErrorMessages.UnexpectedDigitAfterHash);\n    }\n\n    if (next === 123 || next === 91 && this.hasPlugin(\"recordAndTuple\")) {\n      this.expectPlugin(\"recordAndTuple\");\n\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"hash\") {\n        throw this.raise(this.state.pos, next === 123 ? ErrorMessages.RecordExpressionHashIncorrectStartSyntaxType : ErrorMessages.TupleExpressionHashIncorrectStartSyntaxType);\n      }\n\n      this.state.pos += 2;\n\n      if (next === 123) {\n        this.finishToken(types$1.braceHashL);\n      } else {\n        this.finishToken(types$1.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(types$1.privateName, this.readWord1(next));\n    } else if (next === 92) {\n      ++this.state.pos;\n      this.finishToken(types$1.privateName, this.readWord1());\n    } else {\n      this.finishOp(types$1.hash, 1);\n    }\n  }\n\n  readToken_dot() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next >= 48 && next <= 57) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {\n      this.state.pos += 3;\n      this.finishToken(types$1.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(types$1.dot);\n    }\n  }\n\n  readToken_slash() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(types$1.slashAssign, 2);\n    } else {\n      this.finishOp(types$1.slash, 1);\n    }\n  }\n\n  readToken_interpreter() {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== 33) return false;\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n    this.finishToken(types$1.interpreterDirective, value);\n    return true;\n  }\n\n  readToken_mult_modulo(code) {\n    let type = code === 42 ? types$1.star : types$1.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 42 && next === 42) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = types$1.exponent;\n    }\n\n    if (next === 61 && !this.state.inType) {\n      width++;\n      type = code === 37 ? types$1.moduloAssign : types$1.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === 61) {\n        this.finishOp(types$1.assign, 3);\n      } else {\n        this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2);\n      }\n\n      return;\n    }\n\n    if (code === 124) {\n      if (next === 62) {\n        this.finishOp(types$1.pipeline, 2);\n        return;\n      }\n\n      if (this.hasPlugin(\"recordAndTuple\") && next === 125) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectEndSyntaxType);\n        }\n\n        this.state.pos += 2;\n        this.finishToken(types$1.braceBarR);\n        return;\n      }\n\n      if (this.hasPlugin(\"recordAndTuple\") && next === 93) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectEndSyntaxType);\n        }\n\n        this.state.pos += 2;\n        this.finishToken(types$1.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === 61) {\n      this.finishOp(types$1.assign, 2);\n      return;\n    }\n\n    this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1);\n  }\n\n  readToken_caret() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(types$1.assign, 2);\n    } else {\n      this.finishOp(types$1.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_plus_min(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(types$1.incDec, 2);\n      return;\n    }\n\n    if (next === 61) {\n      this.finishOp(types$1.assign, 2);\n    } else {\n      this.finishOp(types$1.plusMin, 1);\n    }\n  }\n\n  readToken_lt_gt(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    let size = 1;\n\n    if (next === code) {\n      size = code === 62 && this.input.charCodeAt(this.state.pos + 2) === 62 ? 3 : 2;\n\n      if (this.input.charCodeAt(this.state.pos + size) === 61) {\n        this.finishOp(types$1.assign, size + 1);\n        return;\n      }\n\n      this.finishOp(types$1.bitShift, size);\n      return;\n    }\n\n    if (next === 61) {\n      size = 2;\n    }\n\n    this.finishOp(types$1.relational, size);\n  }\n\n  readToken_eq_excl(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(types$1.equality, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);\n      return;\n    }\n\n    if (code === 61 && next === 62) {\n      this.state.pos += 2;\n      this.finishToken(types$1.arrow);\n      return;\n    }\n\n    this.finishOp(code === 61 ? types$1.eq : types$1.bang, 1);\n  }\n\n  readToken_question() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n\n    if (next === 63) {\n      if (next2 === 61) {\n        this.finishOp(types$1.assign, 3);\n      } else {\n        this.finishOp(types$1.nullishCoalescing, 2);\n      }\n    } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {\n      this.state.pos += 2;\n      this.finishToken(types$1.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(types$1.question);\n    }\n  }\n\n  getTokenFromCode(code) {\n    switch (code) {\n      case 46:\n        this.readToken_dot();\n        return;\n\n      case 40:\n        ++this.state.pos;\n        this.finishToken(types$1.parenL);\n        return;\n\n      case 41:\n        ++this.state.pos;\n        this.finishToken(types$1.parenR);\n        return;\n\n      case 59:\n        ++this.state.pos;\n        this.finishToken(types$1.semi);\n        return;\n\n      case 44:\n        ++this.state.pos;\n        this.finishToken(types$1.comma);\n        return;\n\n      case 91:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectStartSyntaxType);\n          }\n\n          this.state.pos += 2;\n          this.finishToken(types$1.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(types$1.bracketL);\n        }\n\n        return;\n\n      case 93:\n        ++this.state.pos;\n        this.finishToken(types$1.bracketR);\n        return;\n\n      case 123:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectStartSyntaxType);\n          }\n\n          this.state.pos += 2;\n          this.finishToken(types$1.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(types$1.braceL);\n        }\n\n        return;\n\n      case 125:\n        ++this.state.pos;\n        this.finishToken(types$1.braceR);\n        return;\n\n      case 58:\n        if (this.hasPlugin(\"functionBind\") && this.input.charCodeAt(this.state.pos + 1) === 58) {\n          this.finishOp(types$1.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(types$1.colon);\n        }\n\n        return;\n\n      case 63:\n        this.readToken_question();\n        return;\n\n      case 96:\n        ++this.state.pos;\n        this.finishToken(types$1.backQuote);\n        return;\n\n      case 48:\n        {\n          const next = this.input.charCodeAt(this.state.pos + 1);\n\n          if (next === 120 || next === 88) {\n            this.readRadixNumber(16);\n            return;\n          }\n\n          if (next === 111 || next === 79) {\n            this.readRadixNumber(8);\n            return;\n          }\n\n          if (next === 98 || next === 66) {\n            this.readRadixNumber(2);\n            return;\n          }\n        }\n\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        this.readNumber(false);\n        return;\n\n      case 34:\n      case 39:\n        this.readString(code);\n        return;\n\n      case 47:\n        this.readToken_slash();\n        return;\n\n      case 37:\n      case 42:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case 124:\n      case 38:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case 94:\n        this.readToken_caret();\n        return;\n\n      case 43:\n      case 45:\n        this.readToken_plus_min(code);\n        return;\n\n      case 60:\n      case 62:\n        this.readToken_lt_gt(code);\n        return;\n\n      case 61:\n      case 33:\n        this.readToken_eq_excl(code);\n        return;\n\n      case 126:\n        this.finishOp(types$1.tilde, 1);\n        return;\n\n      case 64:\n        ++this.state.pos;\n        this.finishToken(types$1.at);\n        return;\n\n      case 35:\n        this.readToken_numberSign();\n        return;\n\n      case 92:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n\n    }\n\n    throw this.raise(this.state.pos, ErrorMessages.InvalidOrUnexpectedToken, String.fromCodePoint(code));\n  }\n\n  finishOp(type, size) {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp() {\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let {\n      pos\n    } = this.state;\n\n    for (;; ++pos) {\n      if (pos >= this.length) {\n        throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n      }\n\n      const ch = this.input.charCodeAt(pos);\n\n      if (isNewLine(ch)) {\n        throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n      }\n\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === 91) {\n          inClass = true;\n        } else if (ch === 93 && inClass) {\n          inClass = false;\n        } else if (ch === 47 && !inClass) {\n          break;\n        }\n\n        escaped = ch === 92;\n      }\n    }\n\n    const content = this.input.slice(start, pos);\n    ++pos;\n    let mods = \"\";\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      const char = String.fromCharCode(cp);\n\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (mods.includes(char)) {\n          this.raise(pos + 1, ErrorMessages.DuplicateRegExpFlags);\n        }\n      } else if (isIdentifierChar(cp) || cp === 92) {\n        this.raise(pos + 1, ErrorMessages.MalformedRegExpFlags);\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n\n    this.state.pos = pos;\n    this.finishToken(types$1.regexp, {\n      pattern: content,\n      flags: mods\n    });\n  }\n\n  readInt(radix, len, forceLen, allowNumSeparator = true) {\n    const start = this.state.pos;\n    const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;\n    const allowedSiblings = radix === 16 ? allowedNumericSeparatorSiblings.hex : radix === 10 ? allowedNumericSeparatorSiblings.dec : radix === 8 ? allowedNumericSeparatorSiblings.oct : allowedNumericSeparatorSiblings.bin;\n    let invalid = false;\n    let total = 0;\n\n    for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n      const code = this.input.charCodeAt(this.state.pos);\n      let val;\n\n      if (code === 95) {\n        const prev = this.input.charCodeAt(this.state.pos - 1);\n        const next = this.input.charCodeAt(this.state.pos + 1);\n\n        if (allowedSiblings.indexOf(next) === -1) {\n          this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n        } else if (forbiddenSiblings.indexOf(prev) > -1 || forbiddenSiblings.indexOf(next) > -1 || Number.isNaN(next)) {\n          this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n        }\n\n        if (!allowNumSeparator) {\n          this.raise(this.state.pos, ErrorMessages.NumericSeparatorInEscapeSequence);\n        }\n\n        ++this.state.pos;\n        continue;\n      }\n\n      if (code >= 97) {\n        val = code - 97 + 10;\n      } else if (code >= 65) {\n        val = code - 65 + 10;\n      } else if (_isDigit(code)) {\n        val = code - 48;\n      } else {\n        val = Infinity;\n      }\n\n      if (val >= radix) {\n        if (this.options.errorRecovery && val <= 9) {\n          val = 0;\n          this.raise(this.state.start + i + 2, ErrorMessages.InvalidDigit, radix);\n        } else if (forceLen) {\n          val = 0;\n          invalid = true;\n        } else {\n          break;\n        }\n      }\n\n      ++this.state.pos;\n      total = total * radix + val;\n    }\n\n    if (this.state.pos === start || len != null && this.state.pos - start !== len || invalid) {\n      return null;\n    }\n\n    return total;\n  }\n\n  readRadixNumber(radix) {\n    const start = this.state.pos;\n    let isBigInt = false;\n    this.state.pos += 2;\n    const val = this.readInt(radix);\n\n    if (val == null) {\n      this.raise(this.state.start + 2, ErrorMessages.InvalidDigit, radix);\n    }\n\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === 110) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === 109) {\n      throw this.raise(start, ErrorMessages.InvalidDecimal);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(types$1.bigint, str);\n      return;\n    }\n\n    this.finishToken(types$1.num, val);\n  }\n\n  readNumber(startsWithDot) {\n    const start = this.state.pos;\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(start, ErrorMessages.InvalidNumber);\n    }\n\n    const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(start, ErrorMessages.StrictOctalLiteral);\n\n      if (!this.state.strict) {\n        const underscorePos = integer.indexOf(\"_\");\n\n        if (underscorePos > 0) {\n          this.raise(underscorePos + start, ErrorMessages.ZeroDigitNumericSeparator);\n        }\n      }\n\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n\n    if (next === 46 && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if ((next === 69 || next === 101) && !isOctal) {\n      next = this.input.charCodeAt(++this.state.pos);\n\n      if (next === 43 || next === 45) {\n        ++this.state.pos;\n      }\n\n      if (this.readInt(10) === null) {\n        this.raise(start, ErrorMessages.InvalidOrMissingExponent);\n      }\n\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === 110) {\n      if (isFloat || hasLeadingZero) {\n        this.raise(start, ErrorMessages.InvalidBigIntLiteral);\n      }\n\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === 109) {\n      this.expectPlugin(\"decimal\", this.state.pos);\n\n      if (hasExponent || hasLeadingZero) {\n        this.raise(start, ErrorMessages.InvalidDecimal);\n      }\n\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n    }\n\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(types$1.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(types$1.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(types$1.num, val);\n  }\n\n  readCodePoint(throwOnInvalid) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let code;\n\n    if (ch === 123) {\n      const codePos = ++this.state.pos;\n      code = this.readHexChar(this.input.indexOf(\"}\", this.state.pos) - this.state.pos, true, throwOnInvalid);\n      ++this.state.pos;\n\n      if (code !== null && code > 0x10ffff) {\n        if (throwOnInvalid) {\n          this.raise(codePos, ErrorMessages.InvalidCodePoint);\n        } else {\n          return null;\n        }\n      }\n    } else {\n      code = this.readHexChar(4, false, throwOnInvalid);\n    }\n\n    return code;\n  }\n\n  readString(quote) {\n    let out = \"\",\n        chunkStart = ++this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n\n      if (ch === 92) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.readEscapedChar(false);\n        chunkStart = this.state.pos;\n      } else if (ch === 8232 || ch === 8233) {\n        ++this.state.pos;\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      } else {\n        ++this.state.pos;\n      }\n    }\n\n    out += this.input.slice(chunkStart, this.state.pos++);\n    this.finishToken(types$1.string, out);\n  }\n\n  readTmplToken() {\n    let out = \"\",\n        chunkStart = this.state.pos,\n        containsInvalid = false;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedTemplate);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      if (ch === 96 || ch === 36 && this.input.charCodeAt(this.state.pos + 1) === 123) {\n        if (this.state.pos === this.state.start && this.match(types$1.template)) {\n          if (ch === 36) {\n            this.state.pos += 2;\n            this.finishToken(types$1.dollarBraceL);\n            return;\n          } else {\n            ++this.state.pos;\n            this.finishToken(types$1.backQuote);\n            return;\n          }\n        }\n\n        out += this.input.slice(chunkStart, this.state.pos);\n        this.finishToken(types$1.template, containsInvalid ? null : out);\n        return;\n      }\n\n      if (ch === 92) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        const escaped = this.readEscapedChar(true);\n\n        if (escaped === null) {\n          containsInvalid = true;\n        } else {\n          out += escaped;\n        }\n\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        ++this.state.pos;\n\n        switch (ch) {\n          case 13:\n            if (this.input.charCodeAt(this.state.pos) === 10) {\n              ++this.state.pos;\n            }\n\n          case 10:\n            out += \"\\n\";\n            break;\n\n          default:\n            out += String.fromCharCode(ch);\n            break;\n        }\n\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n  }\n\n  recordStrictModeErrors(pos, message) {\n    if (this.state.strict && !this.state.strictErrors.has(pos)) {\n      this.raise(pos, message);\n    } else {\n      this.state.strictErrors.set(pos, message);\n    }\n  }\n\n  readEscapedChar(inTemplate) {\n    const throwOnInvalid = !inTemplate;\n    const ch = this.input.charCodeAt(++this.state.pos);\n    ++this.state.pos;\n\n    switch (ch) {\n      case 110:\n        return \"\\n\";\n\n      case 114:\n        return \"\\r\";\n\n      case 120:\n        {\n          const code = this.readHexChar(2, false, throwOnInvalid);\n          return code === null ? null : String.fromCharCode(code);\n        }\n\n      case 117:\n        {\n          const code = this.readCodePoint(throwOnInvalid);\n          return code === null ? null : String.fromCodePoint(code);\n        }\n\n      case 116:\n        return \"\\t\";\n\n      case 98:\n        return \"\\b\";\n\n      case 118:\n        return \"\\u000b\";\n\n      case 102:\n        return \"\\f\";\n\n      case 13:\n        if (this.input.charCodeAt(this.state.pos) === 10) {\n          ++this.state.pos;\n        }\n\n      case 10:\n        this.state.lineStart = this.state.pos;\n        ++this.state.curLine;\n\n      case 8232:\n      case 8233:\n        return \"\";\n\n      case 56:\n      case 57:\n        if (inTemplate) {\n          return null;\n        } else {\n          this.recordStrictModeErrors(this.state.pos - 1, ErrorMessages.StrictNumericEscape);\n        }\n\n      default:\n        if (ch >= 48 && ch <= 55) {\n          const codePos = this.state.pos - 1;\n          const match = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/);\n          let octalStr = match[0];\n          let octal = parseInt(octalStr, 8);\n\n          if (octal > 255) {\n            octalStr = octalStr.slice(0, -1);\n            octal = parseInt(octalStr, 8);\n          }\n\n          this.state.pos += octalStr.length - 1;\n          const next = this.input.charCodeAt(this.state.pos);\n\n          if (octalStr !== \"0\" || next === 56 || next === 57) {\n            if (inTemplate) {\n              return null;\n            } else {\n              this.recordStrictModeErrors(codePos, ErrorMessages.StrictNumericEscape);\n            }\n          }\n\n          return String.fromCharCode(octal);\n        }\n\n        return String.fromCharCode(ch);\n    }\n  }\n\n  readHexChar(len, forceLen, throwOnInvalid) {\n    const codePos = this.state.pos;\n    const n = this.readInt(16, len, forceLen, false);\n\n    if (n === null) {\n      if (throwOnInvalid) {\n        this.raise(codePos, ErrorMessages.InvalidEscapeSequence);\n      } else {\n        this.state.pos = codePos - 1;\n      }\n    }\n\n    return n;\n  }\n\n  readWord1(firstCode) {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === 92) {\n        this.state.containsEsc = true;\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.pos;\n        const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== 117) {\n          this.raise(this.state.pos, ErrorMessages.MissingUnicodeEscape);\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(escStart, ErrorMessages.EscapedCharNotAnIdentifier);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  readWord(firstCode) {\n    const word = this.readWord1(firstCode);\n    const type = keywords$1.get(word) || types$1.name;\n    this.finishToken(type, word);\n  }\n\n  checkKeywordEscapes() {\n    const kw = this.state.type.keyword;\n\n    if (kw && this.state.containsEsc) {\n      this.raise(this.state.start, ErrorMessages.InvalidEscapedReservedWord, kw);\n    }\n  }\n\n  updateContext(prevType) {\n    var _this$state$type$upda, _this$state$type;\n\n    (_this$state$type$upda = (_this$state$type = this.state.type).updateContext) == null ? void 0 : _this$state$type$upda.call(_this$state$type, this.state.context);\n  }\n\n}\n\nclass ClassScope {\n  constructor() {\n    this.privateNames = new Set();\n    this.loneAccessors = new Map();\n    this.undefinedPrivateNames = new Map();\n  }\n\n}\nclass ClassScopeHandler {\n  constructor(raise) {\n    this.stack = [];\n    this.undefinedPrivateNames = new Map();\n    this.raise = raise;\n  }\n\n  current() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n    const current = this.current();\n\n    for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, pos);\n        }\n      } else {\n        this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n      }\n    }\n  }\n\n  declarePrivateName(name, elementType, pos) {\n    const classScope = this.current();\n    let redefined = classScope.privateNames.has(name);\n\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && classScope.loneAccessors.get(name);\n\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n        if (!redefined) classScope.loneAccessors.delete(name);\n      } else if (!redefined) {\n        classScope.loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.raise(pos, ErrorMessages.PrivateNameRedeclaration, name);\n    }\n\n    classScope.privateNames.add(name);\n    classScope.undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name, pos) {\n    let classScope;\n\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, pos);\n    } else {\n      this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n    }\n  }\n\n}\n\nconst kExpression = 0,\n      kMaybeArrowParameterDeclaration = 1,\n      kMaybeAsyncArrowParameterDeclaration = 2,\n      kParameterDeclaration = 3;\n\nclass ExpressionScope {\n  constructor(type = kExpression) {\n    this.type = void 0;\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration() {\n    return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration;\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === kParameterDeclaration;\n  }\n\n}\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  constructor(type) {\n    super(type);\n    this.errors = new Map();\n  }\n\n  recordDeclarationError(pos, template) {\n    this.errors.set(pos, template);\n  }\n\n  clearDeclarationError(pos) {\n    this.errors.delete(pos);\n  }\n\n  iterateErrors(iterator) {\n    this.errors.forEach(iterator);\n  }\n\n}\n\nclass ExpressionScopeHandler {\n  constructor(raise) {\n    this.stack = [new ExpressionScope()];\n    this.raise = raise;\n  }\n\n  enter(scope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  recordParameterInitializerError(pos, template) {\n    const {\n      stack\n    } = this;\n    let i = stack.length - 1;\n    let scope = stack[i];\n\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(pos, template);\n      } else {\n        return;\n      }\n\n      scope = stack[--i];\n    }\n\n    this.raise(pos, template);\n  }\n\n  recordParenthesizedIdentifierError(pos, template) {\n    const {\n      stack\n    } = this;\n    const scope = stack[stack.length - 1];\n\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.raise(pos, template);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(pos, template);\n    } else {\n      return;\n    }\n  }\n\n  recordAsyncArrowParametersError(pos, template) {\n    const {\n      stack\n    } = this;\n    let i = stack.length - 1;\n    let scope = stack[i];\n\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n        scope.recordDeclarationError(pos, template);\n      }\n\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern() {\n    const {\n      stack\n    } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors((template, pos) => {\n      this.raise(pos, template);\n      let i = stack.length - 2;\n      let scope = stack[i];\n\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(pos);\n        scope = stack[--i];\n      }\n    });\n  }\n\n}\nfunction newParameterDeclarationScope() {\n  return new ExpressionScope(kParameterDeclaration);\n}\nfunction newArrowHeadScope() {\n  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\nfunction newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\nfunction newExpressionScope() {\n  return new ExpressionScope();\n}\n\nconst PARAM = 0b0000,\n      PARAM_YIELD = 0b0001,\n      PARAM_AWAIT = 0b0010,\n      PARAM_RETURN = 0b0100,\n      PARAM_IN = 0b1000;\nclass ProductionParameterHandler {\n  constructor() {\n    this.stacks = [];\n  }\n\n  enter(flags) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags() {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait() {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n\n  get hasYield() {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n\n  get hasReturn() {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n\n  get hasIn() {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n\n}\nfunction functionFlags(isAsync, isGenerator) {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n\nclass UtilParser extends Tokenizer {\n  addExtra(node, key, val) {\n    if (!node) return;\n    const extra = node.extra = node.extra || {};\n    extra[key] = val;\n  }\n\n  isRelational(op) {\n    return this.match(types$1.relational) && this.state.value === op;\n  }\n\n  expectRelational(op) {\n    if (this.isRelational(op)) {\n      this.next();\n    } else {\n      this.unexpected(null, types$1.relational);\n    }\n  }\n\n  isContextual(name) {\n    return this.match(types$1.name) && this.state.value === name && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart, name) {\n    const nameEnd = nameStart + name.length;\n\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800);\n    }\n\n    return false;\n  }\n\n  isLookaheadContextual(name) {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  eatContextual(name) {\n    return this.isContextual(name) && this.eat(types$1.name);\n  }\n\n  expectContextual(name, template) {\n    if (!this.eatContextual(name)) this.unexpected(null, template);\n  }\n\n  canInsertSemicolon() {\n    return this.match(types$1.eof) || this.match(types$1.braceR) || this.hasPrecedingLineBreak();\n  }\n\n  hasPrecedingLineBreak() {\n    return lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start));\n  }\n\n  hasFollowingLineBreak() {\n    return lineBreak.test(this.input.slice(this.state.end, this.nextTokenStart()));\n  }\n\n  isLineTerminator() {\n    return this.eat(types$1.semi) || this.canInsertSemicolon();\n  }\n\n  semicolon(allowAsi = true) {\n    if (allowAsi ? this.isLineTerminator() : this.eat(types$1.semi)) return;\n    this.raise(this.state.lastTokEnd, ErrorMessages.MissingSemicolon);\n  }\n\n  expect(type, pos) {\n    this.eat(type) || this.unexpected(pos, type);\n  }\n\n  assertNoSpace(message = \"Unexpected space.\") {\n    if (this.state.start > this.state.lastTokEnd) {\n      this.raise(this.state.lastTokEnd, {\n        code: ErrorCodes.SyntaxError,\n        reasonCode: \"UnexpectedSpace\",\n        template: message\n      });\n    }\n  }\n\n  unexpected(pos, messageOrType = {\n    code: ErrorCodes.SyntaxError,\n    reasonCode: \"UnexpectedToken\",\n    template: \"Unexpected token\"\n  }) {\n    if (messageOrType instanceof TokenType) {\n      messageOrType = {\n        code: ErrorCodes.SyntaxError,\n        reasonCode: \"UnexpectedToken\",\n        template: `Unexpected token, expected \"${messageOrType.label}\"`\n      };\n    }\n\n    throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n  }\n\n  expectPlugin(name, pos) {\n    if (!this.hasPlugin(name)) {\n      throw this.raiseWithData(pos != null ? pos : this.state.start, {\n        missingPlugin: [name]\n      }, `This experimental syntax requires enabling the parser plugin: '${name}'`);\n    }\n\n    return true;\n  }\n\n  expectOnePlugin(names, pos) {\n    if (!names.some(n => this.hasPlugin(n))) {\n      throw this.raiseWithData(pos != null ? pos : this.state.start, {\n        missingPlugin: names\n      }, `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\", \")}'`);\n    }\n  }\n\n  tryParse(fn, oldState = this.state.clone()) {\n    const abortSignal = {\n      node: null\n    };\n\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n\n      if (error instanceof SyntaxError) {\n        return {\n          node: null,\n          error,\n          thrown: true,\n          aborted: false,\n          failState\n        };\n      }\n\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(refExpressionErrors, andThrow) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssign,\n      doubleProto,\n      optionalParameters\n    } = refExpressionErrors;\n\n    if (!andThrow) {\n      return shorthandAssign >= 0 || doubleProto >= 0 || optionalParameters >= 0;\n    }\n\n    if (shorthandAssign >= 0) {\n      this.unexpected(shorthandAssign);\n    }\n\n    if (doubleProto >= 0) {\n      this.raise(doubleProto, ErrorMessages.DuplicateProto);\n    }\n\n    if (optionalParameters >= 0) {\n      this.unexpected(optionalParameters);\n    }\n  }\n\n  isLiteralPropertyName() {\n    return this.match(types$1.name) || !!this.state.type.keyword || this.match(types$1.string) || this.match(types$1.num) || this.match(types$1.bigint) || this.match(types$1.decimal);\n  }\n\n  isPrivateName(node) {\n    return node.type === \"PrivateName\";\n  }\n\n  getPrivateNameSV(node) {\n    return node.id.name;\n  }\n\n  hasPropertyAsPrivateName(node) {\n    return (node.type === \"MemberExpression\" || node.type === \"OptionalMemberExpression\") && this.isPrivateName(node.property);\n  }\n\n  isOptionalChain(node) {\n    return node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\";\n  }\n\n  isObjectProperty(node) {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node) {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(inModule = this.options.sourceType === \"module\") {\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this.raise.bind(this));\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this.raise.bind(this));\n    return () => {\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = PARAM;\n\n    if (this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n\n}\nclass ExpressionErrors {\n  constructor() {\n    this.shorthandAssign = -1;\n    this.doubleProto = -1;\n    this.optionalParameters = -1;\n  }\n\n}\n\nclass Node {\n  constructor(parser, pos, loc) {\n    this.type = \"\";\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser != null && parser.options.ranges) this.range = [pos, 0];\n    if (parser != null && parser.filename) this.loc.filename = parser.filename;\n  }\n\n}\n\nconst NodePrototype = Node.prototype;\n{\n  NodePrototype.__clone = function () {\n    const newNode = new Node();\n    const keys = Object.keys(this);\n\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n\n      if (key !== \"leadingComments\" && key !== \"trailingComments\" && key !== \"innerComments\") {\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nfunction clonePlaceholder(node) {\n  return cloneIdentifier(node);\n}\n\nfunction cloneIdentifier(node) {\n  const {\n    type,\n    start,\n    end,\n    loc,\n    range,\n    extra,\n    name\n  } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n\n  return cloned;\n}\nfunction cloneStringLiteral(node) {\n  const {\n    type,\n    start,\n    end,\n    loc,\n    range,\n    extra\n  } = node;\n\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n\n  const cloned = Object.create(NodePrototype);\n  cloned.type = \"StringLiteral\";\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.value = node.value;\n  return cloned;\n}\nclass NodeUtils extends UtilParser {\n  startNode() {\n    return new Node(this, this.state.start, this.state.startLoc);\n  }\n\n  startNodeAt(pos, loc) {\n    return new Node(this, pos, loc);\n  }\n\n  startNodeAtNode(type) {\n    return this.startNodeAt(type.start, type.loc.start);\n  }\n\n  finishNode(node, type) {\n    return this.finishNodeAt(node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);\n  }\n\n  finishNodeAt(node, type, pos, loc) {\n\n    node.type = type;\n    node.end = pos;\n    node.loc.end = loc;\n    if (this.options.ranges) node.range[1] = pos;\n    if (this.options.attachComment) this.processComment(node);\n    return node;\n  }\n\n  resetStartLocation(node, start, startLoc) {\n    node.start = start;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = start;\n  }\n\n  resetEndLocation(node, end = this.state.lastTokEnd, endLoc = this.state.lastTokEndLoc) {\n    node.end = end;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = end;\n  }\n\n  resetStartLocationFromNode(node, locationNode) {\n    this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n  }\n\n}\n\nconst reservedTypes = new Set([\"_\", \"any\", \"bool\", \"boolean\", \"empty\", \"extends\", \"false\", \"interface\", \"mixed\", \"null\", \"number\", \"static\", \"string\", \"true\", \"typeof\", \"void\"]);\nconst FlowErrors = makeErrorTemplates({\n  AmbiguousConditionalArrow: \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind: \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  AssignReservedType: \"Cannot overwrite reserved type %0.\",\n  DeclareClassElement: \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer: \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports: \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: \"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.\",\n  EnumDuplicateMemberName: \"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.\",\n  EnumInconsistentMemberValues: \"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.\",\n  EnumInvalidExplicitType: \"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidExplicitTypeUnknownSupplied: \"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidMemberInitializerPrimaryType: \"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.\",\n  EnumInvalidMemberInitializerSymbolType: \"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.\",\n  EnumInvalidMemberInitializerUnknownType: \"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.\",\n  EnumInvalidMemberName: \"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.\",\n  EnumNumberMemberNotInitialized: \"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.\",\n  EnumStringMemberInconsistentlyInitailized: \"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.\",\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportTypeShorthandOnlyInPureImport: \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact: \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject: \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule: \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault: \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule: \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  OptionalBindingPattern: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired: \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor: \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst: \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern: \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject: \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: \"Unexpected reserved type %0.\",\n  UnexpectedReservedUnderscore: \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks: \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType: \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand: 'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter: \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction: \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: \"`declare export %0` is not supported. Use `%1` instead.\",\n  UnsupportedStatementInDeclareModule: \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\"\n}, ErrorCodes.SyntaxError);\n\nfunction isEsModuleType(bodyElement) {\n  return bodyElement.type === \"DeclareExportAllDeclaration\" || bodyElement.type === \"DeclareExportDeclaration\" && (!bodyElement.declaration || bodyElement.declaration.type !== \"TypeAlias\" && bodyElement.declaration.type !== \"InterfaceDeclaration\");\n}\n\nfunction hasTypeImportKind(node) {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(state) {\n  return (state.type === types$1.name || !!state.type.keyword) && state.value !== \"from\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\"\n};\n\nfunction partition(list, test) {\n  const list1 = [];\n  const list2 = [];\n\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\nvar flow = (superClass => class extends superClass {\n  constructor(...args) {\n    super(...args);\n    this.flowPragma = undefined;\n  }\n\n  getScopeHandler() {\n    return FlowScopeHandler;\n  }\n\n  shouldParseTypes() {\n    return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n  }\n\n  shouldParseEnums() {\n    return !!this.getPluginOption(\"flow\", \"enums\");\n  }\n\n  finishToken(type, val) {\n    if (type !== types$1.string && type !== types$1.semi && type !== types$1.interpreterDirective) {\n      if (this.flowPragma === undefined) {\n        this.flowPragma = null;\n      }\n    }\n\n    return super.finishToken(type, val);\n  }\n\n  addComment(comment) {\n    if (this.flowPragma === undefined) {\n      const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n\n      if (!matches) ; else if (matches[1] === \"flow\") {\n        this.flowPragma = \"flow\";\n      } else if (matches[1] === \"noflow\") {\n        this.flowPragma = \"noflow\";\n      } else {\n        throw new Error(\"Unexpected flow pragma\");\n      }\n    }\n\n    return super.addComment(comment);\n  }\n\n  flowParseTypeInitialiser(tok) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    this.expect(tok || types$1.colon);\n    const type = this.flowParseType();\n    this.state.inType = oldInType;\n    return type;\n  }\n\n  flowParsePredicate() {\n    const node = this.startNode();\n    const moduloPos = this.state.start;\n    this.next();\n    this.expectContextual(\"checks\");\n\n    if (this.state.lastTokStart > moduloPos + 1) {\n      this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);\n    }\n\n    if (this.eat(types$1.parenL)) {\n      node.value = this.parseExpression();\n      this.expect(types$1.parenR);\n      return this.finishNode(node, \"DeclaredPredicate\");\n    } else {\n      return this.finishNode(node, \"InferredPredicate\");\n    }\n  }\n\n  flowParseTypeAndPredicateInitialiser() {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    this.expect(types$1.colon);\n    let type = null;\n    let predicate = null;\n\n    if (this.match(types$1.modulo)) {\n      this.state.inType = oldInType;\n      predicate = this.flowParsePredicate();\n    } else {\n      type = this.flowParseType();\n      this.state.inType = oldInType;\n\n      if (this.match(types$1.modulo)) {\n        predicate = this.flowParsePredicate();\n      }\n    }\n\n    return [type, predicate];\n  }\n\n  flowParseDeclareClass(node) {\n    this.next();\n    this.flowParseInterfaceish(node, true);\n    return this.finishNode(node, \"DeclareClass\");\n  }\n\n  flowParseDeclareFunction(node) {\n    this.next();\n    const id = node.id = this.parseIdentifier();\n    const typeNode = this.startNode();\n    const typeContainer = this.startNode();\n\n    if (this.isRelational(\"<\")) {\n      typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      typeNode.typeParameters = null;\n    }\n\n    this.expect(types$1.parenL);\n    const tmp = this.flowParseFunctionTypeParams();\n    typeNode.params = tmp.params;\n    typeNode.rest = tmp.rest;\n    typeNode.this = tmp._this;\n    this.expect(types$1.parenR);\n    [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n    typeContainer.typeAnnotation = this.finishNode(typeNode, \"FunctionTypeAnnotation\");\n    id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n    this.resetEndLocation(id);\n    this.semicolon();\n    this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.start);\n    return this.finishNode(node, \"DeclareFunction\");\n  }\n\n  flowParseDeclare(node, insideModule) {\n    if (this.match(types$1._class)) {\n      return this.flowParseDeclareClass(node);\n    } else if (this.match(types$1._function)) {\n      return this.flowParseDeclareFunction(node);\n    } else if (this.match(types$1._var)) {\n      return this.flowParseDeclareVariable(node);\n    } else if (this.eatContextual(\"module\")) {\n      if (this.match(types$1.dot)) {\n        return this.flowParseDeclareModuleExports(node);\n      } else {\n        if (insideModule) {\n          this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);\n        }\n\n        return this.flowParseDeclareModule(node);\n      }\n    } else if (this.isContextual(\"type\")) {\n      return this.flowParseDeclareTypeAlias(node);\n    } else if (this.isContextual(\"opaque\")) {\n      return this.flowParseDeclareOpaqueType(node);\n    } else if (this.isContextual(\"interface\")) {\n      return this.flowParseDeclareInterface(node);\n    } else if (this.match(types$1._export)) {\n      return this.flowParseDeclareExportDeclaration(node, insideModule);\n    } else {\n      throw this.unexpected();\n    }\n  }\n\n  flowParseDeclareVariable(node) {\n    this.next();\n    node.id = this.flowParseTypeAnnotatableIdentifier(true);\n    this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n    this.semicolon();\n    return this.finishNode(node, \"DeclareVariable\");\n  }\n\n  flowParseDeclareModule(node) {\n    this.scope.enter(SCOPE_OTHER);\n\n    if (this.match(types$1.string)) {\n      node.id = this.parseExprAtom();\n    } else {\n      node.id = this.parseIdentifier();\n    }\n\n    const bodyNode = node.body = this.startNode();\n    const body = bodyNode.body = [];\n    this.expect(types$1.braceL);\n\n    while (!this.match(types$1.braceR)) {\n      let bodyNode = this.startNode();\n\n      if (this.match(types$1._import)) {\n        this.next();\n\n        if (!this.isContextual(\"type\") && !this.match(types$1._typeof)) {\n          this.raise(this.state.lastTokStart, FlowErrors.InvalidNonTypeImportInDeclareModule);\n        }\n\n        this.parseImport(bodyNode);\n      } else {\n        this.expectContextual(\"declare\", FlowErrors.UnsupportedStatementInDeclareModule);\n        bodyNode = this.flowParseDeclare(bodyNode, true);\n      }\n\n      body.push(bodyNode);\n    }\n\n    this.scope.exit();\n    this.expect(types$1.braceR);\n    this.finishNode(bodyNode, \"BlockStatement\");\n    let kind = null;\n    let hasModuleExport = false;\n    body.forEach(bodyElement => {\n      if (isEsModuleType(bodyElement)) {\n        if (kind === \"CommonJS\") {\n          this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n        }\n\n        kind = \"ES\";\n      } else if (bodyElement.type === \"DeclareModuleExports\") {\n        if (hasModuleExport) {\n          this.raise(bodyElement.start, FlowErrors.DuplicateDeclareModuleExports);\n        }\n\n        if (kind === \"ES\") {\n          this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n        }\n\n        kind = \"CommonJS\";\n        hasModuleExport = true;\n      }\n    });\n    node.kind = kind || \"CommonJS\";\n    return this.finishNode(node, \"DeclareModule\");\n  }\n\n  flowParseDeclareExportDeclaration(node, insideModule) {\n    this.expect(types$1._export);\n\n    if (this.eat(types$1._default)) {\n      if (this.match(types$1._function) || this.match(types$1._class)) {\n        node.declaration = this.flowParseDeclare(this.startNode());\n      } else {\n        node.declaration = this.flowParseType();\n        this.semicolon();\n      }\n\n      node.default = true;\n      return this.finishNode(node, \"DeclareExportDeclaration\");\n    } else {\n      if (this.match(types$1._const) || this.isLet() || (this.isContextual(\"type\") || this.isContextual(\"interface\")) && !insideModule) {\n        const label = this.state.value;\n        const suggestion = exportSuggestions[label];\n        throw this.raise(this.state.start, FlowErrors.UnsupportedDeclareExportKind, label, suggestion);\n      }\n\n      if (this.match(types$1._var) || this.match(types$1._function) || this.match(types$1._class) || this.isContextual(\"opaque\")) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (this.match(types$1.star) || this.match(types$1.braceL) || this.isContextual(\"interface\") || this.isContextual(\"type\") || this.isContextual(\"opaque\")) {\n          node = this.parseExport(node);\n\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.type = \"ExportDeclaration\";\n            node.default = false;\n            delete node.exportKind;\n          }\n\n          node.type = \"Declare\" + node.type;\n          return node;\n        }\n    }\n\n    throw this.unexpected();\n  }\n\n  flowParseDeclareModuleExports(node) {\n    this.next();\n    this.expectContextual(\"exports\");\n    node.typeAnnotation = this.flowParseTypeAnnotation();\n    this.semicolon();\n    return this.finishNode(node, \"DeclareModuleExports\");\n  }\n\n  flowParseDeclareTypeAlias(node) {\n    this.next();\n    this.flowParseTypeAlias(node);\n    node.type = \"DeclareTypeAlias\";\n    return node;\n  }\n\n  flowParseDeclareOpaqueType(node) {\n    this.next();\n    this.flowParseOpaqueType(node, true);\n    node.type = \"DeclareOpaqueType\";\n    return node;\n  }\n\n  flowParseDeclareInterface(node) {\n    this.next();\n    this.flowParseInterfaceish(node);\n    return this.finishNode(node, \"DeclareInterface\");\n  }\n\n  flowParseInterfaceish(node, isClass = false) {\n    node.id = this.flowParseRestrictedIdentifier(!isClass, true);\n    this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.start);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n\n    node.extends = [];\n    node.implements = [];\n    node.mixins = [];\n\n    if (this.eat(types$1._extends)) {\n      do {\n        node.extends.push(this.flowParseInterfaceExtends());\n      } while (!isClass && this.eat(types$1.comma));\n    }\n\n    if (this.isContextual(\"mixins\")) {\n      this.next();\n\n      do {\n        node.mixins.push(this.flowParseInterfaceExtends());\n      } while (this.eat(types$1.comma));\n    }\n\n    if (this.isContextual(\"implements\")) {\n      this.next();\n\n      do {\n        node.implements.push(this.flowParseInterfaceExtends());\n      } while (this.eat(types$1.comma));\n    }\n\n    node.body = this.flowParseObjectType({\n      allowStatic: isClass,\n      allowExact: false,\n      allowSpread: false,\n      allowProto: isClass,\n      allowInexact: false\n    });\n  }\n\n  flowParseInterfaceExtends() {\n    const node = this.startNode();\n    node.id = this.flowParseQualifiedTypeIdentifier();\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterInstantiation();\n    } else {\n      node.typeParameters = null;\n    }\n\n    return this.finishNode(node, \"InterfaceExtends\");\n  }\n\n  flowParseInterface(node) {\n    this.flowParseInterfaceish(node);\n    return this.finishNode(node, \"InterfaceDeclaration\");\n  }\n\n  checkNotUnderscore(word) {\n    if (word === \"_\") {\n      this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);\n    }\n  }\n\n  checkReservedType(word, startLoc, declaration) {\n    if (!reservedTypes.has(word)) return;\n    this.raise(startLoc, declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, word);\n  }\n\n  flowParseRestrictedIdentifier(liberal, declaration) {\n    this.checkReservedType(this.state.value, this.state.start, declaration);\n    return this.parseIdentifier(liberal);\n  }\n\n  flowParseTypeAlias(node) {\n    node.id = this.flowParseRestrictedIdentifier(false, true);\n    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n\n    node.right = this.flowParseTypeInitialiser(types$1.eq);\n    this.semicolon();\n    return this.finishNode(node, \"TypeAlias\");\n  }\n\n  flowParseOpaqueType(node, declare) {\n    this.expectContextual(\"type\");\n    node.id = this.flowParseRestrictedIdentifier(true, true);\n    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n\n    node.supertype = null;\n\n    if (this.match(types$1.colon)) {\n      node.supertype = this.flowParseTypeInitialiser(types$1.colon);\n    }\n\n    node.impltype = null;\n\n    if (!declare) {\n      node.impltype = this.flowParseTypeInitialiser(types$1.eq);\n    }\n\n    this.semicolon();\n    return this.finishNode(node, \"OpaqueType\");\n  }\n\n  flowParseTypeParameter(requireDefault = false) {\n    const nodeStart = this.state.start;\n    const node = this.startNode();\n    const variance = this.flowParseVariance();\n    const ident = this.flowParseTypeAnnotatableIdentifier();\n    node.name = ident.name;\n    node.variance = variance;\n    node.bound = ident.typeAnnotation;\n\n    if (this.match(types$1.eq)) {\n      this.eat(types$1.eq);\n      node.default = this.flowParseType();\n    } else {\n      if (requireDefault) {\n        this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);\n      }\n    }\n\n    return this.finishNode(node, \"TypeParameter\");\n  }\n\n  flowParseTypeParameterDeclaration() {\n    const oldInType = this.state.inType;\n    const node = this.startNode();\n    node.params = [];\n    this.state.inType = true;\n\n    if (this.isRelational(\"<\") || this.match(types$1.jsxTagStart)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n\n    let defaultRequired = false;\n\n    do {\n      const typeParameter = this.flowParseTypeParameter(defaultRequired);\n      node.params.push(typeParameter);\n\n      if (typeParameter.default) {\n        defaultRequired = true;\n      }\n\n      if (!this.isRelational(\">\")) {\n        this.expect(types$1.comma);\n      }\n    } while (!this.isRelational(\">\"));\n\n    this.expectRelational(\">\");\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterDeclaration\");\n  }\n\n  flowParseTypeParameterInstantiation() {\n    const node = this.startNode();\n    const oldInType = this.state.inType;\n    node.params = [];\n    this.state.inType = true;\n    this.expectRelational(\"<\");\n    const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n    this.state.noAnonFunctionType = false;\n\n    while (!this.isRelational(\">\")) {\n      node.params.push(this.flowParseType());\n\n      if (!this.isRelational(\">\")) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    this.state.noAnonFunctionType = oldNoAnonFunctionType;\n    this.expectRelational(\">\");\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterInstantiation\");\n  }\n\n  flowParseTypeParameterInstantiationCallOrNew() {\n    const node = this.startNode();\n    const oldInType = this.state.inType;\n    node.params = [];\n    this.state.inType = true;\n    this.expectRelational(\"<\");\n\n    while (!this.isRelational(\">\")) {\n      node.params.push(this.flowParseTypeOrImplicitInstantiation());\n\n      if (!this.isRelational(\">\")) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    this.expectRelational(\">\");\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterInstantiation\");\n  }\n\n  flowParseInterfaceType() {\n    const node = this.startNode();\n    this.expectContextual(\"interface\");\n    node.extends = [];\n\n    if (this.eat(types$1._extends)) {\n      do {\n        node.extends.push(this.flowParseInterfaceExtends());\n      } while (this.eat(types$1.comma));\n    }\n\n    node.body = this.flowParseObjectType({\n      allowStatic: false,\n      allowExact: false,\n      allowSpread: false,\n      allowProto: false,\n      allowInexact: false\n    });\n    return this.finishNode(node, \"InterfaceTypeAnnotation\");\n  }\n\n  flowParseObjectPropertyKey() {\n    return this.match(types$1.num) || this.match(types$1.string) ? this.parseExprAtom() : this.parseIdentifier(true);\n  }\n\n  flowParseObjectTypeIndexer(node, isStatic, variance) {\n    node.static = isStatic;\n\n    if (this.lookahead().type === types$1.colon) {\n      node.id = this.flowParseObjectPropertyKey();\n      node.key = this.flowParseTypeInitialiser();\n    } else {\n      node.id = null;\n      node.key = this.flowParseType();\n    }\n\n    this.expect(types$1.bracketR);\n    node.value = this.flowParseTypeInitialiser();\n    node.variance = variance;\n    return this.finishNode(node, \"ObjectTypeIndexer\");\n  }\n\n  flowParseObjectTypeInternalSlot(node, isStatic) {\n    node.static = isStatic;\n    node.id = this.flowParseObjectPropertyKey();\n    this.expect(types$1.bracketR);\n    this.expect(types$1.bracketR);\n\n    if (this.isRelational(\"<\") || this.match(types$1.parenL)) {\n      node.method = true;\n      node.optional = false;\n      node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n    } else {\n      node.method = false;\n\n      if (this.eat(types$1.question)) {\n        node.optional = true;\n      }\n\n      node.value = this.flowParseTypeInitialiser();\n    }\n\n    return this.finishNode(node, \"ObjectTypeInternalSlot\");\n  }\n\n  flowParseObjectTypeMethodish(node) {\n    node.params = [];\n    node.rest = null;\n    node.typeParameters = null;\n    node.this = null;\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    this.expect(types$1.parenL);\n\n    if (this.match(types$1._this)) {\n      node.this = this.flowParseFunctionTypeParam(true);\n      node.this.name = null;\n\n      if (!this.match(types$1.parenR)) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    while (!this.match(types$1.parenR) && !this.match(types$1.ellipsis)) {\n      node.params.push(this.flowParseFunctionTypeParam(false));\n\n      if (!this.match(types$1.parenR)) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    if (this.eat(types$1.ellipsis)) {\n      node.rest = this.flowParseFunctionTypeParam(false);\n    }\n\n    this.expect(types$1.parenR);\n    node.returnType = this.flowParseTypeInitialiser();\n    return this.finishNode(node, \"FunctionTypeAnnotation\");\n  }\n\n  flowParseObjectTypeCallProperty(node, isStatic) {\n    const valueNode = this.startNode();\n    node.static = isStatic;\n    node.value = this.flowParseObjectTypeMethodish(valueNode);\n    return this.finishNode(node, \"ObjectTypeCallProperty\");\n  }\n\n  flowParseObjectType({\n    allowStatic,\n    allowExact,\n    allowSpread,\n    allowProto,\n    allowInexact\n  }) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    const nodeStart = this.startNode();\n    nodeStart.callProperties = [];\n    nodeStart.properties = [];\n    nodeStart.indexers = [];\n    nodeStart.internalSlots = [];\n    let endDelim;\n    let exact;\n    let inexact = false;\n\n    if (allowExact && this.match(types$1.braceBarL)) {\n      this.expect(types$1.braceBarL);\n      endDelim = types$1.braceBarR;\n      exact = true;\n    } else {\n      this.expect(types$1.braceL);\n      endDelim = types$1.braceR;\n      exact = false;\n    }\n\n    nodeStart.exact = exact;\n\n    while (!this.match(endDelim)) {\n      let isStatic = false;\n      let protoStart = null;\n      let inexactStart = null;\n      const node = this.startNode();\n\n      if (allowProto && this.isContextual(\"proto\")) {\n        const lookahead = this.lookahead();\n\n        if (lookahead.type !== types$1.colon && lookahead.type !== types$1.question) {\n          this.next();\n          protoStart = this.state.start;\n          allowStatic = false;\n        }\n      }\n\n      if (allowStatic && this.isContextual(\"static\")) {\n        const lookahead = this.lookahead();\n\n        if (lookahead.type !== types$1.colon && lookahead.type !== types$1.question) {\n          this.next();\n          isStatic = true;\n        }\n      }\n\n      const variance = this.flowParseVariance();\n\n      if (this.eat(types$1.bracketL)) {\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (this.eat(types$1.bracketL)) {\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n\n          nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));\n        } else {\n          nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));\n        }\n      } else if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (variance) {\n          this.unexpected(variance.start);\n        }\n\n        nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));\n      } else {\n        let kind = \"init\";\n\n        if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type === types$1.name || lookahead.type === types$1.string || lookahead.type === types$1.num) {\n            kind = this.state.value;\n            this.next();\n          }\n        }\n\n        const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);\n\n        if (propOrInexact === null) {\n          inexact = true;\n          inexactStart = this.state.lastTokStart;\n        } else {\n          nodeStart.properties.push(propOrInexact);\n        }\n      }\n\n      this.flowObjectTypeSemicolon();\n\n      if (inexactStart && !this.match(types$1.braceR) && !this.match(types$1.braceBarR)) {\n        this.raise(inexactStart, FlowErrors.UnexpectedExplicitInexactInObject);\n      }\n    }\n\n    this.expect(endDelim);\n\n    if (allowSpread) {\n      nodeStart.inexact = inexact;\n    }\n\n    const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n    this.state.inType = oldInType;\n    return out;\n  }\n\n  flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact) {\n    if (this.eat(types$1.ellipsis)) {\n      const isInexactToken = this.match(types$1.comma) || this.match(types$1.semi) || this.match(types$1.braceR) || this.match(types$1.braceBarR);\n\n      if (isInexactToken) {\n        if (!allowSpread) {\n          this.raise(this.state.lastTokStart, FlowErrors.InexactInsideNonObject);\n        } else if (!allowInexact) {\n          this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);\n        }\n\n        if (variance) {\n          this.raise(variance.start, FlowErrors.InexactVariance);\n        }\n\n        return null;\n      }\n\n      if (!allowSpread) {\n        this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);\n      }\n\n      if (protoStart != null) {\n        this.unexpected(protoStart);\n      }\n\n      if (variance) {\n        this.raise(variance.start, FlowErrors.SpreadVariance);\n      }\n\n      node.argument = this.flowParseType();\n      return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n    } else {\n      node.key = this.flowParseObjectPropertyKey();\n      node.static = isStatic;\n      node.proto = protoStart != null;\n      node.kind = kind;\n      let optional = false;\n\n      if (this.isRelational(\"<\") || this.match(types$1.parenL)) {\n        node.method = true;\n\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (variance) {\n          this.unexpected(variance.start);\n        }\n\n        node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n\n        if (kind === \"get\" || kind === \"set\") {\n          this.flowCheckGetterSetterParams(node);\n        }\n\n        if (!allowSpread && node.key.name === \"constructor\" && node.value.this) {\n          this.raise(node.value.this.start, FlowErrors.ThisParamBannedInConstructor);\n        }\n      } else {\n        if (kind !== \"init\") this.unexpected();\n        node.method = false;\n\n        if (this.eat(types$1.question)) {\n          optional = true;\n        }\n\n        node.value = this.flowParseTypeInitialiser();\n        node.variance = variance;\n      }\n\n      node.optional = optional;\n      return this.finishNode(node, \"ObjectTypeProperty\");\n    }\n  }\n\n  flowCheckGetterSetterParams(property) {\n    const paramCount = property.kind === \"get\" ? 0 : 1;\n    const start = property.start;\n    const length = property.value.params.length + (property.value.rest ? 1 : 0);\n\n    if (property.value.this) {\n      this.raise(property.value.this.start, property.kind === \"get\" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam);\n    }\n\n    if (length !== paramCount) {\n      if (property.kind === \"get\") {\n        this.raise(start, ErrorMessages.BadGetterArity);\n      } else {\n        this.raise(start, ErrorMessages.BadSetterArity);\n      }\n    }\n\n    if (property.kind === \"set\" && property.value.rest) {\n      this.raise(start, ErrorMessages.BadSetterRestParameter);\n    }\n  }\n\n  flowObjectTypeSemicolon() {\n    if (!this.eat(types$1.semi) && !this.eat(types$1.comma) && !this.match(types$1.braceR) && !this.match(types$1.braceBarR)) {\n      this.unexpected();\n    }\n  }\n\n  flowParseQualifiedTypeIdentifier(startPos, startLoc, id) {\n    startPos = startPos || this.state.start;\n    startLoc = startLoc || this.state.startLoc;\n    let node = id || this.flowParseRestrictedIdentifier(true);\n\n    while (this.eat(types$1.dot)) {\n      const node2 = this.startNodeAt(startPos, startLoc);\n      node2.qualification = node;\n      node2.id = this.flowParseRestrictedIdentifier(true);\n      node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n    }\n\n    return node;\n  }\n\n  flowParseGenericType(startPos, startLoc, id) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.typeParameters = null;\n    node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterInstantiation();\n    }\n\n    return this.finishNode(node, \"GenericTypeAnnotation\");\n  }\n\n  flowParseTypeofType() {\n    const node = this.startNode();\n    this.expect(types$1._typeof);\n    node.argument = this.flowParsePrimaryType();\n    return this.finishNode(node, \"TypeofTypeAnnotation\");\n  }\n\n  flowParseTupleType() {\n    const node = this.startNode();\n    node.types = [];\n    this.expect(types$1.bracketL);\n\n    while (this.state.pos < this.length && !this.match(types$1.bracketR)) {\n      node.types.push(this.flowParseType());\n      if (this.match(types$1.bracketR)) break;\n      this.expect(types$1.comma);\n    }\n\n    this.expect(types$1.bracketR);\n    return this.finishNode(node, \"TupleTypeAnnotation\");\n  }\n\n  flowParseFunctionTypeParam(first) {\n    let name = null;\n    let optional = false;\n    let typeAnnotation = null;\n    const node = this.startNode();\n    const lh = this.lookahead();\n    const isThis = this.state.type === types$1._this;\n\n    if (lh.type === types$1.colon || lh.type === types$1.question) {\n      if (isThis && !first) {\n        this.raise(node.start, FlowErrors.ThisParamMustBeFirst);\n      }\n\n      name = this.parseIdentifier(isThis);\n\n      if (this.eat(types$1.question)) {\n        optional = true;\n\n        if (isThis) {\n          this.raise(node.start, FlowErrors.ThisParamMayNotBeOptional);\n        }\n      }\n\n      typeAnnotation = this.flowParseTypeInitialiser();\n    } else {\n      typeAnnotation = this.flowParseType();\n    }\n\n    node.name = name;\n    node.optional = optional;\n    node.typeAnnotation = typeAnnotation;\n    return this.finishNode(node, \"FunctionTypeParam\");\n  }\n\n  reinterpretTypeAsFunctionTypeParam(type) {\n    const node = this.startNodeAt(type.start, type.loc.start);\n    node.name = null;\n    node.optional = false;\n    node.typeAnnotation = type;\n    return this.finishNode(node, \"FunctionTypeParam\");\n  }\n\n  flowParseFunctionTypeParams(params = []) {\n    let rest = null;\n    let _this = null;\n\n    if (this.match(types$1._this)) {\n      _this = this.flowParseFunctionTypeParam(true);\n      _this.name = null;\n\n      if (!this.match(types$1.parenR)) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    while (!this.match(types$1.parenR) && !this.match(types$1.ellipsis)) {\n      params.push(this.flowParseFunctionTypeParam(false));\n\n      if (!this.match(types$1.parenR)) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    if (this.eat(types$1.ellipsis)) {\n      rest = this.flowParseFunctionTypeParam(false);\n    }\n\n    return {\n      params,\n      rest,\n      _this\n    };\n  }\n\n  flowIdentToTypeAnnotation(startPos, startLoc, node, id) {\n    switch (id.name) {\n      case \"any\":\n        return this.finishNode(node, \"AnyTypeAnnotation\");\n\n      case \"bool\":\n      case \"boolean\":\n        return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n      case \"mixed\":\n        return this.finishNode(node, \"MixedTypeAnnotation\");\n\n      case \"empty\":\n        return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n      case \"number\":\n        return this.finishNode(node, \"NumberTypeAnnotation\");\n\n      case \"string\":\n        return this.finishNode(node, \"StringTypeAnnotation\");\n\n      case \"symbol\":\n        return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n      default:\n        this.checkNotUnderscore(id.name);\n        return this.flowParseGenericType(startPos, startLoc, id);\n    }\n  }\n\n  flowParsePrimaryType() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const node = this.startNode();\n    let tmp;\n    let type;\n    let isGroupedType = false;\n    const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n    switch (this.state.type) {\n      case types$1.name:\n        if (this.isContextual(\"interface\")) {\n          return this.flowParseInterfaceType();\n        }\n\n        return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdentifier());\n\n      case types$1.braceL:\n        return this.flowParseObjectType({\n          allowStatic: false,\n          allowExact: false,\n          allowSpread: true,\n          allowProto: false,\n          allowInexact: true\n        });\n\n      case types$1.braceBarL:\n        return this.flowParseObjectType({\n          allowStatic: false,\n          allowExact: true,\n          allowSpread: true,\n          allowProto: false,\n          allowInexact: false\n        });\n\n      case types$1.bracketL:\n        this.state.noAnonFunctionType = false;\n        type = this.flowParseTupleType();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n        return type;\n\n      case types$1.relational:\n        if (this.state.value === \"<\") {\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(types$1.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(types$1.parenR);\n          this.expect(types$1.arrow);\n          node.returnType = this.flowParseType();\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        break;\n\n      case types$1.parenL:\n        this.next();\n\n        if (!this.match(types$1.parenR) && !this.match(types$1.ellipsis)) {\n          if (this.match(types$1.name) || this.match(types$1._this)) {\n            const token = this.lookahead().type;\n            isGroupedType = token !== types$1.question && token !== types$1.colon;\n          } else {\n            isGroupedType = true;\n          }\n        }\n\n        if (isGroupedType) {\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.state.noAnonFunctionType || !(this.match(types$1.comma) || this.match(types$1.parenR) && this.lookahead().type === types$1.arrow)) {\n            this.expect(types$1.parenR);\n            return type;\n          } else {\n            this.eat(types$1.comma);\n          }\n        }\n\n        if (type) {\n          tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);\n        } else {\n          tmp = this.flowParseFunctionTypeParams();\n        }\n\n        node.params = tmp.params;\n        node.rest = tmp.rest;\n        node.this = tmp._this;\n        this.expect(types$1.parenR);\n        this.expect(types$1.arrow);\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n      case types$1.string:\n        return this.parseLiteral(this.state.value, \"StringLiteralTypeAnnotation\");\n\n      case types$1._true:\n      case types$1._false:\n        node.value = this.match(types$1._true);\n        this.next();\n        return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n\n      case types$1.plusMin:\n        if (this.state.value === \"-\") {\n          this.next();\n\n          if (this.match(types$1.num)) {\n            return this.parseLiteralAtNode(-this.state.value, \"NumberLiteralTypeAnnotation\", node);\n          }\n\n          if (this.match(types$1.bigint)) {\n            return this.parseLiteralAtNode(-this.state.value, \"BigIntLiteralTypeAnnotation\", node);\n          }\n\n          throw this.raise(this.state.start, FlowErrors.UnexpectedSubtractionOperand);\n        }\n\n        throw this.unexpected();\n\n      case types$1.num:\n        return this.parseLiteral(this.state.value, \"NumberLiteralTypeAnnotation\");\n\n      case types$1.bigint:\n        return this.parseLiteral(this.state.value, \"BigIntLiteralTypeAnnotation\");\n\n      case types$1._void:\n        this.next();\n        return this.finishNode(node, \"VoidTypeAnnotation\");\n\n      case types$1._null:\n        this.next();\n        return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n      case types$1._this:\n        this.next();\n        return this.finishNode(node, \"ThisTypeAnnotation\");\n\n      case types$1.star:\n        this.next();\n        return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n      default:\n        if (this.state.type.keyword === \"typeof\") {\n          return this.flowParseTypeofType();\n        } else if (this.state.type.keyword) {\n          const label = this.state.type.label;\n          this.next();\n          return super.createIdentifier(node, label);\n        }\n\n    }\n\n    throw this.unexpected();\n  }\n\n  flowParsePostfixType() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let type = this.flowParsePrimaryType();\n    let seenOptionalIndexedAccess = false;\n\n    while ((this.match(types$1.bracketL) || this.match(types$1.questionDot)) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const optional = this.eat(types$1.questionDot);\n      seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n      this.expect(types$1.bracketL);\n\n      if (!optional && this.match(types$1.bracketR)) {\n        node.elementType = type;\n        this.next();\n        type = this.finishNode(node, \"ArrayTypeAnnotation\");\n      } else {\n        node.objectType = type;\n        node.indexType = this.flowParseType();\n        this.expect(types$1.bracketR);\n\n        if (seenOptionalIndexedAccess) {\n          node.optional = optional;\n          type = this.finishNode(node, \"OptionalIndexedAccessType\");\n        } else {\n          type = this.finishNode(node, \"IndexedAccessType\");\n        }\n      }\n    }\n\n    return type;\n  }\n\n  flowParsePrefixType() {\n    const node = this.startNode();\n\n    if (this.eat(types$1.question)) {\n      node.typeAnnotation = this.flowParsePrefixType();\n      return this.finishNode(node, \"NullableTypeAnnotation\");\n    } else {\n      return this.flowParsePostfixType();\n    }\n  }\n\n  flowParseAnonFunctionWithoutParens() {\n    const param = this.flowParsePrefixType();\n\n    if (!this.state.noAnonFunctionType && this.eat(types$1.arrow)) {\n      const node = this.startNodeAt(param.start, param.loc.start);\n      node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n      node.rest = null;\n      node.this = null;\n      node.returnType = this.flowParseType();\n      node.typeParameters = null;\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    return param;\n  }\n\n  flowParseIntersectionType() {\n    const node = this.startNode();\n    this.eat(types$1.bitwiseAND);\n    const type = this.flowParseAnonFunctionWithoutParens();\n    node.types = [type];\n\n    while (this.eat(types$1.bitwiseAND)) {\n      node.types.push(this.flowParseAnonFunctionWithoutParens());\n    }\n\n    return node.types.length === 1 ? type : this.finishNode(node, \"IntersectionTypeAnnotation\");\n  }\n\n  flowParseUnionType() {\n    const node = this.startNode();\n    this.eat(types$1.bitwiseOR);\n    const type = this.flowParseIntersectionType();\n    node.types = [type];\n\n    while (this.eat(types$1.bitwiseOR)) {\n      node.types.push(this.flowParseIntersectionType());\n    }\n\n    return node.types.length === 1 ? type : this.finishNode(node, \"UnionTypeAnnotation\");\n  }\n\n  flowParseType() {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    const type = this.flowParseUnionType();\n    this.state.inType = oldInType;\n    return type;\n  }\n\n  flowParseTypeOrImplicitInstantiation() {\n    if (this.state.type === types$1.name && this.state.value === \"_\") {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const node = this.parseIdentifier();\n      return this.flowParseGenericType(startPos, startLoc, node);\n    } else {\n      return this.flowParseType();\n    }\n  }\n\n  flowParseTypeAnnotation() {\n    const node = this.startNode();\n    node.typeAnnotation = this.flowParseTypeInitialiser();\n    return this.finishNode(node, \"TypeAnnotation\");\n  }\n\n  flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {\n    const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();\n\n    if (this.match(types$1.colon)) {\n      ident.typeAnnotation = this.flowParseTypeAnnotation();\n      this.resetEndLocation(ident);\n    }\n\n    return ident;\n  }\n\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n\n  flowParseVariance() {\n    let variance = null;\n\n    if (this.match(types$1.plusMin)) {\n      variance = this.startNode();\n\n      if (this.state.value === \"+\") {\n        variance.kind = \"plus\";\n      } else {\n        variance.kind = \"minus\";\n      }\n\n      this.next();\n      this.finishNode(variance, \"Variance\");\n    }\n\n    return variance;\n  }\n\n  parseFunctionBody(node, allowExpressionBody, isMethod = false) {\n    if (allowExpressionBody) {\n      return this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));\n    }\n\n    return super.parseFunctionBody(node, false, isMethod);\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(types$1.colon)) {\n      const typeNode = this.startNode();\n      [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n      node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, \"TypeAnnotation\") : null;\n    }\n\n    super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n\n  parseStatement(context, topLevel) {\n    if (this.state.strict && this.match(types$1.name) && this.state.value === \"interface\") {\n      const lookahead = this.lookahead();\n\n      if (lookahead.type === types$1.name || isKeyword(lookahead.value)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseInterface(node);\n      }\n    } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n      const node = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(node);\n    }\n\n    const stmt = super.parseStatement(context, topLevel);\n\n    if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n      this.flowPragma = null;\n    }\n\n    return stmt;\n  }\n\n  parseExpressionStatement(node, expr) {\n    if (expr.type === \"Identifier\") {\n      if (expr.name === \"declare\") {\n        if (this.match(types$1._class) || this.match(types$1.name) || this.match(types$1._function) || this.match(types$1._var) || this.match(types$1._export)) {\n          return this.flowParseDeclare(node);\n        }\n      } else if (this.match(types$1.name)) {\n        if (expr.name === \"interface\") {\n          return this.flowParseInterface(node);\n        } else if (expr.name === \"type\") {\n          return this.flowParseTypeAlias(node);\n        } else if (expr.name === \"opaque\") {\n          return this.flowParseOpaqueType(node, false);\n        }\n      }\n    }\n\n    return super.parseExpressionStatement(node, expr);\n  }\n\n  shouldParseExportDeclaration() {\n    return this.isContextual(\"type\") || this.isContextual(\"interface\") || this.isContextual(\"opaque\") || this.shouldParseEnums() && this.isContextual(\"enum\") || super.shouldParseExportDeclaration();\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.match(types$1.name) && (this.state.value === \"type\" || this.state.value === \"interface\" || this.state.value === \"opaque\" || this.shouldParseEnums() && this.state.value === \"enum\")) {\n      return false;\n    }\n\n    return super.isExportDefaultSpecifier();\n  }\n\n  parseExportDefaultExpression() {\n    if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n      const node = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(node);\n    }\n\n    return super.parseExportDefaultExpression();\n  }\n\n  parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n    if (!this.match(types$1.question)) return expr;\n\n    if (this.state.maybeInArrowParameters) {\n      const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n      if (!result.node) {\n        if (result.error) {\n          super.setOptionalParametersError(refExpressionErrors, result.error);\n        }\n\n        return expr;\n      }\n\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    this.expect(types$1.question);\n    const state = this.state.clone();\n    const originalNoArrowAt = this.state.noArrowAt;\n    const node = this.startNodeAt(startPos, startLoc);\n    let {\n      consequent,\n      failed\n    } = this.tryParseConditionalConsequent();\n    let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n    if (failed || invalid.length > 0) {\n      const noArrowAt = [...originalNoArrowAt];\n\n      if (invalid.length > 0) {\n        this.state = state;\n        this.state.noArrowAt = noArrowAt;\n\n        for (let i = 0; i < invalid.length; i++) {\n          noArrowAt.push(invalid[i].start);\n        }\n\n        ({\n          consequent,\n          failed\n        } = this.tryParseConditionalConsequent());\n        [valid, invalid] = this.getArrowLikeExpressions(consequent);\n      }\n\n      if (failed && valid.length > 1) {\n        this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);\n      }\n\n      if (failed && valid.length === 1) {\n        this.state = state;\n        this.state.noArrowAt = noArrowAt.concat(valid[0].start);\n        ({\n          consequent,\n          failed\n        } = this.tryParseConditionalConsequent());\n      }\n    }\n\n    this.getArrowLikeExpressions(consequent, true);\n    this.state.noArrowAt = originalNoArrowAt;\n    this.expect(types$1.colon);\n    node.test = expr;\n    node.consequent = consequent;\n    node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));\n    return this.finishNode(node, \"ConditionalExpression\");\n  }\n\n  tryParseConditionalConsequent() {\n    this.state.noArrowParamsConversionAt.push(this.state.start);\n    const consequent = this.parseMaybeAssignAllowIn();\n    const failed = !this.match(types$1.colon);\n    this.state.noArrowParamsConversionAt.pop();\n    return {\n      consequent,\n      failed\n    };\n  }\n\n  getArrowLikeExpressions(node, disallowInvalid) {\n    const stack = [node];\n    const arrows = [];\n\n    while (stack.length !== 0) {\n      const node = stack.pop();\n\n      if (node.type === \"ArrowFunctionExpression\") {\n        if (node.typeParameters || !node.returnType) {\n          this.finishArrowValidation(node);\n        } else {\n          arrows.push(node);\n        }\n\n        stack.push(node.body);\n      } else if (node.type === \"ConditionalExpression\") {\n        stack.push(node.consequent);\n        stack.push(node.alternate);\n      }\n    }\n\n    if (disallowInvalid) {\n      arrows.forEach(node => this.finishArrowValidation(node));\n      return [arrows, []];\n    }\n\n    return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));\n  }\n\n  finishArrowValidation(node) {\n    var _node$extra;\n\n    this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingComma, false);\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    super.checkParams(node, false, true);\n    this.scope.exit();\n  }\n\n  forwardNoArrowParamsConversionAt(node, parse) {\n    let result;\n\n    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n      result = parse();\n      this.state.noArrowParamsConversionAt.pop();\n    } else {\n      result = parse();\n    }\n\n    return result;\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    node = super.parseParenItem(node, startPos, startLoc);\n\n    if (this.eat(types$1.question)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n\n    if (this.match(types$1.colon)) {\n      const typeCastNode = this.startNodeAt(startPos, startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TypeCastExpression\");\n    }\n\n    return node;\n  }\n\n  assertModuleNodeAllowed(node) {\n    if (node.type === \"ImportDeclaration\" && (node.importKind === \"type\" || node.importKind === \"typeof\") || node.type === \"ExportNamedDeclaration\" && node.exportKind === \"type\" || node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\") {\n      return;\n    }\n\n    super.assertModuleNodeAllowed(node);\n  }\n\n  parseExport(node) {\n    const decl = super.parseExport(node);\n\n    if (decl.type === \"ExportNamedDeclaration\" || decl.type === \"ExportAllDeclaration\") {\n      decl.exportKind = decl.exportKind || \"value\";\n    }\n\n    return decl;\n  }\n\n  parseExportDeclaration(node) {\n    if (this.isContextual(\"type\")) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n\n      if (this.match(types$1.braceL)) {\n        node.specifiers = this.parseExportSpecifiers();\n        this.parseExportFrom(node);\n        return null;\n      } else {\n        return this.flowParseTypeAlias(declarationNode);\n      }\n    } else if (this.isContextual(\"opaque\")) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseOpaqueType(declarationNode, false);\n    } else if (this.isContextual(\"interface\")) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseInterface(declarationNode);\n    } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n      node.exportKind = \"value\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(declarationNode);\n    } else {\n      return super.parseExportDeclaration(node);\n    }\n  }\n\n  eatExportStar(node) {\n    if (super.eatExportStar(...arguments)) return true;\n\n    if (this.isContextual(\"type\") && this.lookahead().type === types$1.star) {\n      node.exportKind = \"type\";\n      this.next();\n      this.next();\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node) {\n    const pos = this.state.start;\n    const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n\n    if (hasNamespace && node.exportKind === \"type\") {\n      this.unexpected(pos);\n    }\n\n    return hasNamespace;\n  }\n\n  parseClassId(node, isStatement, optionalId) {\n    super.parseClassId(node, isStatement, optionalId);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n  }\n\n  parseClassMember(classBody, member, state) {\n    const pos = this.state.start;\n\n    if (this.isContextual(\"declare\")) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n\n      member.declare = true;\n    }\n\n    super.parseClassMember(classBody, member, state);\n\n    if (member.declare) {\n      if (member.type !== \"ClassProperty\" && member.type !== \"ClassPrivateProperty\" && member.type !== \"PropertyDefinition\") {\n          this.raise(pos, FlowErrors.DeclareClassElement);\n        } else if (member.value) {\n        this.raise(member.value.start, FlowErrors.DeclareClassFieldInitializer);\n      }\n    }\n  }\n\n  isIterator(word) {\n    return word === \"iterator\" || word === \"asyncIterator\";\n  }\n\n  readIterator() {\n    const word = super.readWord1();\n    const fullWord = \"@@\" + word;\n\n    if (!this.isIterator(word) || !this.state.inType) {\n      this.raise(this.state.pos, ErrorMessages.InvalidIdentifier, fullWord);\n    }\n\n    this.finishToken(types$1.name, fullWord);\n  }\n\n  getTokenFromCode(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 123 && next === 124) {\n      return this.finishOp(types$1.braceBarL, 2);\n    } else if (this.state.inType && (code === 62 || code === 60)) {\n      return this.finishOp(types$1.relational, 1);\n    } else if (this.state.inType && code === 63) {\n      if (next === 46) {\n        return this.finishOp(types$1.questionDot, 2);\n      }\n\n      return this.finishOp(types$1.question, 1);\n    } else if (isIteratorStart(code, next)) {\n      this.state.pos += 2;\n      return this.readIterator();\n    } else {\n      return super.getTokenFromCode(code);\n    }\n  }\n\n  isAssignable(node, isBinding) {\n    if (node.type === \"TypeCastExpression\") {\n      return this.isAssignable(node.expression, isBinding);\n    } else {\n      return super.isAssignable(node, isBinding);\n    }\n  }\n\n  toAssignable(node, isLHS = false) {\n    if (node.type === \"TypeCastExpression\") {\n      return super.toAssignable(this.typeCastToParameter(node), isLHS);\n    } else {\n      return super.toAssignable(node, isLHS);\n    }\n  }\n\n  toAssignableList(exprList, trailingCommaPos, isLHS) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n\n      if ((expr == null ? void 0 : expr.type) === \"TypeCastExpression\") {\n        exprList[i] = this.typeCastToParameter(expr);\n      }\n    }\n\n    return super.toAssignableList(exprList, trailingCommaPos, isLHS);\n  }\n\n  toReferencedList(exprList, isParenthesizedExpr) {\n    for (let i = 0; i < exprList.length; i++) {\n      var _expr$extra;\n\n      const expr = exprList[i];\n\n      if (expr && expr.type === \"TypeCastExpression\" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {\n        this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);\n      }\n    }\n\n    return exprList;\n  }\n\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);\n\n    if (canBePattern && !this.state.maybeInArrowParameters) {\n      this.toReferencedList(node.elements);\n    }\n\n    return node;\n  }\n\n  checkLVal(expr, ...args) {\n    if (expr.type !== \"TypeCastExpression\") {\n      return super.checkLVal(expr, ...args);\n    }\n  }\n\n  parseClassProperty(node) {\n    if (this.match(types$1.colon)) {\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n    }\n\n    return super.parseClassProperty(node);\n  }\n\n  parseClassPrivateProperty(node) {\n    if (this.match(types$1.colon)) {\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n    }\n\n    return super.parseClassPrivateProperty(node);\n  }\n\n  isClassMethod() {\n    return this.isRelational(\"<\") || super.isClassMethod();\n  }\n\n  isClassProperty() {\n    return this.match(types$1.colon) || super.isClassProperty();\n  }\n\n  isNonstaticConstructor(method) {\n    return !this.match(types$1.colon) && super.isNonstaticConstructor(method);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    if (method.variance) {\n      this.unexpected(method.variance.start);\n    }\n\n    delete method.variance;\n\n    if (this.isRelational(\"<\")) {\n      method.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n\n    if (method.params && isConstructor) {\n      const params = method.params;\n\n      if (params.length > 0 && this.isThisParam(params[0])) {\n        this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n      }\n    } else if (method.type === \"MethodDefinition\" && isConstructor && method.value.params) {\n      const params = method.value.params;\n\n      if (params.length > 0 && this.isThisParam(params[0])) {\n        this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n      }\n    }\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    if (method.variance) {\n      this.unexpected(method.variance.start);\n    }\n\n    delete method.variance;\n\n    if (this.isRelational(\"<\")) {\n      method.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n\n    if (node.superClass && this.isRelational(\"<\")) {\n      node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n    }\n\n    if (this.isContextual(\"implements\")) {\n      this.next();\n      const implemented = node.implements = [];\n\n      do {\n        const node = this.startNode();\n        node.id = this.flowParseRestrictedIdentifier(true);\n\n        if (this.isRelational(\"<\")) {\n          node.typeParameters = this.flowParseTypeParameterInstantiation();\n        } else {\n          node.typeParameters = null;\n        }\n\n        implemented.push(this.finishNode(node, \"ClassImplements\"));\n      } while (this.eat(types$1.comma));\n    }\n  }\n\n  checkGetterSetterParams(method) {\n    super.checkGetterSetterParams(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length > 0) {\n      const param = params[0];\n\n      if (this.isThisParam(param) && method.kind === \"get\") {\n        this.raise(param.start, FlowErrors.GetterMayNotHaveThisParam);\n      } else if (this.isThisParam(param)) {\n        this.raise(param.start, FlowErrors.SetterMayNotHaveThisParam);\n      }\n    }\n  }\n\n  parsePropertyName(node, isPrivateNameAllowed) {\n    const variance = this.flowParseVariance();\n    const key = super.parsePropertyName(node, isPrivateNameAllowed);\n    node.variance = variance;\n    return key;\n  }\n\n  parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    if (prop.variance) {\n      this.unexpected(prop.variance.start);\n    }\n\n    delete prop.variance;\n    let typeParameters;\n\n    if (this.isRelational(\"<\") && !isAccessor) {\n      typeParameters = this.flowParseTypeParameterDeclaration();\n      if (!this.match(types$1.parenL)) this.unexpected();\n    }\n\n    super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n\n    if (typeParameters) {\n      (prop.value || prop).typeParameters = typeParameters;\n    }\n  }\n\n  parseAssignableListItemTypes(param) {\n    if (this.eat(types$1.question)) {\n      if (param.type !== \"Identifier\") {\n        this.raise(param.start, FlowErrors.OptionalBindingPattern);\n      }\n\n      if (this.isThisParam(param)) {\n        this.raise(param.start, FlowErrors.ThisParamMayNotBeOptional);\n      }\n\n      param.optional = true;\n    }\n\n    if (this.match(types$1.colon)) {\n      param.typeAnnotation = this.flowParseTypeAnnotation();\n    } else if (this.isThisParam(param)) {\n      this.raise(param.start, FlowErrors.ThisParamAnnotationRequired);\n    }\n\n    if (this.match(types$1.eq) && this.isThisParam(param)) {\n      this.raise(param.start, FlowErrors.ThisParamNoDefault);\n    }\n\n    this.resetEndLocation(param);\n    return param;\n  }\n\n  parseMaybeDefault(startPos, startLoc, left) {\n    const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);\n    }\n\n    return node;\n  }\n\n  shouldParseDefaultImport(node) {\n    if (!hasTypeImportKind(node)) {\n      return super.shouldParseDefaultImport(node);\n    }\n\n    return isMaybeDefaultImport(this.state);\n  }\n\n  parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n    specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();\n    this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  maybeParseDefaultImportSpecifier(node) {\n    node.importKind = \"value\";\n    let kind = null;\n\n    if (this.match(types$1._typeof)) {\n      kind = \"typeof\";\n    } else if (this.isContextual(\"type\")) {\n      kind = \"type\";\n    }\n\n    if (kind) {\n      const lh = this.lookahead();\n\n      if (kind === \"type\" && lh.type === types$1.star) {\n        this.unexpected(lh.start);\n      }\n\n      if (isMaybeDefaultImport(lh) || lh.type === types$1.braceL || lh.type === types$1.star) {\n        this.next();\n        node.importKind = kind;\n      }\n    }\n\n    return super.maybeParseDefaultImportSpecifier(node);\n  }\n\n  parseImportSpecifier(node) {\n    const specifier = this.startNode();\n    const firstIdentIsString = this.match(types$1.string);\n    const firstIdent = this.parseModuleExportName();\n    let specifierTypeKind = null;\n\n    if (firstIdent.type === \"Identifier\") {\n      if (firstIdent.name === \"type\") {\n        specifierTypeKind = \"type\";\n      } else if (firstIdent.name === \"typeof\") {\n        specifierTypeKind = \"typeof\";\n      }\n    }\n\n    let isBinding = false;\n\n    if (this.isContextual(\"as\") && !this.isLookaheadContextual(\"as\")) {\n      const as_ident = this.parseIdentifier(true);\n\n      if (specifierTypeKind !== null && !this.match(types$1.name) && !this.state.type.keyword) {\n        specifier.imported = as_ident;\n        specifier.importKind = specifierTypeKind;\n        specifier.local = cloneIdentifier(as_ident);\n      } else {\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n        specifier.local = this.parseIdentifier();\n      }\n    } else if (specifierTypeKind !== null && (this.match(types$1.name) || this.state.type.keyword)) {\n      specifier.imported = this.parseIdentifier(true);\n      specifier.importKind = specifierTypeKind;\n\n      if (this.eatContextual(\"as\")) {\n        specifier.local = this.parseIdentifier();\n      } else {\n        isBinding = true;\n        specifier.local = cloneIdentifier(specifier.imported);\n      }\n    } else {\n      if (firstIdentIsString) {\n        throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, firstIdent.value);\n      }\n\n      isBinding = true;\n      specifier.imported = firstIdent;\n      specifier.importKind = null;\n      specifier.local = cloneIdentifier(specifier.imported);\n    }\n\n    const nodeIsTypeImport = hasTypeImportKind(node);\n    const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n    if (nodeIsTypeImport && specifierIsTypeImport) {\n      this.raise(specifier.start, FlowErrors.ImportTypeShorthandOnlyInPureImport);\n    }\n\n    if (nodeIsTypeImport || specifierIsTypeImport) {\n      this.checkReservedType(specifier.local.name, specifier.local.start, true);\n    }\n\n    if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {\n      this.checkReservedWord(specifier.local.name, specifier.start, true, true);\n    }\n\n    this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case types$1._this:\n        return this.parseIdentifier(true);\n\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    const kind = node.kind;\n\n    if (kind !== \"get\" && kind !== \"set\" && this.isRelational(\"<\")) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    super.parseFunctionParams(node, allowModifiers);\n  }\n\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n\n    if (this.match(types$1.colon)) {\n      decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n      this.resetEndLocation(decl.id);\n    }\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(types$1.colon)) {\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = true;\n      node.returnType = this.flowParseTypeAnnotation();\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n    }\n\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(types$1.colon) || super.shouldParseAsyncArrow();\n  }\n\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    var _jsx;\n\n    let state = null;\n    let jsx;\n\n    if (this.hasPlugin(\"jsx\") && (this.match(types$1.jsxTagStart) || this.isRelational(\"<\"))) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n      const curContext = context[context.length - 1];\n\n      if (curContext === types.j_oTag) {\n        context.length -= 2;\n      } else if (curContext === types.j_expr) {\n        context.length -= 1;\n      }\n    }\n\n    if ((_jsx = jsx) != null && _jsx.error || this.isRelational(\"<\")) {\n      var _jsx2, _jsx3;\n\n      state = state || this.state.clone();\n      let typeParameters;\n      const arrow = this.tryParse(abort => {\n        var _arrowExpression$extr;\n\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {\n          const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n          this.resetStartLocationFromNode(result, typeParameters);\n          return result;\n        });\n\n        if (arrowExpression.type !== \"ArrowFunctionExpression\" && (_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) {\n          abort();\n        }\n\n        const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n        expr.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(expr, typeParameters);\n        return arrowExpression;\n      }, state);\n      let arrowExpression = null;\n\n      if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === \"ArrowFunctionExpression\") {\n        if (!arrow.error && !arrow.aborted) {\n          if (arrow.node.async) {\n            this.raise(typeParameters.start, FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction);\n          }\n\n          return arrow.node;\n        }\n\n        arrowExpression = arrow.node;\n      }\n\n      if ((_jsx2 = jsx) != null && _jsx2.node) {\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrowExpression) {\n        this.state = arrow.failState;\n        return arrowExpression;\n      }\n\n      if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n      if (arrow.thrown) throw arrow.error;\n      throw this.raise(typeParameters.start, FlowErrors.UnexpectedTokenAfterTypeParameter);\n    }\n\n    return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n  }\n\n  parseArrow(node) {\n    if (this.match(types$1.colon)) {\n      const result = this.tryParse(() => {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        const typeNode = this.startNode();\n        [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n        if (this.canInsertSemicolon()) this.unexpected();\n        if (!this.match(types$1.arrow)) this.unexpected();\n        return typeNode;\n      });\n      if (result.thrown) return null;\n      if (result.error) this.state = result.failState;\n      node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, \"TypeAnnotation\") : null;\n    }\n\n    return super.parseArrow(node);\n  }\n\n  shouldParseArrow(params) {\n    return this.match(types$1.colon) || super.shouldParseArrow(params);\n  }\n\n  setArrowFunctionParameters(node, params) {\n    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      node.params = params;\n    } else {\n      super.setArrowFunctionParameters(node, params);\n    }\n  }\n\n  checkParams(node, allowDuplicates, isArrowFunction) {\n    if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      return;\n    }\n\n    for (let i = 0; i < node.params.length; i++) {\n      if (this.isThisParam(node.params[i]) && i > 0) {\n        this.raise(node.params[i].start, FlowErrors.ThisParamMustBeFirst);\n      }\n    }\n\n    return super.checkParams(...arguments);\n  }\n\n  parseParenAndDistinguishExpression(canBeArrow) {\n    return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);\n  }\n\n  parseSubscripts(base, startPos, startLoc, noCalls) {\n    if (base.type === \"Identifier\" && base.name === \"async\" && this.state.noArrowAt.indexOf(startPos) !== -1) {\n      this.next();\n      const node = this.startNodeAt(startPos, startLoc);\n      node.callee = base;\n      node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n      base = this.finishNode(node, \"CallExpression\");\n    } else if (base.type === \"Identifier\" && base.name === \"async\" && this.isRelational(\"<\")) {\n      const state = this.state.clone();\n      const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startPos, startLoc) || abort(), state);\n      if (!arrow.error && !arrow.aborted) return arrow.node;\n      const result = this.tryParse(() => super.parseSubscripts(base, startPos, startLoc, noCalls), state);\n      if (result.node && !result.error) return result.node;\n\n      if (arrow.node) {\n        this.state = arrow.failState;\n        return arrow.node;\n      }\n\n      if (result.node) {\n        this.state = result.failState;\n        return result.node;\n      }\n\n      throw arrow.error || result.error;\n    }\n\n    return super.parseSubscripts(base, startPos, startLoc, noCalls);\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, subscriptState) {\n    if (this.match(types$1.questionDot) && this.isLookaheadToken_lt()) {\n      subscriptState.optionalChainMember = true;\n\n      if (noCalls) {\n        subscriptState.stop = true;\n        return base;\n      }\n\n      this.next();\n      const node = this.startNodeAt(startPos, startLoc);\n      node.callee = base;\n      node.typeArguments = this.flowParseTypeParameterInstantiation();\n      this.expect(types$1.parenL);\n      node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n      node.optional = true;\n      return this.finishCallExpression(node, true);\n    } else if (!noCalls && this.shouldParseTypes() && this.isRelational(\"<\")) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.callee = base;\n      const result = this.tryParse(() => {\n        node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n        this.expect(types$1.parenL);\n        node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n        if (subscriptState.optionalChainMember) node.optional = false;\n        return this.finishCallExpression(node, subscriptState.optionalChainMember);\n      });\n\n      if (result.node) {\n        if (result.error) this.state = result.failState;\n        return result.node;\n      }\n    }\n\n    return super.parseSubscript(base, startPos, startLoc, noCalls, subscriptState);\n  }\n\n  parseNewArguments(node) {\n    let targs = null;\n\n    if (this.shouldParseTypes() && this.isRelational(\"<\")) {\n      targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;\n    }\n\n    node.typeArguments = targs;\n    super.parseNewArguments(node);\n  }\n\n  parseAsyncArrowWithTypeParameters(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    this.parseFunctionParams(node);\n    if (!this.parseArrow(node)) return;\n    return this.parseArrowExpression(node, undefined, true);\n  }\n\n  readToken_mult_modulo(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 42 && next === 47 && this.state.hasFlowComment) {\n      this.state.hasFlowComment = false;\n      this.state.pos += 2;\n      this.nextToken();\n      return;\n    }\n\n    super.readToken_mult_modulo(code);\n  }\n\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 124 && next === 125) {\n      this.finishOp(types$1.braceBarR, 2);\n      return;\n    }\n\n    super.readToken_pipe_amp(code);\n  }\n\n  parseTopLevel(file, program) {\n    const fileNode = super.parseTopLevel(file, program);\n\n    if (this.state.hasFlowComment) {\n      this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);\n    }\n\n    return fileNode;\n  }\n\n  skipBlockComment() {\n    if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n      if (this.state.hasFlowComment) {\n        this.unexpected(null, FlowErrors.NestedFlowComment);\n      }\n\n      this.hasFlowCommentCompletion();\n      this.state.pos += this.skipFlowComment();\n      this.state.hasFlowComment = true;\n      return;\n    }\n\n    if (this.state.hasFlowComment) {\n      const end = this.input.indexOf(\"*-/\", this.state.pos += 2);\n\n      if (end === -1) {\n        throw this.raise(this.state.pos - 2, ErrorMessages.UnterminatedComment);\n      }\n\n      this.state.pos = end + 3;\n      return;\n    }\n\n    return super.skipBlockComment();\n  }\n\n  skipFlowComment() {\n    const {\n      pos\n    } = this.state;\n    let shiftToFirstNonWhiteSpace = 2;\n\n    while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {\n      shiftToFirstNonWhiteSpace++;\n    }\n\n    const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n    const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n    if (ch2 === 58 && ch3 === 58) {\n      return shiftToFirstNonWhiteSpace + 2;\n    }\n\n    if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === \"flow-include\") {\n      return shiftToFirstNonWhiteSpace + 12;\n    }\n\n    if (ch2 === 58 && ch3 !== 58) {\n      return shiftToFirstNonWhiteSpace;\n    }\n\n    return false;\n  }\n\n  hasFlowCommentCompletion() {\n    const end = this.input.indexOf(\"*/\", this.state.pos);\n\n    if (end === -1) {\n      throw this.raise(this.state.pos, ErrorMessages.UnterminatedComment);\n    }\n  }\n\n  flowEnumErrorBooleanMemberNotInitialized(pos, {\n    enumName,\n    memberName\n  }) {\n    this.raise(pos, FlowErrors.EnumBooleanMemberNotInitialized, memberName, enumName);\n  }\n\n  flowEnumErrorInvalidMemberName(pos, {\n    enumName,\n    memberName\n  }) {\n    const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n    this.raise(pos, FlowErrors.EnumInvalidMemberName, memberName, suggestion, enumName);\n  }\n\n  flowEnumErrorDuplicateMemberName(pos, {\n    enumName,\n    memberName\n  }) {\n    this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);\n  }\n\n  flowEnumErrorInconsistentMemberValues(pos, {\n    enumName\n  }) {\n    this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);\n  }\n\n  flowEnumErrorInvalidExplicitType(pos, {\n    enumName,\n    suppliedType\n  }) {\n    return this.raise(pos, suppliedType === null ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied : FlowErrors.EnumInvalidExplicitType, enumName, suppliedType);\n  }\n\n  flowEnumErrorInvalidMemberInitializer(pos, {\n    enumName,\n    explicitType,\n    memberName\n  }) {\n    let message = null;\n\n    switch (explicitType) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;\n        break;\n\n      case \"symbol\":\n        message = FlowErrors.EnumInvalidMemberInitializerSymbolType;\n        break;\n\n      default:\n        message = FlowErrors.EnumInvalidMemberInitializerUnknownType;\n    }\n\n    return this.raise(pos, message, enumName, memberName, explicitType);\n  }\n\n  flowEnumErrorNumberMemberNotInitialized(pos, {\n    enumName,\n    memberName\n  }) {\n    this.raise(pos, FlowErrors.EnumNumberMemberNotInitialized, enumName, memberName);\n  }\n\n  flowEnumErrorStringMemberInconsistentlyInitailized(pos, {\n    enumName\n  }) {\n    this.raise(pos, FlowErrors.EnumStringMemberInconsistentlyInitailized, enumName);\n  }\n\n  flowEnumMemberInit() {\n    const startPos = this.state.start;\n\n    const endOfInit = () => this.match(types$1.comma) || this.match(types$1.braceR);\n\n    switch (this.state.type) {\n      case types$1.num:\n        {\n          const literal = this.parseNumericLiteral(this.state.value);\n\n          if (endOfInit()) {\n            return {\n              type: \"number\",\n              pos: literal.start,\n              value: literal\n            };\n          }\n\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n        }\n\n      case types$1.string:\n        {\n          const literal = this.parseStringLiteral(this.state.value);\n\n          if (endOfInit()) {\n            return {\n              type: \"string\",\n              pos: literal.start,\n              value: literal\n            };\n          }\n\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n        }\n\n      case types$1._true:\n      case types$1._false:\n        {\n          const literal = this.parseBooleanLiteral(this.match(types$1._true));\n\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              pos: literal.start,\n              value: literal\n            };\n          }\n\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n        }\n\n      default:\n        return {\n          type: \"invalid\",\n          pos: startPos\n        };\n    }\n  }\n\n  flowEnumMemberRaw() {\n    const pos = this.state.start;\n    const id = this.parseIdentifier(true);\n    const init = this.eat(types$1.eq) ? this.flowEnumMemberInit() : {\n      type: \"none\",\n      pos\n    };\n    return {\n      id,\n      init\n    };\n  }\n\n  flowEnumCheckExplicitTypeMismatch(pos, context, expectedType) {\n    const {\n      explicitType\n    } = context;\n\n    if (explicitType === null) {\n      return;\n    }\n\n    if (explicitType !== expectedType) {\n      this.flowEnumErrorInvalidMemberInitializer(pos, context);\n    }\n  }\n\n  flowEnumMembers({\n    enumName,\n    explicitType\n  }) {\n    const seenNames = new Set();\n    const members = {\n      booleanMembers: [],\n      numberMembers: [],\n      stringMembers: [],\n      defaultedMembers: []\n    };\n    let hasUnknownMembers = false;\n\n    while (!this.match(types$1.braceR)) {\n      if (this.eat(types$1.ellipsis)) {\n        hasUnknownMembers = true;\n        break;\n      }\n\n      const memberNode = this.startNode();\n      const {\n        id,\n        init\n      } = this.flowEnumMemberRaw();\n      const memberName = id.name;\n\n      if (memberName === \"\") {\n        continue;\n      }\n\n      if (/^[a-z]/.test(memberName)) {\n        this.flowEnumErrorInvalidMemberName(id.start, {\n          enumName,\n          memberName\n        });\n      }\n\n      if (seenNames.has(memberName)) {\n        this.flowEnumErrorDuplicateMemberName(id.start, {\n          enumName,\n          memberName\n        });\n      }\n\n      seenNames.add(memberName);\n      const context = {\n        enumName,\n        explicitType,\n        memberName\n      };\n      memberNode.id = id;\n\n      switch (init.type) {\n        case \"boolean\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"boolean\");\n            memberNode.init = init.value;\n            members.booleanMembers.push(this.finishNode(memberNode, \"EnumBooleanMember\"));\n            break;\n          }\n\n        case \"number\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(this.finishNode(memberNode, \"EnumNumberMember\"));\n            break;\n          }\n\n        case \"string\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(this.finishNode(memberNode, \"EnumStringMember\"));\n            break;\n          }\n\n        case \"invalid\":\n          {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n          }\n\n        case \"none\":\n          {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(init.pos, context);\n                break;\n\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n                break;\n\n              default:\n                members.defaultedMembers.push(this.finishNode(memberNode, \"EnumDefaultedMember\"));\n            }\n          }\n      }\n\n      if (!this.match(types$1.braceR)) {\n        this.expect(types$1.comma);\n      }\n    }\n\n    return {\n      members,\n      hasUnknownMembers\n    };\n  }\n\n  flowEnumStringMembers(initializedMembers, defaultedMembers, {\n    enumName\n  }) {\n    if (initializedMembers.length === 0) {\n      return defaultedMembers;\n    } else if (defaultedMembers.length === 0) {\n      return initializedMembers;\n    } else if (defaultedMembers.length > initializedMembers.length) {\n      for (const member of initializedMembers) {\n        this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n          enumName\n        });\n      }\n\n      return defaultedMembers;\n    } else {\n      for (const member of defaultedMembers) {\n        this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n          enumName\n        });\n      }\n\n      return initializedMembers;\n    }\n  }\n\n  flowEnumParseExplicitType({\n    enumName\n  }) {\n    if (this.eatContextual(\"of\")) {\n      if (!this.match(types$1.name)) {\n        throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n          enumName,\n          suppliedType: null\n        });\n      }\n\n      const {\n        value\n      } = this.state;\n      this.next();\n\n      if (value !== \"boolean\" && value !== \"number\" && value !== \"string\" && value !== \"symbol\") {\n        this.flowEnumErrorInvalidExplicitType(this.state.start, {\n          enumName,\n          suppliedType: value\n        });\n      }\n\n      return value;\n    }\n\n    return null;\n  }\n\n  flowEnumBody(node, {\n    enumName,\n    nameLoc\n  }) {\n    const explicitType = this.flowEnumParseExplicitType({\n      enumName\n    });\n    this.expect(types$1.braceL);\n    const {\n      members,\n      hasUnknownMembers\n    } = this.flowEnumMembers({\n      enumName,\n      explicitType\n    });\n    node.hasUnknownMembers = hasUnknownMembers;\n\n    switch (explicitType) {\n      case \"boolean\":\n        node.explicitType = true;\n        node.members = members.booleanMembers;\n        this.expect(types$1.braceR);\n        return this.finishNode(node, \"EnumBooleanBody\");\n\n      case \"number\":\n        node.explicitType = true;\n        node.members = members.numberMembers;\n        this.expect(types$1.braceR);\n        return this.finishNode(node, \"EnumNumberBody\");\n\n      case \"string\":\n        node.explicitType = true;\n        node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n          enumName\n        });\n        this.expect(types$1.braceR);\n        return this.finishNode(node, \"EnumStringBody\");\n\n      case \"symbol\":\n        node.members = members.defaultedMembers;\n        this.expect(types$1.braceR);\n        return this.finishNode(node, \"EnumSymbolBody\");\n\n      default:\n        {\n          const empty = () => {\n            node.members = [];\n            this.expect(types$1.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n\n          node.explicitType = false;\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n              enumName\n            });\n            this.expect(types$1.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name\n              });\n            }\n\n            node.members = members.booleanMembers;\n            this.expect(types$1.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name\n              });\n            }\n\n            node.members = members.numberMembers;\n            this.expect(types$1.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.flowEnumErrorInconsistentMemberValues(nameLoc, {\n              enumName\n            });\n            return empty();\n          }\n        }\n    }\n  }\n\n  flowParseEnumDeclaration(node) {\n    const id = this.parseIdentifier();\n    node.id = id;\n    node.body = this.flowEnumBody(this.startNode(), {\n      enumName: id.name,\n      nameLoc: id.start\n    });\n    return this.finishNode(node, \"EnumDeclaration\");\n  }\n\n  isLookaheadToken_lt() {\n    const next = this.nextTokenStart();\n\n    if (this.input.charCodeAt(next) === 60) {\n      const afterNext = this.input.charCodeAt(next + 1);\n      return afterNext !== 60 && afterNext !== 61;\n    }\n\n    return false;\n  }\n\n  maybeUnwrapTypeCastExpression(node) {\n    return node.type === \"TypeCastExpression\" ? node.expression : node;\n  }\n\n});\n\nconst entities = {\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\"\n};\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\nconst JsxErrors = makeErrorTemplates({\n  AttributeIsEmpty: \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: \"Expected corresponding JSX closing tag for <%0>.\",\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression: \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  UnsupportedJsxValue: \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements: \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\"\n}, ErrorCodes.SyntaxError);\ntypes.j_oTag = new TokContext(\"<tag\");\ntypes.j_cTag = new TokContext(\"</tag\");\ntypes.j_expr = new TokContext(\"<tag>...</tag>\", true);\ntypes$1.jsxName = new TokenType(\"jsxName\");\ntypes$1.jsxText = new TokenType(\"jsxText\", {\n  beforeExpr: true\n});\ntypes$1.jsxTagStart = new TokenType(\"jsxTagStart\", {\n  startsExpr: true\n});\ntypes$1.jsxTagEnd = new TokenType(\"jsxTagEnd\");\n\ntypes$1.jsxTagStart.updateContext = context => {\n  context.push(types.j_expr, types.j_oTag);\n};\n\nfunction isFragment(object) {\n  return object ? object.type === \"JSXOpeningFragment\" || object.type === \"JSXClosingFragment\" : false;\n}\n\nfunction getQualifiedJSXName(object) {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return getQualifiedJSXName(object.object) + \".\" + getQualifiedJSXName(object.property);\n  }\n\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nvar jsx = (superClass => class extends superClass {\n  jsxReadToken() {\n    let out = \"\";\n    let chunkStart = this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      switch (ch) {\n        case 60:\n        case 123:\n          if (this.state.pos === this.state.start) {\n            if (ch === 60 && this.state.exprAllowed) {\n              ++this.state.pos;\n              return this.finishToken(types$1.jsxTagStart);\n            }\n\n            return super.getTokenFromCode(ch);\n          }\n\n          out += this.input.slice(chunkStart, this.state.pos);\n          return this.finishToken(types$1.jsxText, out);\n\n        case 38:\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n          break;\n\n        case 62:\n        case 125:\n\n        default:\n          if (isNewLine(ch)) {\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadNewLine(true);\n            chunkStart = this.state.pos;\n          } else {\n            ++this.state.pos;\n          }\n\n      }\n    }\n  }\n\n  jsxReadNewLine(normalizeCRLF) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let out;\n    ++this.state.pos;\n\n    if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {\n      ++this.state.pos;\n      out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n    } else {\n      out = String.fromCharCode(ch);\n    }\n\n    ++this.state.curLine;\n    this.state.lineStart = this.state.pos;\n    return out;\n  }\n\n  jsxReadString(quote) {\n    let out = \"\";\n    let chunkStart = ++this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n\n      if (ch === 38) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadEntity();\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadNewLine(false);\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n\n    out += this.input.slice(chunkStart, this.state.pos++);\n    return this.finishToken(types$1.string, out);\n  }\n\n  jsxReadEntity() {\n    let str = \"\";\n    let count = 0;\n    let entity;\n    let ch = this.input[this.state.pos];\n    const startPos = ++this.state.pos;\n\n    while (this.state.pos < this.length && count++ < 10) {\n      ch = this.input[this.state.pos++];\n\n      if (ch === \";\") {\n        if (str[0] === \"#\") {\n          if (str[1] === \"x\") {\n            str = str.substr(2);\n\n            if (HEX_NUMBER.test(str)) {\n              entity = String.fromCodePoint(parseInt(str, 16));\n            }\n          } else {\n            str = str.substr(1);\n\n            if (DECIMAL_NUMBER.test(str)) {\n              entity = String.fromCodePoint(parseInt(str, 10));\n            }\n          }\n        } else {\n          entity = entities[str];\n        }\n\n        break;\n      }\n\n      str += ch;\n    }\n\n    if (!entity) {\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    return entity;\n  }\n\n  jsxReadWord() {\n    let ch;\n    const start = this.state.pos;\n\n    do {\n      ch = this.input.charCodeAt(++this.state.pos);\n    } while (isIdentifierChar(ch) || ch === 45);\n\n    return this.finishToken(types$1.jsxName, this.input.slice(start, this.state.pos));\n  }\n\n  jsxParseIdentifier() {\n    const node = this.startNode();\n\n    if (this.match(types$1.jsxName)) {\n      node.name = this.state.value;\n    } else if (this.state.type.keyword) {\n      node.name = this.state.type.keyword;\n    } else {\n      this.unexpected();\n    }\n\n    this.next();\n    return this.finishNode(node, \"JSXIdentifier\");\n  }\n\n  jsxParseNamespacedName() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const name = this.jsxParseIdentifier();\n    if (!this.eat(types$1.colon)) return name;\n    const node = this.startNodeAt(startPos, startLoc);\n    node.namespace = name;\n    node.name = this.jsxParseIdentifier();\n    return this.finishNode(node, \"JSXNamespacedName\");\n  }\n\n  jsxParseElementName() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let node = this.jsxParseNamespacedName();\n\n    if (node.type === \"JSXNamespacedName\") {\n      return node;\n    }\n\n    while (this.eat(types$1.dot)) {\n      const newNode = this.startNodeAt(startPos, startLoc);\n      newNode.object = node;\n      newNode.property = this.jsxParseIdentifier();\n      node = this.finishNode(newNode, \"JSXMemberExpression\");\n    }\n\n    return node;\n  }\n\n  jsxParseAttributeValue() {\n    let node;\n\n    switch (this.state.type) {\n      case types$1.braceL:\n        node = this.startNode();\n        this.next();\n        node = this.jsxParseExpressionContainer(node);\n\n        if (node.expression.type === \"JSXEmptyExpression\") {\n          this.raise(node.start, JsxErrors.AttributeIsEmpty);\n        }\n\n        return node;\n\n      case types$1.jsxTagStart:\n      case types$1.string:\n        return this.parseExprAtom();\n\n      default:\n        throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);\n    }\n  }\n\n  jsxParseEmptyExpression() {\n    const node = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc);\n    return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.start, this.state.startLoc);\n  }\n\n  jsxParseSpreadChild(node) {\n    this.next();\n    node.expression = this.parseExpression();\n    this.expect(types$1.braceR);\n    return this.finishNode(node, \"JSXSpreadChild\");\n  }\n\n  jsxParseExpressionContainer(node) {\n    if (this.match(types$1.braceR)) {\n      node.expression = this.jsxParseEmptyExpression();\n    } else {\n      const expression = this.parseExpression();\n      node.expression = expression;\n    }\n\n    this.expect(types$1.braceR);\n    return this.finishNode(node, \"JSXExpressionContainer\");\n  }\n\n  jsxParseAttribute() {\n    const node = this.startNode();\n\n    if (this.eat(types$1.braceL)) {\n      this.expect(types$1.ellipsis);\n      node.argument = this.parseMaybeAssignAllowIn();\n      this.expect(types$1.braceR);\n      return this.finishNode(node, \"JSXSpreadAttribute\");\n    }\n\n    node.name = this.jsxParseNamespacedName();\n    node.value = this.eat(types$1.eq) ? this.jsxParseAttributeValue() : null;\n    return this.finishNode(node, \"JSXAttribute\");\n  }\n\n  jsxParseOpeningElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    if (this.match(types$1.jsxTagEnd)) {\n      this.expect(types$1.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningFragment\");\n    }\n\n    node.name = this.jsxParseElementName();\n    return this.jsxParseOpeningElementAfterName(node);\n  }\n\n  jsxParseOpeningElementAfterName(node) {\n    const attributes = [];\n\n    while (!this.match(types$1.slash) && !this.match(types$1.jsxTagEnd)) {\n      attributes.push(this.jsxParseAttribute());\n    }\n\n    node.attributes = attributes;\n    node.selfClosing = this.eat(types$1.slash);\n    this.expect(types$1.jsxTagEnd);\n    return this.finishNode(node, \"JSXOpeningElement\");\n  }\n\n  jsxParseClosingElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    if (this.match(types$1.jsxTagEnd)) {\n      this.expect(types$1.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingFragment\");\n    }\n\n    node.name = this.jsxParseElementName();\n    this.expect(types$1.jsxTagEnd);\n    return this.finishNode(node, \"JSXClosingElement\");\n  }\n\n  jsxParseElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    const children = [];\n    const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n    let closingElement = null;\n\n    if (!openingElement.selfClosing) {\n      contents: for (;;) {\n        switch (this.state.type) {\n          case types$1.jsxTagStart:\n            startPos = this.state.start;\n            startLoc = this.state.startLoc;\n            this.next();\n\n            if (this.eat(types$1.slash)) {\n              closingElement = this.jsxParseClosingElementAt(startPos, startLoc);\n              break contents;\n            }\n\n            children.push(this.jsxParseElementAt(startPos, startLoc));\n            break;\n\n          case types$1.jsxText:\n            children.push(this.parseExprAtom());\n            break;\n\n          case types$1.braceL:\n            {\n              const node = this.startNode();\n              this.next();\n\n              if (this.match(types$1.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(this.jsxParseExpressionContainer(node));\n              }\n\n              break;\n            }\n\n          default:\n            throw this.unexpected();\n        }\n      }\n\n      if (isFragment(openingElement) && !isFragment(closingElement)) {\n        this.raise(closingElement.start, JsxErrors.MissingClosingTagFragment);\n      } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n        this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n      } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n          this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n        }\n      }\n    }\n\n    if (isFragment(openingElement)) {\n      node.openingFragment = openingElement;\n      node.closingFragment = closingElement;\n    } else {\n      node.openingElement = openingElement;\n      node.closingElement = closingElement;\n    }\n\n    node.children = children;\n\n    if (this.isRelational(\"<\")) {\n      throw this.raise(this.state.start, JsxErrors.UnwrappedAdjacentJSXElements);\n    }\n\n    return isFragment(openingElement) ? this.finishNode(node, \"JSXFragment\") : this.finishNode(node, \"JSXElement\");\n  }\n\n  jsxParseElement() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    this.next();\n    return this.jsxParseElementAt(startPos, startLoc);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    if (this.match(types$1.jsxText)) {\n      return this.parseLiteral(this.state.value, \"JSXText\");\n    } else if (this.match(types$1.jsxTagStart)) {\n      return this.jsxParseElement();\n    } else if (this.isRelational(\"<\") && this.input.charCodeAt(this.state.pos) !== 33) {\n      this.finishToken(types$1.jsxTagStart);\n      return this.jsxParseElement();\n    } else {\n      return super.parseExprAtom(refExpressionErrors);\n    }\n  }\n\n  createLookaheadState(state) {\n    const lookaheadState = super.createLookaheadState(state);\n    lookaheadState.inPropertyName = state.inPropertyName;\n    return lookaheadState;\n  }\n\n  getTokenFromCode(code) {\n    if (this.state.inPropertyName) return super.getTokenFromCode(code);\n    const context = this.curContext();\n\n    if (context === types.j_expr) {\n      return this.jsxReadToken();\n    }\n\n    if (context === types.j_oTag || context === types.j_cTag) {\n      if (isIdentifierStart(code)) {\n        return this.jsxReadWord();\n      }\n\n      if (code === 62) {\n        ++this.state.pos;\n        return this.finishToken(types$1.jsxTagEnd);\n      }\n\n      if ((code === 34 || code === 39) && context === types.j_oTag) {\n        return this.jsxReadString(code);\n      }\n    }\n\n    if (code === 60 && this.state.exprAllowed && this.input.charCodeAt(this.state.pos + 1) !== 33) {\n      ++this.state.pos;\n      return this.finishToken(types$1.jsxTagStart);\n    }\n\n    return super.getTokenFromCode(code);\n  }\n\n  updateContext(prevType) {\n    super.updateContext(prevType);\n    const {\n      context,\n      type\n    } = this.state;\n\n    if (type === types$1.slash && prevType === types$1.jsxTagStart) {\n      context.splice(-2, 2, types.j_cTag);\n      this.state.exprAllowed = false;\n    } else if (type === types$1.jsxTagEnd) {\n      const out = context.pop();\n\n      if (out === types.j_oTag && prevType === types$1.slash || out === types.j_cTag) {\n        context.pop();\n        this.state.exprAllowed = context[context.length - 1] === types.j_expr;\n      } else {\n        this.state.exprAllowed = true;\n      }\n    } else if (type.keyword && (prevType === types$1.dot || prevType === types$1.questionDot)) {\n      this.state.exprAllowed = false;\n    } else {\n      this.state.exprAllowed = type.beforeExpr;\n    }\n  }\n\n});\n\nclass TypeScriptScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.types = new Set();\n    this.enums = new Set();\n    this.constEnums = new Set();\n    this.classes = new Set();\n    this.exportOnlyBindings = new Set();\n  }\n\n}\n\nclass TypeScriptScopeHandler extends ScopeHandler {\n  createScope(flags) {\n    return new TypeScriptScope(flags);\n  }\n\n  declareName(name, bindingType, pos) {\n    const scope = this.currentScope();\n\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.add(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        this.maybeExportDefined(scope, name);\n      }\n\n      scope.types.add(name);\n    }\n\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (scope.enums.has(name)) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.has(name);\n        return isConst !== wasConst;\n      }\n\n      return true;\n    }\n\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\n      if (scope.lexical.has(name)) {\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        return false;\n      }\n    }\n\n    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(...arguments);\n  }\n\n  checkLocalExport(id) {\n    const topLevelScope = this.scopeStack[0];\n    const {\n      name\n    } = id;\n\n    if (!topLevelScope.types.has(name) && !topLevelScope.exportOnlyBindings.has(name)) {\n      super.checkLocalExport(id);\n    }\n  }\n\n}\n\nfunction nonNull(x) {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n\n  return x;\n}\n\nfunction assert(x) {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\nconst TSErrors = makeErrorTemplates({\n  AbstractMethodHasImplementation: \"Method '%0' cannot have an implementation because it is marked abstract.\",\n  AbstractPropertyHasInitializer: \"Property '%0' cannot have an initializer because it is marked abstract.\",\n  AccesorCannotDeclareThisParameter: \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstructorHasTypeParameters: \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: \"'declare' is not allowed in %0ters.\",\n  DeclareClassFieldHasInitializer: \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation: \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier: \"Accessibility modifier already seen.\",\n  DuplicateModifier: \"Duplicate modifier: '%0'.\",\n  EmptyHeritageClauseType: \"'%0' list cannot be empty.\",\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare: \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  IncompatibleModifiers: \"'%0' modifier cannot be used with '%1' modifier.\",\n  IndexSignatureHasAbstract: \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: \"Index signatures cannot have an accessibility modifier ('%0').\",\n  IndexSignatureHasDeclare: \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride: \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic: \"Index signatures cannot have the 'static' modifier.\",\n  InvalidModifierOnTypeMember: \"'%0' modifier cannot appear on a type member.\",\n  InvalidModifiersOrder: \"'%0' modifier must precede '%1' modifier.\",\n  InvalidTupleMemberLabel: \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName: \"'interface' declarations must be followed by an identifier.\",\n  MixedLabeledAndUnlabeledElements: \"Tuple members must all have names or all not have names.\",\n  NonAbstractClassHasAbstractMethod: \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifer: \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired: \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass: \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract: \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: \"Private elements cannot have an accessibility modifier ('%0').\",\n  ReadonlyForMethodSignature: \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  SetAccesorCannotHaveOptionalParameter: \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccesorCannotHaveRestParameter: \"A 'set' accessor cannot have rest parameter.\",\n  SetAccesorCannotHaveReturnType: \"A 'set' accessor cannot have a return type annotation.\",\n  StaticBlockCannotHaveModifier: \"Static class blocks cannot have any modifier.\",\n  TypeAnnotationAfterAssign: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed: \"A type-only import can specify a default import or named bindings, but not both.\",\n  UnexpectedParameterModifier: \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly: \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument: \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind: \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0.\"\n}, ErrorCodes.SyntaxError);\n\nfunction keywordTypeFromName(value) {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n\n    case \"never\":\n      return \"TSNeverKeyword\";\n\n    case \"number\":\n      return \"TSNumberKeyword\";\n\n    case \"object\":\n      return \"TSObjectKeyword\";\n\n    case \"string\":\n      return \"TSStringKeyword\";\n\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier) {\n  return modifier === \"private\" || modifier === \"public\" || modifier === \"protected\";\n}\n\nvar typescript = (superClass => class extends superClass {\n  getScopeHandler() {\n    return TypeScriptScopeHandler;\n  }\n\n  tsIsIdentifier() {\n    return this.match(types$1.name);\n  }\n\n  tsTokenCanFollowModifier() {\n    return (this.match(types$1.bracketL) || this.match(types$1.braceL) || this.match(types$1.star) || this.match(types$1.ellipsis) || this.match(types$1.privateName) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();\n  }\n\n  tsNextTokenCanFollowModifier() {\n    this.next();\n    return this.tsTokenCanFollowModifier();\n  }\n\n  tsParseModifier(allowedModifiers) {\n    if (!this.match(types$1.name)) {\n      return undefined;\n    }\n\n    const modifier = this.state.value;\n\n    if (allowedModifiers.indexOf(modifier) !== -1 && this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n      return modifier;\n    }\n\n    return undefined;\n  }\n\n  tsParseModifiers(modified, allowedModifiers, disallowedModifiers, errorTemplate) {\n    const enforceOrder = (pos, modifier, before, after) => {\n      if (modifier === before && modified[after]) {\n        this.raise(pos, TSErrors.InvalidModifiersOrder, before, after);\n      }\n    };\n\n    const incompatible = (pos, modifier, mod1, mod2) => {\n      if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {\n        this.raise(pos, TSErrors.IncompatibleModifiers, mod1, mod2);\n      }\n    };\n\n    for (;;) {\n      const startPos = this.state.start;\n      const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []));\n      if (!modifier) break;\n\n      if (tsIsAccessModifier(modifier)) {\n        if (modified.accessibility) {\n          this.raise(startPos, TSErrors.DuplicateAccessibilityModifier);\n        } else {\n          enforceOrder(startPos, modifier, modifier, \"override\");\n          enforceOrder(startPos, modifier, modifier, \"static\");\n          enforceOrder(startPos, modifier, modifier, \"readonly\");\n          modified.accessibility = modifier;\n        }\n      } else {\n        if (Object.hasOwnProperty.call(modified, modifier)) {\n          this.raise(startPos, TSErrors.DuplicateModifier, modifier);\n        } else {\n          enforceOrder(startPos, modifier, \"static\", \"readonly\");\n          enforceOrder(startPos, modifier, \"static\", \"override\");\n          enforceOrder(startPos, modifier, \"override\", \"readonly\");\n          enforceOrder(startPos, modifier, \"abstract\", \"override\");\n          incompatible(startPos, modifier, \"declare\", \"override\");\n          incompatible(startPos, modifier, \"static\", \"abstract\");\n        }\n\n        modified[modifier] = true;\n      }\n\n      if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {\n        this.raise(startPos, errorTemplate, modifier);\n      }\n    }\n  }\n\n  tsIsListTerminator(kind) {\n    switch (kind) {\n      case \"EnumMembers\":\n      case \"TypeMembers\":\n        return this.match(types$1.braceR);\n\n      case \"HeritageClauseElement\":\n        return this.match(types$1.braceL);\n\n      case \"TupleElementTypes\":\n        return this.match(types$1.bracketR);\n\n      case \"TypeParametersOrArguments\":\n        return this.isRelational(\">\");\n    }\n\n    throw new Error(\"Unreachable\");\n  }\n\n  tsParseList(kind, parseElement) {\n    const result = [];\n\n    while (!this.tsIsListTerminator(kind)) {\n      result.push(parseElement());\n    }\n\n    return result;\n  }\n\n  tsParseDelimitedList(kind, parseElement) {\n    return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true));\n  }\n\n  tsParseDelimitedListWorker(kind, parseElement, expectSuccess) {\n    const result = [];\n\n    for (;;) {\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n\n      const element = parseElement();\n\n      if (element == null) {\n        return undefined;\n      }\n\n      result.push(element);\n\n      if (this.eat(types$1.comma)) {\n        continue;\n      }\n\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n\n      if (expectSuccess) {\n        this.expect(types$1.comma);\n      }\n\n      return undefined;\n    }\n\n    return result;\n  }\n\n  tsParseBracketedList(kind, parseElement, bracket, skipFirstToken) {\n    if (!skipFirstToken) {\n      if (bracket) {\n        this.expect(types$1.bracketL);\n      } else {\n        this.expectRelational(\"<\");\n      }\n    }\n\n    const result = this.tsParseDelimitedList(kind, parseElement);\n\n    if (bracket) {\n      this.expect(types$1.bracketR);\n    } else {\n      this.expectRelational(\">\");\n    }\n\n    return result;\n  }\n\n  tsParseImportType() {\n    const node = this.startNode();\n    this.expect(types$1._import);\n    this.expect(types$1.parenL);\n\n    if (!this.match(types$1.string)) {\n      this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);\n    }\n\n    node.argument = this.parseExprAtom();\n    this.expect(types$1.parenR);\n\n    if (this.eat(types$1.dot)) {\n      node.qualifier = this.tsParseEntityName(true);\n    }\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSImportType\");\n  }\n\n  tsParseEntityName(allowReservedWords) {\n    let entity = this.parseIdentifier();\n\n    while (this.eat(types$1.dot)) {\n      const node = this.startNodeAtNode(entity);\n      node.left = entity;\n      node.right = this.parseIdentifier(allowReservedWords);\n      entity = this.finishNode(node, \"TSQualifiedName\");\n    }\n\n    return entity;\n  }\n\n  tsParseTypeReference() {\n    const node = this.startNode();\n    node.typeName = this.tsParseEntityName(false);\n\n    if (!this.hasPrecedingLineBreak() && this.isRelational(\"<\")) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSTypeReference\");\n  }\n\n  tsParseThisTypePredicate(lhs) {\n    this.next();\n    const node = this.startNodeAtNode(lhs);\n    node.parameterName = lhs;\n    node.typeAnnotation = this.tsParseTypeAnnotation(false);\n    node.asserts = false;\n    return this.finishNode(node, \"TSTypePredicate\");\n  }\n\n  tsParseThisTypeNode() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"TSThisType\");\n  }\n\n  tsParseTypeQuery() {\n    const node = this.startNode();\n    this.expect(types$1._typeof);\n\n    if (this.match(types$1._import)) {\n      node.exprName = this.tsParseImportType();\n    } else {\n      node.exprName = this.tsParseEntityName(true);\n    }\n\n    return this.finishNode(node, \"TSTypeQuery\");\n  }\n\n  tsParseTypeParameter() {\n    const node = this.startNode();\n    node.name = this.tsParseTypeParameterName();\n    node.constraint = this.tsEatThenParseType(types$1._extends);\n    node.default = this.tsEatThenParseType(types$1.eq);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n\n  tsTryParseTypeParameters() {\n    if (this.isRelational(\"<\")) {\n      return this.tsParseTypeParameters();\n    }\n  }\n\n  tsParseTypeParameters() {\n    const node = this.startNode();\n\n    if (this.isRelational(\"<\") || this.match(types$1.jsxTagStart)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n\n    node.params = this.tsParseBracketedList(\"TypeParametersOrArguments\", this.tsParseTypeParameter.bind(this), false, true);\n\n    if (node.params.length === 0) {\n      this.raise(node.start, TSErrors.EmptyTypeParameters);\n    }\n\n    return this.finishNode(node, \"TSTypeParameterDeclaration\");\n  }\n\n  tsTryNextParseConstantContext() {\n    if (this.lookahead().type === types$1._const) {\n      this.next();\n      return this.tsParseTypeReference();\n    }\n\n    return null;\n  }\n\n  tsFillSignature(returnToken, signature) {\n    const returnTokenRequired = returnToken === types$1.arrow;\n    signature.typeParameters = this.tsTryParseTypeParameters();\n    this.expect(types$1.parenL);\n    signature.parameters = this.tsParseBindingListForSignature();\n\n    if (returnTokenRequired) {\n      signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    } else if (this.match(returnToken)) {\n      signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    }\n  }\n\n  tsParseBindingListForSignature() {\n    return this.parseBindingList(types$1.parenR, 41).map(pattern => {\n      if (pattern.type !== \"Identifier\" && pattern.type !== \"RestElement\" && pattern.type !== \"ObjectPattern\" && pattern.type !== \"ArrayPattern\") {\n        this.raise(pattern.start, TSErrors.UnsupportedSignatureParameterKind, pattern.type);\n      }\n\n      return pattern;\n    });\n  }\n\n  tsParseTypeMemberSemicolon() {\n    if (!this.eat(types$1.comma) && !this.isLineTerminator()) {\n      this.expect(types$1.semi);\n    }\n  }\n\n  tsParseSignatureMember(kind, node) {\n    this.tsFillSignature(types$1.colon, node);\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, kind);\n  }\n\n  tsIsUnambiguouslyIndexSignature() {\n    this.next();\n    return this.eat(types$1.name) && this.match(types$1.colon);\n  }\n\n  tsTryParseIndexSignature(node) {\n    if (!(this.match(types$1.bracketL) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {\n      return undefined;\n    }\n\n    this.expect(types$1.bracketL);\n    const id = this.parseIdentifier();\n    id.typeAnnotation = this.tsParseTypeAnnotation();\n    this.resetEndLocation(id);\n    this.expect(types$1.bracketR);\n    node.parameters = [id];\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, \"TSIndexSignature\");\n  }\n\n  tsParsePropertyOrMethodSignature(node, readonly) {\n    if (this.eat(types$1.question)) node.optional = true;\n    const nodeAny = node;\n\n    if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n      if (readonly) {\n        this.raise(node.start, TSErrors.ReadonlyForMethodSignature);\n      }\n\n      const method = nodeAny;\n\n      if (method.kind && this.isRelational(\"<\")) {\n        this.raise(this.state.pos, TSErrors.AccesorCannotHaveTypeParameters);\n      }\n\n      this.tsFillSignature(types$1.colon, method);\n      this.tsParseTypeMemberSemicolon();\n\n      if (method.kind === \"get\") {\n        if (method.parameters.length > 0) {\n          this.raise(this.state.pos, ErrorMessages.BadGetterArity);\n\n          if (this.isThisParam(method.parameters[0])) {\n            this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);\n          }\n        }\n      } else if (method.kind === \"set\") {\n        if (method.parameters.length !== 1) {\n          this.raise(this.state.pos, ErrorMessages.BadSetterArity);\n        } else {\n          const firstParameter = method.parameters[0];\n\n          if (this.isThisParam(firstParameter)) {\n            this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);\n          }\n\n          if (firstParameter.type === \"Identifier\" && firstParameter.optional) {\n            this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveOptionalParameter);\n          }\n\n          if (firstParameter.type === \"RestElement\") {\n            this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveRestParameter);\n          }\n        }\n\n        if (method.typeAnnotation) {\n          this.raise(method.typeAnnotation.start, TSErrors.SetAccesorCannotHaveReturnType);\n        }\n      } else {\n        method.kind = \"method\";\n      }\n\n      return this.finishNode(method, \"TSMethodSignature\");\n    } else {\n      const property = nodeAny;\n      if (readonly) property.readonly = true;\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) property.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(property, \"TSPropertySignature\");\n    }\n  }\n\n  tsParseTypeMember() {\n    const node = this.startNode();\n\n    if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n      return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n    }\n\n    if (this.match(types$1._new)) {\n      const id = this.startNode();\n      this.next();\n\n      if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n        return this.tsParseSignatureMember(\"TSConstructSignatureDeclaration\", node);\n      } else {\n        node.key = this.createIdentifier(id, \"new\");\n        return this.tsParsePropertyOrMethodSignature(node, false);\n      }\n    }\n\n    this.tsParseModifiers(node, [\"readonly\"], [\"declare\", \"abstract\", \"private\", \"protected\", \"public\", \"static\", \"override\"], TSErrors.InvalidModifierOnTypeMember);\n    const idx = this.tsTryParseIndexSignature(node);\n\n    if (idx) {\n      return idx;\n    }\n\n    this.parsePropertyName(node, false);\n\n    if (!node.computed && node.key.type === \"Identifier\" && (node.key.name === \"get\" || node.key.name === \"set\") && this.tsTokenCanFollowModifier()) {\n      node.kind = node.key.name;\n      this.parsePropertyName(node, false);\n    }\n\n    return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n  }\n\n  tsParseTypeLiteral() {\n    const node = this.startNode();\n    node.members = this.tsParseObjectTypeMembers();\n    return this.finishNode(node, \"TSTypeLiteral\");\n  }\n\n  tsParseObjectTypeMembers() {\n    this.expect(types$1.braceL);\n    const members = this.tsParseList(\"TypeMembers\", this.tsParseTypeMember.bind(this));\n    this.expect(types$1.braceR);\n    return members;\n  }\n\n  tsIsStartOfMappedType() {\n    this.next();\n\n    if (this.eat(types$1.plusMin)) {\n      return this.isContextual(\"readonly\");\n    }\n\n    if (this.isContextual(\"readonly\")) {\n      this.next();\n    }\n\n    if (!this.match(types$1.bracketL)) {\n      return false;\n    }\n\n    this.next();\n\n    if (!this.tsIsIdentifier()) {\n      return false;\n    }\n\n    this.next();\n    return this.match(types$1._in);\n  }\n\n  tsParseMappedTypeParameter() {\n    const node = this.startNode();\n    node.name = this.tsParseTypeParameterName();\n    node.constraint = this.tsExpectThenParseType(types$1._in);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n\n  tsParseMappedType() {\n    const node = this.startNode();\n    this.expect(types$1.braceL);\n\n    if (this.match(types$1.plusMin)) {\n      node.readonly = this.state.value;\n      this.next();\n      this.expectContextual(\"readonly\");\n    } else if (this.eatContextual(\"readonly\")) {\n      node.readonly = true;\n    }\n\n    this.expect(types$1.bracketL);\n    node.typeParameter = this.tsParseMappedTypeParameter();\n    node.nameType = this.eatContextual(\"as\") ? this.tsParseType() : null;\n    this.expect(types$1.bracketR);\n\n    if (this.match(types$1.plusMin)) {\n      node.optional = this.state.value;\n      this.next();\n      this.expect(types$1.question);\n    } else if (this.eat(types$1.question)) {\n      node.optional = true;\n    }\n\n    node.typeAnnotation = this.tsTryParseType();\n    this.semicolon();\n    this.expect(types$1.braceR);\n    return this.finishNode(node, \"TSMappedType\");\n  }\n\n  tsParseTupleType() {\n    const node = this.startNode();\n    node.elementTypes = this.tsParseBracketedList(\"TupleElementTypes\", this.tsParseTupleElementType.bind(this), true, false);\n    let seenOptionalElement = false;\n    let labeledElements = null;\n    node.elementTypes.forEach(elementNode => {\n      var _labeledElements;\n\n      let {\n        type\n      } = elementNode;\n\n      if (seenOptionalElement && type !== \"TSRestType\" && type !== \"TSOptionalType\" && !(type === \"TSNamedTupleMember\" && elementNode.optional)) {\n        this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);\n      }\n\n      seenOptionalElement = seenOptionalElement || type === \"TSNamedTupleMember\" && elementNode.optional || type === \"TSOptionalType\";\n\n      if (type === \"TSRestType\") {\n        elementNode = elementNode.typeAnnotation;\n        type = elementNode.type;\n      }\n\n      const isLabeled = type === \"TSNamedTupleMember\";\n      labeledElements = (_labeledElements = labeledElements) != null ? _labeledElements : isLabeled;\n\n      if (labeledElements !== isLabeled) {\n        this.raise(elementNode.start, TSErrors.MixedLabeledAndUnlabeledElements);\n      }\n    });\n    return this.finishNode(node, \"TSTupleType\");\n  }\n\n  tsParseTupleElementType() {\n    const {\n      start: startPos,\n      startLoc\n    } = this.state;\n    const rest = this.eat(types$1.ellipsis);\n    let type = this.tsParseType();\n    const optional = this.eat(types$1.question);\n    const labeled = this.eat(types$1.colon);\n\n    if (labeled) {\n      const labeledNode = this.startNodeAtNode(type);\n      labeledNode.optional = optional;\n\n      if (type.type === \"TSTypeReference\" && !type.typeParameters && type.typeName.type === \"Identifier\") {\n        labeledNode.label = type.typeName;\n      } else {\n        this.raise(type.start, TSErrors.InvalidTupleMemberLabel);\n        labeledNode.label = type;\n      }\n\n      labeledNode.elementType = this.tsParseType();\n      type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n    } else if (optional) {\n      const optionalTypeNode = this.startNodeAtNode(type);\n      optionalTypeNode.typeAnnotation = type;\n      type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n    }\n\n    if (rest) {\n      const restNode = this.startNodeAt(startPos, startLoc);\n      restNode.typeAnnotation = type;\n      type = this.finishNode(restNode, \"TSRestType\");\n    }\n\n    return type;\n  }\n\n  tsParseParenthesizedType() {\n    const node = this.startNode();\n    this.expect(types$1.parenL);\n    node.typeAnnotation = this.tsParseType();\n    this.expect(types$1.parenR);\n    return this.finishNode(node, \"TSParenthesizedType\");\n  }\n\n  tsParseFunctionOrConstructorType(type, abstract) {\n    const node = this.startNode();\n\n    if (type === \"TSConstructorType\") {\n      node.abstract = !!abstract;\n      if (abstract) this.next();\n      this.next();\n    }\n\n    this.tsFillSignature(types$1.arrow, node);\n    return this.finishNode(node, type);\n  }\n\n  tsParseLiteralTypeNode() {\n    const node = this.startNode();\n\n    node.literal = (() => {\n      switch (this.state.type) {\n        case types$1.num:\n        case types$1.bigint:\n        case types$1.string:\n        case types$1._true:\n        case types$1._false:\n          return this.parseExprAtom();\n\n        default:\n          throw this.unexpected();\n      }\n    })();\n\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n\n  tsParseTemplateLiteralType() {\n    const node = this.startNode();\n    node.literal = this.parseTemplate(false);\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n\n  parseTemplateSubstitution() {\n    if (this.state.inType) return this.tsParseType();\n    return super.parseTemplateSubstitution();\n  }\n\n  tsParseThisTypeOrThisTypePredicate() {\n    const thisKeyword = this.tsParseThisTypeNode();\n\n    if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n      return this.tsParseThisTypePredicate(thisKeyword);\n    } else {\n      return thisKeyword;\n    }\n  }\n\n  tsParseNonArrayType() {\n    switch (this.state.type) {\n      case types$1.name:\n      case types$1._void:\n      case types$1._null:\n        {\n          const type = this.match(types$1._void) ? \"TSVoidKeyword\" : this.match(types$1._null) ? \"TSNullKeyword\" : keywordTypeFromName(this.state.value);\n\n          if (type !== undefined && this.lookaheadCharCode() !== 46) {\n            const node = this.startNode();\n            this.next();\n            return this.finishNode(node, type);\n          }\n\n          return this.tsParseTypeReference();\n        }\n\n      case types$1.string:\n      case types$1.num:\n      case types$1.bigint:\n      case types$1._true:\n      case types$1._false:\n        return this.tsParseLiteralTypeNode();\n\n      case types$1.plusMin:\n        if (this.state.value === \"-\") {\n          const node = this.startNode();\n          const nextToken = this.lookahead();\n\n          if (nextToken.type !== types$1.num && nextToken.type !== types$1.bigint) {\n            throw this.unexpected();\n          }\n\n          node.literal = this.parseMaybeUnary();\n          return this.finishNode(node, \"TSLiteralType\");\n        }\n\n        break;\n\n      case types$1._this:\n        return this.tsParseThisTypeOrThisTypePredicate();\n\n      case types$1._typeof:\n        return this.tsParseTypeQuery();\n\n      case types$1._import:\n        return this.tsParseImportType();\n\n      case types$1.braceL:\n        return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();\n\n      case types$1.bracketL:\n        return this.tsParseTupleType();\n\n      case types$1.parenL:\n        return this.tsParseParenthesizedType();\n\n      case types$1.backQuote:\n        return this.tsParseTemplateLiteralType();\n    }\n\n    throw this.unexpected();\n  }\n\n  tsParseArrayTypeOrHigher() {\n    let type = this.tsParseNonArrayType();\n\n    while (!this.hasPrecedingLineBreak() && this.eat(types$1.bracketL)) {\n      if (this.match(types$1.bracketR)) {\n        const node = this.startNodeAtNode(type);\n        node.elementType = type;\n        this.expect(types$1.bracketR);\n        type = this.finishNode(node, \"TSArrayType\");\n      } else {\n        const node = this.startNodeAtNode(type);\n        node.objectType = type;\n        node.indexType = this.tsParseType();\n        this.expect(types$1.bracketR);\n        type = this.finishNode(node, \"TSIndexedAccessType\");\n      }\n    }\n\n    return type;\n  }\n\n  tsParseTypeOperator(operator) {\n    const node = this.startNode();\n    this.expectContextual(operator);\n    node.operator = operator;\n    node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n    if (operator === \"readonly\") {\n      this.tsCheckTypeAnnotationForReadOnly(node);\n    }\n\n    return this.finishNode(node, \"TSTypeOperator\");\n  }\n\n  tsCheckTypeAnnotationForReadOnly(node) {\n    switch (node.typeAnnotation.type) {\n      case \"TSTupleType\":\n      case \"TSArrayType\":\n        return;\n\n      default:\n        this.raise(node.start, TSErrors.UnexpectedReadonly);\n    }\n  }\n\n  tsParseInferType() {\n    const node = this.startNode();\n    this.expectContextual(\"infer\");\n    const typeParameter = this.startNode();\n    typeParameter.name = this.tsParseTypeParameterName();\n    node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n    return this.finishNode(node, \"TSInferType\");\n  }\n\n  tsParseTypeOperatorOrHigher() {\n    const operator = [\"keyof\", \"unique\", \"readonly\"].find(kw => this.isContextual(kw));\n    return operator ? this.tsParseTypeOperator(operator) : this.isContextual(\"infer\") ? this.tsParseInferType() : this.tsParseArrayTypeOrHigher();\n  }\n\n  tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {\n    const node = this.startNode();\n    const hasLeadingOperator = this.eat(operator);\n    const types = [];\n\n    do {\n      types.push(parseConstituentType());\n    } while (this.eat(operator));\n\n    if (types.length === 1 && !hasLeadingOperator) {\n      return types[0];\n    }\n\n    node.types = types;\n    return this.finishNode(node, kind);\n  }\n\n  tsParseIntersectionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSIntersectionType\", this.tsParseTypeOperatorOrHigher.bind(this), types$1.bitwiseAND);\n  }\n\n  tsParseUnionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSUnionType\", this.tsParseIntersectionTypeOrHigher.bind(this), types$1.bitwiseOR);\n  }\n\n  tsIsStartOfFunctionType() {\n    if (this.isRelational(\"<\")) {\n      return true;\n    }\n\n    return this.match(types$1.parenL) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));\n  }\n\n  tsSkipParameterStart() {\n    if (this.match(types$1.name) || this.match(types$1._this)) {\n      this.next();\n      return true;\n    }\n\n    if (this.match(types$1.braceL)) {\n      let braceStackCounter = 1;\n      this.next();\n\n      while (braceStackCounter > 0) {\n        if (this.match(types$1.braceL)) {\n          ++braceStackCounter;\n        } else if (this.match(types$1.braceR)) {\n          --braceStackCounter;\n        }\n\n        this.next();\n      }\n\n      return true;\n    }\n\n    if (this.match(types$1.bracketL)) {\n      let braceStackCounter = 1;\n      this.next();\n\n      while (braceStackCounter > 0) {\n        if (this.match(types$1.bracketL)) {\n          ++braceStackCounter;\n        } else if (this.match(types$1.bracketR)) {\n          --braceStackCounter;\n        }\n\n        this.next();\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  tsIsUnambiguouslyStartOfFunctionType() {\n    this.next();\n\n    if (this.match(types$1.parenR) || this.match(types$1.ellipsis)) {\n      return true;\n    }\n\n    if (this.tsSkipParameterStart()) {\n      if (this.match(types$1.colon) || this.match(types$1.comma) || this.match(types$1.question) || this.match(types$1.eq)) {\n        return true;\n      }\n\n      if (this.match(types$1.parenR)) {\n        this.next();\n\n        if (this.match(types$1.arrow)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  tsParseTypeOrTypePredicateAnnotation(returnToken) {\n    return this.tsInType(() => {\n      const t = this.startNode();\n      this.expect(returnToken);\n      const node = this.startNode();\n      const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));\n\n      if (asserts && this.match(types$1._this)) {\n        let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n\n        if (thisTypePredicate.type === \"TSThisType\") {\n          node.parameterName = thisTypePredicate;\n          node.asserts = true;\n          node.typeAnnotation = null;\n          thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n        } else {\n          this.resetStartLocationFromNode(thisTypePredicate, node);\n          thisTypePredicate.asserts = true;\n        }\n\n        t.typeAnnotation = thisTypePredicate;\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n\n      const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n      if (!typePredicateVariable) {\n        if (!asserts) {\n          return this.tsParseTypeAnnotation(false, t);\n        }\n\n        node.parameterName = this.parseIdentifier();\n        node.asserts = asserts;\n        node.typeAnnotation = null;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n\n      const type = this.tsParseTypeAnnotation(false);\n      node.parameterName = typePredicateVariable;\n      node.typeAnnotation = type;\n      node.asserts = asserts;\n      t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    });\n  }\n\n  tsTryParseTypeOrTypePredicateAnnotation() {\n    return this.match(types$1.colon) ? this.tsParseTypeOrTypePredicateAnnotation(types$1.colon) : undefined;\n  }\n\n  tsTryParseTypeAnnotation() {\n    return this.match(types$1.colon) ? this.tsParseTypeAnnotation() : undefined;\n  }\n\n  tsTryParseType() {\n    return this.tsEatThenParseType(types$1.colon);\n  }\n\n  tsParseTypePredicatePrefix() {\n    const id = this.parseIdentifier();\n\n    if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n      this.next();\n      return id;\n    }\n  }\n\n  tsParseTypePredicateAsserts() {\n    if (!this.match(types$1.name) || this.state.value !== \"asserts\" || this.hasPrecedingLineBreak()) {\n      return false;\n    }\n\n    const containsEsc = this.state.containsEsc;\n    this.next();\n\n    if (!this.match(types$1.name) && !this.match(types$1._this)) {\n      return false;\n    }\n\n    if (containsEsc) {\n      this.raise(this.state.lastTokStart, ErrorMessages.InvalidEscapedReservedWord, \"asserts\");\n    }\n\n    return true;\n  }\n\n  tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {\n    this.tsInType(() => {\n      if (eatColon) this.expect(types$1.colon);\n      t.typeAnnotation = this.tsParseType();\n    });\n    return this.finishNode(t, \"TSTypeAnnotation\");\n  }\n\n  tsParseType() {\n    assert(this.state.inType);\n    const type = this.tsParseNonConditionalType();\n\n    if (this.hasPrecedingLineBreak() || !this.eat(types$1._extends)) {\n      return type;\n    }\n\n    const node = this.startNodeAtNode(type);\n    node.checkType = type;\n    node.extendsType = this.tsParseNonConditionalType();\n    this.expect(types$1.question);\n    node.trueType = this.tsParseType();\n    this.expect(types$1.colon);\n    node.falseType = this.tsParseType();\n    return this.finishNode(node, \"TSConditionalType\");\n  }\n\n  isAbstractConstructorSignature() {\n    return this.isContextual(\"abstract\") && this.lookahead().type === types$1._new;\n  }\n\n  tsParseNonConditionalType() {\n    if (this.tsIsStartOfFunctionType()) {\n      return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n    }\n\n    if (this.match(types$1._new)) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n    } else if (this.isAbstractConstructorSignature()) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\", true);\n    }\n\n    return this.tsParseUnionTypeOrHigher();\n  }\n\n  tsParseTypeAssertion() {\n    const node = this.startNode();\n\n    const _const = this.tsTryNextParseConstantContext();\n\n    node.typeAnnotation = _const || this.tsNextThenParseType();\n    this.expectRelational(\">\");\n    node.expression = this.parseMaybeUnary();\n    return this.finishNode(node, \"TSTypeAssertion\");\n  }\n\n  tsParseHeritageClause(descriptor) {\n    const originalStart = this.state.start;\n    const delimitedList = this.tsParseDelimitedList(\"HeritageClauseElement\", this.tsParseExpressionWithTypeArguments.bind(this));\n\n    if (!delimitedList.length) {\n      this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);\n    }\n\n    return delimitedList;\n  }\n\n  tsParseExpressionWithTypeArguments() {\n    const node = this.startNode();\n    node.expression = this.tsParseEntityName(false);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n  }\n\n  tsParseInterfaceDeclaration(node) {\n    if (this.match(types$1.name)) {\n      node.id = this.parseIdentifier();\n      this.checkLVal(node.id, \"typescript interface declaration\", BIND_TS_INTERFACE);\n    } else {\n      node.id = null;\n      this.raise(this.state.start, TSErrors.MissingInterfaceName);\n    }\n\n    node.typeParameters = this.tsTryParseTypeParameters();\n\n    if (this.eat(types$1._extends)) {\n      node.extends = this.tsParseHeritageClause(\"extends\");\n    }\n\n    const body = this.startNode();\n    body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n    node.body = this.finishNode(body, \"TSInterfaceBody\");\n    return this.finishNode(node, \"TSInterfaceDeclaration\");\n  }\n\n  tsParseTypeAliasDeclaration(node) {\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, \"typescript type alias\", BIND_TS_TYPE);\n    node.typeParameters = this.tsTryParseTypeParameters();\n    node.typeAnnotation = this.tsInType(() => {\n      this.expect(types$1.eq);\n\n      if (this.isContextual(\"intrinsic\") && this.lookahead().type !== types$1.dot) {\n        const node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"TSIntrinsicKeyword\");\n      }\n\n      return this.tsParseType();\n    });\n    this.semicolon();\n    return this.finishNode(node, \"TSTypeAliasDeclaration\");\n  }\n\n  tsInNoContext(cb) {\n    const oldContext = this.state.context;\n    this.state.context = [oldContext[0]];\n\n    try {\n      return cb();\n    } finally {\n      this.state.context = oldContext;\n    }\n  }\n\n  tsInType(cb) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n\n    try {\n      return cb();\n    } finally {\n      this.state.inType = oldInType;\n    }\n  }\n\n  tsEatThenParseType(token) {\n    return !this.match(token) ? undefined : this.tsNextThenParseType();\n  }\n\n  tsExpectThenParseType(token) {\n    return this.tsDoThenParseType(() => this.expect(token));\n  }\n\n  tsNextThenParseType() {\n    return this.tsDoThenParseType(() => this.next());\n  }\n\n  tsDoThenParseType(cb) {\n    return this.tsInType(() => {\n      cb();\n      return this.tsParseType();\n    });\n  }\n\n  tsParseEnumMember() {\n    const node = this.startNode();\n    node.id = this.match(types$1.string) ? this.parseExprAtom() : this.parseIdentifier(true);\n\n    if (this.eat(types$1.eq)) {\n      node.initializer = this.parseMaybeAssignAllowIn();\n    }\n\n    return this.finishNode(node, \"TSEnumMember\");\n  }\n\n  tsParseEnumDeclaration(node, isConst) {\n    if (isConst) node.const = true;\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, \"typescript enum declaration\", isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM);\n    this.expect(types$1.braceL);\n    node.members = this.tsParseDelimitedList(\"EnumMembers\", this.tsParseEnumMember.bind(this));\n    this.expect(types$1.braceR);\n    return this.finishNode(node, \"TSEnumDeclaration\");\n  }\n\n  tsParseModuleBlock() {\n    const node = this.startNode();\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(types$1.braceL);\n    this.parseBlockOrModuleBlockBody(node.body = [], undefined, true, types$1.braceR);\n    this.scope.exit();\n    return this.finishNode(node, \"TSModuleBlock\");\n  }\n\n  tsParseModuleOrNamespaceDeclaration(node, nested = false) {\n    node.id = this.parseIdentifier();\n\n    if (!nested) {\n      this.checkLVal(node.id, \"module or namespace declaration\", BIND_TS_NAMESPACE);\n    }\n\n    if (this.eat(types$1.dot)) {\n      const inner = this.startNode();\n      this.tsParseModuleOrNamespaceDeclaration(inner, true);\n      node.body = inner;\n    } else {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    }\n\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n\n  tsParseAmbientExternalModuleDeclaration(node) {\n    if (this.isContextual(\"global\")) {\n      node.global = true;\n      node.id = this.parseIdentifier();\n    } else if (this.match(types$1.string)) {\n      node.id = this.parseExprAtom();\n    } else {\n      this.unexpected();\n    }\n\n    if (this.match(types$1.braceL)) {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    } else {\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n\n  tsParseImportEqualsDeclaration(node, isExport) {\n    node.isExport = isExport || false;\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, \"import equals declaration\", BIND_LEXICAL);\n    this.expect(types$1.eq);\n    const moduleReference = this.tsParseModuleReference();\n\n    if (node.importKind === \"type\" && moduleReference.type !== \"TSExternalModuleReference\") {\n      this.raise(moduleReference.start, TSErrors.ImportAliasHasImportType);\n    }\n\n    node.moduleReference = moduleReference;\n    this.semicolon();\n    return this.finishNode(node, \"TSImportEqualsDeclaration\");\n  }\n\n  tsIsExternalModuleReference() {\n    return this.isContextual(\"require\") && this.lookaheadCharCode() === 40;\n  }\n\n  tsParseModuleReference() {\n    return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);\n  }\n\n  tsParseExternalModuleReference() {\n    const node = this.startNode();\n    this.expectContextual(\"require\");\n    this.expect(types$1.parenL);\n\n    if (!this.match(types$1.string)) {\n      throw this.unexpected();\n    }\n\n    node.expression = this.parseExprAtom();\n    this.expect(types$1.parenR);\n    return this.finishNode(node, \"TSExternalModuleReference\");\n  }\n\n  tsLookAhead(f) {\n    const state = this.state.clone();\n    const res = f();\n    this.state = state;\n    return res;\n  }\n\n  tsTryParseAndCatch(f) {\n    const result = this.tryParse(abort => f() || abort());\n    if (result.aborted || !result.node) return undefined;\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n\n  tsTryParse(f) {\n    const state = this.state.clone();\n    const result = f();\n\n    if (result !== undefined && result !== false) {\n      return result;\n    } else {\n      this.state = state;\n      return undefined;\n    }\n  }\n\n  tsTryParseDeclare(nany) {\n    if (this.isLineTerminator()) {\n      return;\n    }\n\n    let starttype = this.state.type;\n    let kind;\n\n    if (this.isContextual(\"let\")) {\n      starttype = types$1._var;\n      kind = \"let\";\n    }\n\n    return this.tsInAmbientContext(() => {\n      switch (starttype) {\n        case types$1._function:\n          nany.declare = true;\n          return this.parseFunctionStatement(nany, false, true);\n\n        case types$1._class:\n          nany.declare = true;\n          return this.parseClass(nany, true, false);\n\n        case types$1._const:\n          if (this.match(types$1._const) && this.isLookaheadContextual(\"enum\")) {\n            this.expect(types$1._const);\n            this.expectContextual(\"enum\");\n            return this.tsParseEnumDeclaration(nany, true);\n          }\n\n        case types$1._var:\n          kind = kind || this.state.value;\n          return this.parseVarStatement(nany, kind);\n\n        case types$1.name:\n          {\n            const value = this.state.value;\n\n            if (value === \"global\") {\n              return this.tsParseAmbientExternalModuleDeclaration(nany);\n            } else {\n              return this.tsParseDeclaration(nany, value, true);\n            }\n          }\n      }\n    });\n  }\n\n  tsTryParseExportDeclaration() {\n    return this.tsParseDeclaration(this.startNode(), this.state.value, true);\n  }\n\n  tsParseExpressionStatement(node, expr) {\n    switch (expr.name) {\n      case \"declare\":\n        {\n          const declaration = this.tsTryParseDeclare(node);\n\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n\n          break;\n        }\n\n      case \"global\":\n        if (this.match(types$1.braceL)) {\n          this.scope.enter(SCOPE_TS_MODULE);\n          this.prodParam.enter(PARAM);\n          const mod = node;\n          mod.global = true;\n          mod.id = expr;\n          mod.body = this.tsParseModuleBlock();\n          this.scope.exit();\n          this.prodParam.exit();\n          return this.finishNode(mod, \"TSModuleDeclaration\");\n        }\n\n        break;\n\n      default:\n        return this.tsParseDeclaration(node, expr.name, false);\n    }\n  }\n\n  tsParseDeclaration(node, value, next) {\n    switch (value) {\n      case \"abstract\":\n        if (this.tsCheckLineTerminator(next) && (this.match(types$1._class) || this.match(types$1.name))) {\n          return this.tsParseAbstractDeclaration(node);\n        }\n\n        break;\n\n      case \"enum\":\n        if (next || this.match(types$1.name)) {\n          if (next) this.next();\n          return this.tsParseEnumDeclaration(node, false);\n        }\n\n        break;\n\n      case \"interface\":\n        if (this.tsCheckLineTerminator(next) && this.match(types$1.name)) {\n          return this.tsParseInterfaceDeclaration(node);\n        }\n\n        break;\n\n      case \"module\":\n        if (this.tsCheckLineTerminator(next)) {\n          if (this.match(types$1.string)) {\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          } else if (this.match(types$1.name)) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n        }\n\n        break;\n\n      case \"namespace\":\n        if (this.tsCheckLineTerminator(next) && this.match(types$1.name)) {\n          return this.tsParseModuleOrNamespaceDeclaration(node);\n        }\n\n        break;\n\n      case \"type\":\n        if (this.tsCheckLineTerminator(next) && this.match(types$1.name)) {\n          return this.tsParseTypeAliasDeclaration(node);\n        }\n\n        break;\n    }\n  }\n\n  tsCheckLineTerminator(next) {\n    if (next) {\n      if (this.hasFollowingLineBreak()) return false;\n      this.next();\n      return true;\n    }\n\n    return !this.isLineTerminator();\n  }\n\n  tsTryParseGenericAsyncArrowFunction(startPos, startLoc) {\n    if (!this.isRelational(\"<\")) {\n      return undefined;\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = true;\n    const res = this.tsTryParseAndCatch(() => {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.typeParameters = this.tsParseTypeParameters();\n      super.parseFunctionParams(node);\n      node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n      this.expect(types$1.arrow);\n      return node;\n    });\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    if (!res) {\n      return undefined;\n    }\n\n    return this.parseArrowExpression(res, null, true);\n  }\n\n  tsParseTypeArguments() {\n    const node = this.startNode();\n    node.params = this.tsInType(() => this.tsInNoContext(() => {\n      this.expectRelational(\"<\");\n      return this.tsParseDelimitedList(\"TypeParametersOrArguments\", this.tsParseType.bind(this));\n    }));\n\n    if (node.params.length === 0) {\n      this.raise(node.start, TSErrors.EmptyTypeArguments);\n    }\n\n    this.expectRelational(\">\");\n    return this.finishNode(node, \"TSTypeParameterInstantiation\");\n  }\n\n  tsIsDeclarationStart() {\n    if (this.match(types$1.name)) {\n      switch (this.state.value) {\n        case \"abstract\":\n        case \"declare\":\n        case \"enum\":\n        case \"interface\":\n        case \"module\":\n        case \"namespace\":\n        case \"type\":\n          return true;\n      }\n    }\n\n    return false;\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.tsIsDeclarationStart()) return false;\n    return super.isExportDefaultSpecifier();\n  }\n\n  parseAssignableListItem(allowModifiers, decorators) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let accessibility;\n    let readonly = false;\n    let override = false;\n\n    if (allowModifiers !== undefined) {\n      const modified = {};\n      this.tsParseModifiers(modified, [\"public\", \"private\", \"protected\", \"override\", \"readonly\"]);\n      accessibility = modified.accessibility;\n      override = modified.override;\n      readonly = modified.readonly;\n\n      if (allowModifiers === false && (accessibility || readonly || override)) {\n        this.raise(startPos, TSErrors.UnexpectedParameterModifier);\n      }\n    }\n\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n    if (accessibility || readonly || override) {\n      const pp = this.startNodeAt(startPos, startLoc);\n\n      if (decorators.length) {\n        pp.decorators = decorators;\n      }\n\n      if (accessibility) pp.accessibility = accessibility;\n      if (readonly) pp.readonly = readonly;\n      if (override) pp.override = override;\n\n      if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n        this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);\n      }\n\n      pp.parameter = elt;\n      return this.finishNode(pp, \"TSParameterProperty\");\n    }\n\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n\n    return elt;\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(types$1.colon)) {\n      node.returnType = this.tsParseTypeOrTypePredicateAnnotation(types$1.colon);\n    }\n\n    const bodilessType = type === \"FunctionDeclaration\" ? \"TSDeclareFunction\" : type === \"ClassMethod\" ? \"TSDeclareMethod\" : undefined;\n\n    if (bodilessType && !this.match(types$1.braceL) && this.isLineTerminator()) {\n      this.finishNode(node, bodilessType);\n      return;\n    }\n\n    if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n      this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);\n\n      if (node.declare) {\n        super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        return;\n      }\n    }\n\n    super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n\n  registerFunctionStatementId(node) {\n    if (!node.body && node.id) {\n      this.checkLVal(node.id, \"function name\", BIND_TS_AMBIENT);\n    } else {\n      super.registerFunctionStatementId(...arguments);\n    }\n  }\n\n  tsCheckForInvalidTypeCasts(items) {\n    items.forEach(node => {\n      if ((node == null ? void 0 : node.type) === \"TSTypeCastExpression\") {\n        this.raise(node.typeAnnotation.start, TSErrors.UnexpectedTypeAnnotation);\n      }\n    });\n  }\n\n  toReferencedList(exprList, isInParens) {\n    this.tsCheckForInvalidTypeCasts(exprList);\n    return exprList;\n  }\n\n  parseArrayLike(...args) {\n    const node = super.parseArrayLike(...args);\n\n    if (node.type === \"ArrayExpression\") {\n      this.tsCheckForInvalidTypeCasts(node.elements);\n    }\n\n    return node;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    if (!this.hasPrecedingLineBreak() && this.match(types$1.bang)) {\n      this.state.exprAllowed = false;\n      this.next();\n      const nonNullExpression = this.startNodeAt(startPos, startLoc);\n      nonNullExpression.expression = base;\n      return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n    }\n\n    let isOptionalCall = false;\n\n    if (this.match(types$1.questionDot) && this.lookaheadCharCode() === 60) {\n      if (noCalls) {\n        state.stop = true;\n        return base;\n      }\n\n      state.optionalChainMember = isOptionalCall = true;\n      this.next();\n    }\n\n    if (this.isRelational(\"<\")) {\n      let missingParenErrorPos;\n      const result = this.tsTryParseAndCatch(() => {\n        if (!noCalls && this.atPossibleAsyncArrow(base)) {\n          const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startPos, startLoc);\n\n          if (asyncArrowFn) {\n            return asyncArrowFn;\n          }\n        }\n\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        const typeArguments = this.tsParseTypeArguments();\n\n        if (typeArguments) {\n          if (isOptionalCall && !this.match(types$1.parenL)) {\n            missingParenErrorPos = this.state.pos;\n            this.unexpected();\n          }\n\n          if (!noCalls && this.eat(types$1.parenL)) {\n            node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n            node.typeParameters = typeArguments;\n\n            if (state.optionalChainMember) {\n              node.optional = isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          } else if (this.match(types$1.backQuote)) {\n            const result = this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n            result.typeParameters = typeArguments;\n            return result;\n          }\n        }\n\n        this.unexpected();\n      });\n\n      if (missingParenErrorPos) {\n        this.unexpected(missingParenErrorPos, types$1.parenL);\n      }\n\n      if (result) return result;\n    }\n\n    return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n  }\n\n  parseNewArguments(node) {\n    if (this.isRelational(\"<\")) {\n      const typeParameters = this.tsTryParseAndCatch(() => {\n        const args = this.tsParseTypeArguments();\n        if (!this.match(types$1.parenL)) this.unexpected();\n        return args;\n      });\n\n      if (typeParameters) {\n        node.typeParameters = typeParameters;\n      }\n    }\n\n    super.parseNewArguments(node);\n  }\n\n  parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n    if (nonNull(types$1._in.binop) > minPrec && !this.hasPrecedingLineBreak() && this.isContextual(\"as\")) {\n      const node = this.startNodeAt(leftStartPos, leftStartLoc);\n      node.expression = left;\n\n      const _const = this.tsTryNextParseConstantContext();\n\n      if (_const) {\n        node.typeAnnotation = _const;\n      } else {\n        node.typeAnnotation = this.tsNextThenParseType();\n      }\n\n      this.finishNode(node, \"TSAsExpression\");\n      this.reScan_lt_gt();\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n    }\n\n    return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);\n  }\n\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {}\n\n  checkDuplicateExports() {}\n\n  parseImport(node) {\n    node.importKind = \"value\";\n\n    if (this.match(types$1.name) || this.match(types$1.star) || this.match(types$1.braceL)) {\n      let ahead = this.lookahead();\n\n      if (this.isContextual(\"type\") && ahead.type !== types$1.comma && !(ahead.type === types$1.name && ahead.value === \"from\") && ahead.type !== types$1.eq) {\n        node.importKind = \"type\";\n        this.next();\n        ahead = this.lookahead();\n      }\n\n      if (this.match(types$1.name) && ahead.type === types$1.eq) {\n        return this.tsParseImportEqualsDeclaration(node);\n      }\n    }\n\n    const importNode = super.parseImport(node);\n\n    if (importNode.importKind === \"type\" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === \"ImportDefaultSpecifier\") {\n      this.raise(importNode.start, TSErrors.TypeImportCannotSpecifyDefaultAndNamed);\n    }\n\n    return importNode;\n  }\n\n  parseExport(node) {\n    if (this.match(types$1._import)) {\n      this.next();\n\n      if (this.isContextual(\"type\") && this.lookaheadCharCode() !== 61) {\n        node.importKind = \"type\";\n        this.next();\n      } else {\n        node.importKind = \"value\";\n      }\n\n      return this.tsParseImportEqualsDeclaration(node, true);\n    } else if (this.eat(types$1.eq)) {\n      const assign = node;\n      assign.expression = this.parseExpression();\n      this.semicolon();\n      return this.finishNode(assign, \"TSExportAssignment\");\n    } else if (this.eatContextual(\"as\")) {\n      const decl = node;\n      this.expectContextual(\"namespace\");\n      decl.id = this.parseIdentifier();\n      this.semicolon();\n      return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n    } else {\n      if (this.isContextual(\"type\") && this.lookahead().type === types$1.braceL) {\n        this.next();\n        node.exportKind = \"type\";\n      } else {\n        node.exportKind = \"value\";\n      }\n\n      return super.parseExport(node);\n    }\n  }\n\n  isAbstractClass() {\n    return this.isContextual(\"abstract\") && this.lookahead().type === types$1._class;\n  }\n\n  parseExportDefaultExpression() {\n    if (this.isAbstractClass()) {\n      const cls = this.startNode();\n      this.next();\n      cls.abstract = true;\n      this.parseClass(cls, true, true);\n      return cls;\n    }\n\n    if (this.state.value === \"interface\") {\n      const interfaceNode = this.startNode();\n      this.next();\n      const result = this.tsParseInterfaceDeclaration(interfaceNode);\n      if (result) return result;\n    }\n\n    return super.parseExportDefaultExpression();\n  }\n\n  parseStatementContent(context, topLevel) {\n    if (this.state.type === types$1._const) {\n      const ahead = this.lookahead();\n\n      if (ahead.type === types$1.name && ahead.value === \"enum\") {\n        const node = this.startNode();\n        this.expect(types$1._const);\n        this.expectContextual(\"enum\");\n        return this.tsParseEnumDeclaration(node, true);\n      }\n    }\n\n    return super.parseStatementContent(context, topLevel);\n  }\n\n  parseAccessModifier() {\n    return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n  }\n\n  tsHasSomeModifiers(member, modifiers) {\n    return modifiers.some(modifier => {\n      if (tsIsAccessModifier(modifier)) {\n        return member.accessibility === modifier;\n      }\n\n      return !!member[modifier];\n    });\n  }\n\n  parseClassMember(classBody, member, state) {\n    const invalidModifersForStaticBlocks = [\"declare\", \"private\", \"public\", \"protected\", \"override\", \"abstract\", \"readonly\"];\n    this.tsParseModifiers(member, invalidModifersForStaticBlocks.concat([\"static\"]));\n\n    const callParseClassMemberWithIsStatic = () => {\n      const isStatic = !!member.static;\n\n      if (isStatic && this.eat(types$1.braceL)) {\n        if (this.tsHasSomeModifiers(member, invalidModifersForStaticBlocks)) {\n          this.raise(this.state.pos, TSErrors.StaticBlockCannotHaveModifier);\n        }\n\n        this.parseClassStaticBlock(classBody, member);\n      } else {\n        this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n      }\n    };\n\n    if (member.declare) {\n      this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n    } else {\n      callParseClassMemberWithIsStatic();\n    }\n  }\n\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const idx = this.tsTryParseIndexSignature(member);\n\n    if (idx) {\n      classBody.body.push(idx);\n\n      if (member.abstract) {\n        this.raise(member.start, TSErrors.IndexSignatureHasAbstract);\n      }\n\n      if (member.accessibility) {\n        this.raise(member.start, TSErrors.IndexSignatureHasAccessibility, member.accessibility);\n      }\n\n      if (member.declare) {\n        this.raise(member.start, TSErrors.IndexSignatureHasDeclare);\n      }\n\n      if (member.override) {\n        this.raise(member.start, TSErrors.IndexSignatureHasOverride);\n      }\n\n      return;\n    }\n\n    if (!this.state.inAbstractClass && member.abstract) {\n      this.raise(member.start, TSErrors.NonAbstractClassHasAbstractMethod);\n    }\n\n    if (member.override) {\n      if (!state.hadSuperClass) {\n        this.raise(member.start, TSErrors.OverrideNotInSubClass);\n      }\n    }\n\n    super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parsePostMemberNameModifiers(methodOrProp) {\n    const optional = this.eat(types$1.question);\n    if (optional) methodOrProp.optional = true;\n\n    if (methodOrProp.readonly && this.match(types$1.parenL)) {\n      this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);\n    }\n\n    if (methodOrProp.declare && this.match(types$1.parenL)) {\n      this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);\n    }\n  }\n\n  parseExpressionStatement(node, expr) {\n    const decl = expr.type === \"Identifier\" ? this.tsParseExpressionStatement(node, expr) : undefined;\n    return decl || super.parseExpressionStatement(node, expr);\n  }\n\n  shouldParseExportDeclaration() {\n    if (this.tsIsDeclarationStart()) return true;\n    return super.shouldParseExportDeclaration();\n  }\n\n  parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n    if (!this.state.maybeInArrowParameters || !this.match(types$1.question)) {\n      return super.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n    }\n\n    const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n    if (!result.node) {\n      if (result.error) {\n        super.setOptionalParametersError(refExpressionErrors, result.error);\n      }\n\n      return expr;\n    }\n\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    node = super.parseParenItem(node, startPos, startLoc);\n\n    if (this.eat(types$1.question)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n\n    if (this.match(types$1.colon)) {\n      const typeCastNode = this.startNodeAt(startPos, startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n    }\n\n    return node;\n  }\n\n  parseExportDeclaration(node) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const isDeclare = this.eatContextual(\"declare\");\n\n    if (isDeclare && (this.isContextual(\"declare\") || !this.shouldParseExportDeclaration())) {\n      throw this.raise(this.state.start, TSErrors.ExpectedAmbientAfterExportDeclare);\n    }\n\n    let declaration;\n\n    if (this.match(types$1.name)) {\n      declaration = this.tsTryParseExportDeclaration();\n    }\n\n    if (!declaration) {\n      declaration = super.parseExportDeclaration(node);\n    }\n\n    if (declaration && (declaration.type === \"TSInterfaceDeclaration\" || declaration.type === \"TSTypeAliasDeclaration\" || isDeclare)) {\n      node.exportKind = \"type\";\n    }\n\n    if (declaration && isDeclare) {\n      this.resetStartLocation(declaration, startPos, startLoc);\n      declaration.declare = true;\n    }\n\n    return declaration;\n  }\n\n  parseClassId(node, isStatement, optionalId) {\n    if ((!isStatement || optionalId) && this.isContextual(\"implements\")) {\n      return;\n    }\n\n    super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) node.typeParameters = typeParameters;\n  }\n\n  parseClassPropertyAnnotation(node) {\n    if (!node.optional && this.eat(types$1.bang)) {\n      node.definite = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n  }\n\n  parseClassProperty(node) {\n    this.parseClassPropertyAnnotation(node);\n\n    if (this.state.isAmbientContext && this.match(types$1.eq)) {\n      this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);\n    }\n\n    if (node.abstract && this.match(types$1.eq)) {\n      const {\n        key\n      } = node;\n      this.raise(this.state.start, TSErrors.AbstractPropertyHasInitializer, key.type === \"Identifier\" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`);\n    }\n\n    return super.parseClassProperty(node);\n  }\n\n  parseClassPrivateProperty(node) {\n    if (node.abstract) {\n      this.raise(node.start, TSErrors.PrivateElementHasAbstract);\n    }\n\n    if (node.accessibility) {\n      this.raise(node.start, TSErrors.PrivateElementHasAccessibility, node.accessibility);\n    }\n\n    this.parseClassPropertyAnnotation(node);\n    return super.parseClassPrivateProperty(node);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    const typeParameters = this.tsTryParseTypeParameters();\n\n    if (typeParameters && isConstructor) {\n      this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);\n    }\n\n    if (method.declare && (method.kind === \"get\" || method.kind === \"set\")) {\n      this.raise(method.start, TSErrors.DeclareAccessor, method.kind);\n    }\n\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n\n    if (node.superClass && this.isRelational(\"<\")) {\n      node.superTypeParameters = this.tsParseTypeArguments();\n    }\n\n    if (this.eatContextual(\"implements\")) {\n      node.implements = this.tsParseHeritageClause(\"implements\");\n    }\n  }\n\n  parseObjPropValue(prop, ...args) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) prop.typeParameters = typeParameters;\n    super.parseObjPropValue(prop, ...args);\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) node.typeParameters = typeParameters;\n    super.parseFunctionParams(node, allowModifiers);\n  }\n\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n\n    if (decl.id.type === \"Identifier\" && this.eat(types$1.bang)) {\n      decl.definite = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n\n    if (type) {\n      decl.id.typeAnnotation = type;\n      this.resetEndLocation(decl.id);\n    }\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(types$1.colon)) {\n      node.returnType = this.tsParseTypeAnnotation();\n    }\n\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n\n  parseMaybeAssign(...args) {\n    var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;\n\n    let state;\n    let jsx;\n    let typeCast;\n\n    if (this.hasPlugin(\"jsx\") && (this.match(types$1.jsxTagStart) || this.isRelational(\"<\"))) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n\n      if (context[context.length - 1] === types.j_oTag) {\n        context.length -= 2;\n      } else if (context[context.length - 1] === types.j_expr) {\n        context.length -= 1;\n      }\n    }\n\n    if (!((_jsx = jsx) != null && _jsx.error) && !this.isRelational(\"<\")) {\n      return super.parseMaybeAssign(...args);\n    }\n\n    let typeParameters;\n    state = state || this.state.clone();\n    const arrow = this.tryParse(abort => {\n      var _expr$extra, _typeParameters;\n\n      typeParameters = this.tsParseTypeParameters();\n      const expr = super.parseMaybeAssign(...args);\n\n      if (expr.type !== \"ArrowFunctionExpression\" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {\n        abort();\n      }\n\n      if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {\n        this.resetStartLocationFromNode(expr, typeParameters);\n      }\n\n      expr.typeParameters = typeParameters;\n      return expr;\n    }, state);\n    if (!arrow.error && !arrow.aborted) return arrow.node;\n\n    if (!jsx) {\n      assert(!this.hasPlugin(\"jsx\"));\n      typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n      if (!typeCast.error) return typeCast.node;\n    }\n\n    if ((_jsx2 = jsx) != null && _jsx2.node) {\n      this.state = jsx.failState;\n      return jsx.node;\n    }\n\n    if (arrow.node) {\n      this.state = arrow.failState;\n      return arrow.node;\n    }\n\n    if ((_typeCast = typeCast) != null && _typeCast.node) {\n      this.state = typeCast.failState;\n      return typeCast.node;\n    }\n\n    if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n    if (arrow.thrown) throw arrow.error;\n    if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error;\n    throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);\n  }\n\n  parseMaybeUnary(refExpressionErrors) {\n    if (!this.hasPlugin(\"jsx\") && this.isRelational(\"<\")) {\n      return this.tsParseTypeAssertion();\n    } else {\n      return super.parseMaybeUnary(refExpressionErrors);\n    }\n  }\n\n  parseArrow(node) {\n    if (this.match(types$1.colon)) {\n      const result = this.tryParse(abort => {\n        const returnType = this.tsParseTypeOrTypePredicateAnnotation(types$1.colon);\n        if (this.canInsertSemicolon() || !this.match(types$1.arrow)) abort();\n        return returnType;\n      });\n      if (result.aborted) return;\n\n      if (!result.thrown) {\n        if (result.error) this.state = result.failState;\n        node.returnType = result.node;\n      }\n    }\n\n    return super.parseArrow(node);\n  }\n\n  parseAssignableListItemTypes(param) {\n    if (this.eat(types$1.question)) {\n      if (param.type !== \"Identifier\" && !this.state.isAmbientContext && !this.state.inType) {\n        this.raise(param.start, TSErrors.PatternIsOptional);\n      }\n\n      param.optional = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) param.typeAnnotation = type;\n    this.resetEndLocation(param);\n    return param;\n  }\n\n  isAssignable(node, isBinding) {\n    switch (node.type) {\n      case \"TSTypeCastExpression\":\n        return this.isAssignable(node.expression, isBinding);\n\n      case \"TSParameterProperty\":\n        return true;\n\n      default:\n        return super.isAssignable(node, isBinding);\n    }\n  }\n\n  toAssignable(node, isLHS = false) {\n    switch (node.type) {\n      case \"TSTypeCastExpression\":\n        return super.toAssignable(this.typeCastToParameter(node), isLHS);\n\n      case \"TSParameterProperty\":\n        return super.toAssignable(node, isLHS);\n\n      case \"ParenthesizedExpression\":\n        return this.toAssignableParenthesizedExpression(node, isLHS);\n\n      case \"TSAsExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n        node.expression = this.toAssignable(node.expression, isLHS);\n        return node;\n\n      default:\n        return super.toAssignable(node, isLHS);\n    }\n  }\n\n  toAssignableParenthesizedExpression(node, isLHS) {\n    switch (node.expression.type) {\n      case \"TSAsExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n      case \"ParenthesizedExpression\":\n        node.expression = this.toAssignable(node.expression, isLHS);\n        return node;\n\n      default:\n        return super.toAssignable(node, isLHS);\n    }\n  }\n\n  checkLVal(expr, contextDescription, ...args) {\n    var _expr$extra2;\n\n    switch (expr.type) {\n      case \"TSTypeCastExpression\":\n        return;\n\n      case \"TSParameterProperty\":\n        this.checkLVal(expr.parameter, \"parameter property\", ...args);\n        return;\n\n      case \"TSAsExpression\":\n      case \"TSTypeAssertion\":\n        if (!args[0] && contextDescription !== \"parenthesized expression\" && !((_expr$extra2 = expr.extra) != null && _expr$extra2.parenthesized)) {\n          this.raise(expr.start, ErrorMessages.InvalidLhs, contextDescription);\n          break;\n        }\n\n        this.checkLVal(expr.expression, \"parenthesized expression\", ...args);\n        return;\n\n      case \"TSNonNullExpression\":\n        this.checkLVal(expr.expression, contextDescription, ...args);\n        return;\n\n      default:\n        super.checkLVal(expr, contextDescription, ...args);\n        return;\n    }\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case types$1._this:\n        return this.parseIdentifier(true);\n\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n\n  parseMaybeDecoratorArguments(expr) {\n    if (this.isRelational(\"<\")) {\n      const typeArguments = this.tsParseTypeArguments();\n\n      if (this.match(types$1.parenL)) {\n        const call = super.parseMaybeDecoratorArguments(expr);\n        call.typeParameters = typeArguments;\n        return call;\n      }\n\n      this.unexpected(this.state.start, types$1.parenL);\n    }\n\n    return super.parseMaybeDecoratorArguments(expr);\n  }\n\n  checkCommaAfterRest(close) {\n    if (this.state.isAmbientContext && this.match(types$1.comma) && this.lookaheadCharCode() === close) {\n      this.next();\n    } else {\n      super.checkCommaAfterRest(close);\n    }\n  }\n\n  isClassMethod() {\n    return this.isRelational(\"<\") || super.isClassMethod();\n  }\n\n  isClassProperty() {\n    return this.match(types$1.bang) || this.match(types$1.colon) || super.isClassProperty();\n  }\n\n  parseMaybeDefault(...args) {\n    const node = super.parseMaybeDefault(...args);\n\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(node.typeAnnotation.start, TSErrors.TypeAnnotationAfterAssign);\n    }\n\n    return node;\n  }\n\n  getTokenFromCode(code) {\n    if (this.state.inType && (code === 62 || code === 60)) {\n      return this.finishOp(types$1.relational, 1);\n    } else {\n      return super.getTokenFromCode(code);\n    }\n  }\n\n  reScan_lt_gt() {\n    if (this.match(types$1.relational)) {\n      const code = this.input.charCodeAt(this.state.start);\n\n      if (code === 60 || code === 62) {\n        this.state.pos -= 1;\n        this.readToken_lt_gt(code);\n      }\n    }\n  }\n\n  toAssignableList(exprList) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n      if (!expr) continue;\n\n      switch (expr.type) {\n        case \"TSTypeCastExpression\":\n          exprList[i] = this.typeCastToParameter(expr);\n          break;\n\n        case \"TSAsExpression\":\n        case \"TSTypeAssertion\":\n          if (!this.state.maybeInArrowParameters) {\n            exprList[i] = this.typeCastToParameter(expr);\n          } else {\n            this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);\n          }\n\n          break;\n      }\n    }\n\n    return super.toAssignableList(...arguments);\n  }\n\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n\n  shouldParseArrow(params) {\n    if (this.match(types$1.colon)) {\n      return params.every(expr => this.isAssignable(expr, true));\n    }\n\n    return super.shouldParseArrow(params);\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(types$1.colon) || super.shouldParseAsyncArrow();\n  }\n\n  canHaveLeadingDecorator() {\n    return super.canHaveLeadingDecorator() || this.isAbstractClass();\n  }\n\n  jsxParseOpeningElementAfterName(node) {\n    if (this.isRelational(\"<\")) {\n      const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArguments());\n      if (typeArguments) node.typeParameters = typeArguments;\n    }\n\n    return super.jsxParseOpeningElementAfterName(node);\n  }\n\n  getGetterSetterExpectedParamCount(method) {\n    const baseCount = super.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    const firstParam = params[0];\n    const hasContextParam = firstParam && this.isThisParam(firstParam);\n    return hasContextParam ? baseCount + 1 : baseCount;\n  }\n\n  parseCatchClauseParam() {\n    const param = super.parseCatchClauseParam();\n    const type = this.tsTryParseTypeAnnotation();\n\n    if (type) {\n      param.typeAnnotation = type;\n      this.resetEndLocation(param);\n    }\n\n    return param;\n  }\n\n  tsInAmbientContext(cb) {\n    const oldIsAmbientContext = this.state.isAmbientContext;\n    this.state.isAmbientContext = true;\n\n    try {\n      return cb();\n    } finally {\n      this.state.isAmbientContext = oldIsAmbientContext;\n    }\n  }\n\n  parseClass(node, ...args) {\n    const oldInAbstractClass = this.state.inAbstractClass;\n    this.state.inAbstractClass = !!node.abstract;\n\n    try {\n      return super.parseClass(node, ...args);\n    } finally {\n      this.state.inAbstractClass = oldInAbstractClass;\n    }\n  }\n\n  tsParseAbstractDeclaration(node) {\n    if (this.match(types$1._class)) {\n      node.abstract = true;\n      return this.parseClass(node, true, false);\n    } else if (this.isContextual(\"interface\")) {\n      if (!this.hasFollowingLineBreak()) {\n        node.abstract = true;\n        this.raise(node.start, TSErrors.NonClassMethodPropertyHasAbstractModifer);\n        this.next();\n        return this.tsParseInterfaceDeclaration(node);\n      }\n    } else {\n      this.unexpected(null, types$1._class);\n    }\n  }\n\n  parseMethod(...args) {\n    const method = super.parseMethod(...args);\n\n    if (method.abstract) {\n      const hasBody = this.hasPlugin(\"estree\") ? !!method.value.body : !!method.body;\n\n      if (hasBody) {\n        const {\n          key\n        } = method;\n        this.raise(method.start, TSErrors.AbstractMethodHasImplementation, key.type === \"Identifier\" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`);\n      }\n    }\n\n    return method;\n  }\n\n  tsParseTypeParameterName() {\n    const typeName = this.parseIdentifier();\n    return typeName.name;\n  }\n\n  shouldParseAsAmbientContext() {\n    return !!this.getPluginOption(\"typescript\", \"dts\");\n  }\n\n  parse() {\n    if (this.shouldParseAsAmbientContext()) {\n      this.state.isAmbientContext = true;\n    }\n\n    return super.parse();\n  }\n\n  getExpression() {\n    if (this.shouldParseAsAmbientContext()) {\n      this.state.isAmbientContext = true;\n    }\n\n    return super.getExpression();\n  }\n\n});\n\ntypes$1.placeholder = new TokenType(\"%%\", {\n  startsExpr: true\n});\nconst PlaceHolderErrors = makeErrorTemplates({\n  ClassNameIsRequired: \"A class name is required.\"\n}, ErrorCodes.SyntaxError);\nvar placeholders = (superClass => class extends superClass {\n  parsePlaceholder(expectedNode) {\n    if (this.match(types$1.placeholder)) {\n      const node = this.startNode();\n      this.next();\n      this.assertNoSpace(\"Unexpected space in placeholder.\");\n      node.name = super.parseIdentifier(true);\n      this.assertNoSpace(\"Unexpected space in placeholder.\");\n      this.expect(types$1.placeholder);\n      return this.finishPlaceholder(node, expectedNode);\n    }\n  }\n\n  finishPlaceholder(node, expectedNode) {\n    const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n    node.expectedNode = expectedNode;\n    return isFinished ? node : this.finishNode(node, \"Placeholder\");\n  }\n\n  getTokenFromCode(code) {\n    if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {\n      return this.finishOp(types$1.placeholder, 2);\n    }\n\n    return super.getTokenFromCode(...arguments);\n  }\n\n  parseExprAtom() {\n    return this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments);\n  }\n\n  parseIdentifier() {\n    return this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(...arguments);\n  }\n\n  checkReservedWord(word) {\n    if (word !== undefined) super.checkReservedWord(...arguments);\n  }\n\n  parseBindingAtom() {\n    return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments);\n  }\n\n  checkLVal(expr) {\n    if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n  }\n\n  toAssignable(node) {\n    if (node && node.type === \"Placeholder\" && node.expectedNode === \"Expression\") {\n      node.expectedNode = \"Pattern\";\n      return node;\n    }\n\n    return super.toAssignable(...arguments);\n  }\n\n  isLet(context) {\n    if (super.isLet(context)) {\n      return true;\n    }\n\n    if (!this.isContextual(\"let\")) {\n      return false;\n    }\n\n    if (context) return false;\n    const nextToken = this.lookahead();\n\n    if (nextToken.type === types$1.placeholder) {\n      return true;\n    }\n\n    return false;\n  }\n\n  verifyBreakContinue(node) {\n    if (node.label && node.label.type === \"Placeholder\") return;\n    super.verifyBreakContinue(...arguments);\n  }\n\n  parseExpressionStatement(node, expr) {\n    if (expr.type !== \"Placeholder\" || expr.extra && expr.extra.parenthesized) {\n      return super.parseExpressionStatement(...arguments);\n    }\n\n    if (this.match(types$1.colon)) {\n      const stmt = node;\n      stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n      this.next();\n      stmt.body = this.parseStatement(\"label\");\n      return this.finishNode(stmt, \"LabeledStatement\");\n    }\n\n    this.semicolon();\n    node.name = expr.name;\n    return this.finishPlaceholder(node, \"Statement\");\n  }\n\n  parseBlock() {\n    return this.parsePlaceholder(\"BlockStatement\") || super.parseBlock(...arguments);\n  }\n\n  parseFunctionId() {\n    return this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(...arguments);\n  }\n\n  parseClass(node, isStatement, optionalId) {\n    const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n    this.next();\n    this.takeDecorators(node);\n    const oldStrict = this.state.strict;\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n\n    if (placeholder) {\n      if (this.match(types$1._extends) || this.match(types$1.placeholder) || this.match(types$1.braceL)) {\n        node.id = placeholder;\n      } else if (optionalId || !isStatement) {\n        node.id = null;\n        node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n        return this.finishNode(node, type);\n      } else {\n        this.unexpected(null, PlaceHolderErrors.ClassNameIsRequired);\n      }\n    } else {\n      this.parseClassId(node, isStatement, optionalId);\n    }\n\n    this.parseClassSuper(node);\n    node.body = this.parsePlaceholder(\"ClassBody\") || this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, type);\n  }\n\n  parseExport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseExport(...arguments);\n\n    if (!this.isContextual(\"from\") && !this.match(types$1.comma)) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    this.expectPlugin(\"exportDefaultFrom\");\n    const specifier = this.startNode();\n    specifier.exported = placeholder;\n    node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n    return super.parseExport(node);\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.match(types$1._default)) {\n      const next = this.nextTokenStart();\n\n      if (this.isUnparsedContextual(next, \"from\")) {\n        if (this.input.startsWith(types$1.placeholder.label, this.nextTokenStartSince(next + 4))) {\n          return true;\n        }\n      }\n    }\n\n    return super.isExportDefaultSpecifier();\n  }\n\n  maybeParseExportDefaultSpecifier(node) {\n    if (node.specifiers && node.specifiers.length > 0) {\n      return true;\n    }\n\n    return super.maybeParseExportDefaultSpecifier(...arguments);\n  }\n\n  checkExport(node) {\n    const {\n      specifiers\n    } = node;\n\n    if (specifiers != null && specifiers.length) {\n      node.specifiers = specifiers.filter(node => node.exported.type === \"Placeholder\");\n    }\n\n    super.checkExport(node);\n    node.specifiers = specifiers;\n  }\n\n  parseImport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseImport(...arguments);\n    node.specifiers = [];\n\n    if (!this.isContextual(\"from\") && !this.match(types$1.comma)) {\n      node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    const specifier = this.startNodeAtNode(placeholder);\n    specifier.local = placeholder;\n    this.finishNode(specifier, \"ImportDefaultSpecifier\");\n    node.specifiers.push(specifier);\n\n    if (this.eat(types$1.comma)) {\n      const hasStarImport = this.maybeParseStarImportSpecifier(node);\n      if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n    }\n\n    this.expectContextual(\"from\");\n    node.source = this.parseImportSource();\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource() {\n    return this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource(...arguments);\n  }\n\n});\n\nvar v8intrinsic = (superClass => class extends superClass {\n  parseV8Intrinsic() {\n    if (this.match(types$1.modulo)) {\n      const v8IntrinsicStart = this.state.start;\n      const node = this.startNode();\n      this.eat(types$1.modulo);\n\n      if (this.match(types$1.name)) {\n        const name = this.parseIdentifierName(this.state.start);\n        const identifier = this.createIdentifier(node, name);\n        identifier.type = \"V8IntrinsicIdentifier\";\n\n        if (this.match(types$1.parenL)) {\n          return identifier;\n        }\n      }\n\n      this.unexpected(v8IntrinsicStart);\n    }\n  }\n\n  parseExprAtom() {\n    return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n  }\n\n});\n\nfunction hasPlugin(plugins, name) {\n  return plugins.some(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n}\nfunction getPluginOption(plugins, name, option) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n\n  if (plugin && Array.isArray(plugin)) {\n    return plugin[1][option];\n  }\n\n  return null;\n}\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"%\", \"#\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\nfunction validatePlugins(plugins) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\"Cannot use the decorators and decorators-legacy plugin together\");\n    }\n\n    const decoratorsBeforeExport = getPluginOption(plugins, \"decorators\", \"decoratorsBeforeExport\");\n\n    if (decoratorsBeforeExport == null) {\n      throw new Error(\"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" + \" whose value must be a boolean. If you are migrating from\" + \" Babylon/Babel 6 or want to use the old decorators proposal, you\" + \" should use the 'decorators-legacy' plugin instead of 'decorators'.\");\n    } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"pipelineOperator\")) {\n    const proposal = getPluginOption(plugins, \"pipelineOperator\", \"proposal\");\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(`\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`);\n    }\n\n    const tupleSyntaxIsHash = hasPlugin(plugins, \"recordAndTuple\") && getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\") === \"hash\";\n\n    if (proposal === \"hack\") {\n      if (hasPlugin(plugins, \"placeholders\")) {\n        throw new Error(\"Cannot combine placeholders plugin and Hack-style pipes.\");\n      }\n\n      if (hasPlugin(plugins, \"v8intrinsic\")) {\n        throw new Error(\"Cannot combine v8intrinsic plugin and Hack-style pipes.\");\n      }\n\n      const topicToken = getPluginOption(plugins, \"pipelineOperator\", \"topicToken\");\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n        throw new Error(`\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`);\n      }\n\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error('Plugin conflict between `[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.');\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error('Plugin conflict between `[\"pipelineOperator\", { proposal: \"smart\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.');\n    }\n  }\n\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    {\n      if (hasPlugin(plugins, \"importAssertions\")) {\n        throw new Error(\"Cannot combine importAssertions and moduleAttributes plugins.\");\n      }\n\n      const moduleAttributesVerionPluginOption = getPluginOption(plugins, \"moduleAttributes\", \"version\");\n\n      if (moduleAttributesVerionPluginOption !== \"may-2020\") {\n        throw new Error(\"The 'moduleAttributes' plugin requires a 'version' option,\" + \" representing the last proposal update. Currently, the\" + \" only supported value is 'may-2020'.\");\n      }\n    }\n  }\n\n  if (hasPlugin(plugins, \"recordAndTuple\") && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"))) {\n    throw new Error(\"'recordAndTuple' requires 'syntaxType' option whose value should be one of: \" + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"));\n  }\n\n  if (hasPlugin(plugins, \"asyncDoExpressions\") && !hasPlugin(plugins, \"doExpressions\")) {\n    const error = new Error(\"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\");\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n}\nconst mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders\n};\nconst mixinPluginNames = Object.keys(mixinPlugins);\n\nconst defaultOptions = {\n  sourceType: \"script\",\n  sourceFilename: undefined,\n  startLine: 1,\n  allowAwaitOutsideFunction: false,\n  allowReturnOutsideFunction: false,\n  allowImportExportEverywhere: false,\n  allowSuperOutsideMethod: false,\n  allowUndeclaredExports: false,\n  plugins: [],\n  strictMode: null,\n  ranges: false,\n  tokens: false,\n  createParenthesizedExpressions: false,\n  errorRecovery: false,\n  attachComment: true\n};\nfunction getOptions(opts) {\n  const options = {};\n\n  for (const key of Object.keys(defaultOptions)) {\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n\n  return options;\n}\n\nconst unwrapParenthesizedExpression = node => {\n  return node.type === \"ParenthesizedExpression\" ? unwrapParenthesizedExpression(node.expression) : node;\n};\n\nclass LValParser extends NodeUtils {\n  toAssignable(node, isLHS = false) {\n    var _node$extra, _node$extra3;\n\n    let parenthesized = undefined;\n\n    if (node.type === \"ParenthesizedExpression\" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n\n      if (isLHS) {\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordParenthesizedIdentifierError(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n        } else if (parenthesized.type !== \"MemberExpression\") {\n          this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n        }\n      } else {\n        this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n\n        for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {\n          var _node$extra2;\n\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (isLast && prop.type === \"RestElement\" && (_node$extra2 = node.extra) != null && _node$extra2.trailingComma) {\n            this.raiseRestNotLast(node.extra.trailingComma);\n          }\n        }\n\n        break;\n\n      case \"ObjectProperty\":\n        this.toAssignable(node.value, isLHS);\n        break;\n\n      case \"SpreadElement\":\n        {\n          this.checkToRestConversion(node);\n          node.type = \"RestElement\";\n          const arg = node.argument;\n          this.toAssignable(arg, isLHS);\n          break;\n        }\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingComma, isLHS);\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(node.left.end, ErrorMessages.MissingEqInAssignment);\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.toAssignable(parenthesized, isLHS);\n        break;\n    }\n\n    return node;\n  }\n\n  toAssignableObjectExpressionProp(prop, isLast, isLHS) {\n    if (prop.type === \"ObjectMethod\") {\n      const error = prop.kind === \"get\" || prop.kind === \"set\" ? ErrorMessages.PatternHasAccessor : ErrorMessages.PatternHasMethod;\n      this.raise(prop.key.start, error);\n    } else if (prop.type === \"SpreadElement\" && !isLast) {\n      this.raiseRestNotLast(prop.start);\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  toAssignableList(exprList, trailingCommaPos, isLHS) {\n    let end = exprList.length;\n\n    if (end) {\n      const last = exprList[end - 1];\n\n      if ((last == null ? void 0 : last.type) === \"RestElement\") {\n        --end;\n      } else if ((last == null ? void 0 : last.type) === \"SpreadElement\") {\n        last.type = \"RestElement\";\n        let arg = last.argument;\n        this.toAssignable(arg, isLHS);\n        arg = unwrapParenthesizedExpression(arg);\n\n        if (arg.type !== \"Identifier\" && arg.type !== \"MemberExpression\" && arg.type !== \"ArrayPattern\" && arg.type !== \"ObjectPattern\") {\n          this.unexpected(arg.start);\n        }\n\n        if (trailingCommaPos) {\n          this.raiseTrailingCommaAfterRest(trailingCommaPos);\n        }\n\n        --end;\n      }\n    }\n\n    for (let i = 0; i < end; i++) {\n      const elt = exprList[i];\n\n      if (elt) {\n        this.toAssignable(elt, isLHS);\n\n        if (elt.type === \"RestElement\") {\n          this.raiseRestNotLast(elt.start);\n        }\n      }\n    }\n\n    return exprList;\n  }\n\n  isAssignable(node, isBinding) {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n\n      case \"ObjectExpression\":\n        {\n          const last = node.properties.length - 1;\n          return node.properties.every((prop, i) => {\n            return prop.type !== \"ObjectMethod\" && (i === last || prop.type !== \"SpreadElement\") && this.isAssignable(prop);\n          });\n        }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(element => this.isAssignable(element));\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  toReferencedList(exprList, isParenthesizedExpr) {\n    return exprList;\n  }\n\n  toReferencedListDeep(exprList, isParenthesizedExpr) {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if ((expr == null ? void 0 : expr.type) === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  parseSpread(refExpressionErrors, refNeedsArrowPos) {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined, refNeedsArrowPos);\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  parseRestBinding() {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case types$1.bracketL:\n        {\n          const node = this.startNode();\n          this.next();\n          node.elements = this.parseBindingList(types$1.bracketR, 93, true);\n          return this.finishNode(node, \"ArrayPattern\");\n        }\n\n      case types$1.braceL:\n        return this.parseObjectLike(types$1.braceR, true);\n    }\n\n    return this.parseIdentifier();\n  }\n\n  parseBindingList(close, closeCharCode, allowEmpty, allowModifiers) {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types$1.comma);\n      }\n\n      if (allowEmpty && this.match(types$1.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(types$1.ellipsis)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n        this.checkCommaAfterRest(closeCharCode);\n        this.expect(close);\n        break;\n      } else {\n        const decorators = [];\n\n        if (this.match(types$1.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(this.state.start, ErrorMessages.UnsupportedParameterDecorator);\n        }\n\n        while (this.match(types$1.at)) {\n          decorators.push(this.parseDecorator());\n        }\n\n        elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n      }\n    }\n\n    return elts;\n  }\n\n  parseAssignableListItem(allowModifiers, decorators) {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n\n    return elt;\n  }\n\n  parseAssignableListItemTypes(param) {\n    return param;\n  }\n\n  parseMaybeDefault(startPos, startLoc, left) {\n    var _startLoc, _startPos, _left;\n\n    startLoc = (_startLoc = startLoc) != null ? _startLoc : this.state.startLoc;\n    startPos = (_startPos = startPos) != null ? _startPos : this.state.start;\n    left = (_left = left) != null ? _left : this.parseBindingAtom();\n    if (!this.eat(types$1.eq)) return left;\n    const node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n\n  checkLVal(expr, contextDescription, bindingType = BIND_NONE, checkClashes, disallowLetBinding, strictModeChanged = false) {\n    switch (expr.type) {\n      case \"Identifier\":\n        {\n          const {\n            name\n          } = expr;\n\n          if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(name, this.inModule) : isStrictBindOnlyReservedWord(name))) {\n            this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.StrictEvalArguments : ErrorMessages.StrictEvalArgumentsBinding, name);\n          }\n\n          if (checkClashes) {\n            if (checkClashes.has(name)) {\n              this.raise(expr.start, ErrorMessages.ParamDupe);\n            } else {\n              checkClashes.add(name);\n            }\n          }\n\n          if (disallowLetBinding && name === \"let\") {\n            this.raise(expr.start, ErrorMessages.LetInLexicalBinding);\n          }\n\n          if (!(bindingType & BIND_NONE)) {\n            this.scope.declareName(name, bindingType, expr.start);\n          }\n\n          break;\n        }\n\n      case \"MemberExpression\":\n        if (bindingType !== BIND_NONE) {\n          this.raise(expr.start, ErrorMessages.InvalidPropertyBindingPattern);\n        }\n\n        break;\n\n      case \"ObjectPattern\":\n        for (let prop of expr.properties) {\n          if (this.isObjectProperty(prop)) prop = prop.value;else if (this.isObjectMethod(prop)) continue;\n          this.checkLVal(prop, \"object destructuring pattern\", bindingType, checkClashes, disallowLetBinding);\n        }\n\n        break;\n\n      case \"ArrayPattern\":\n        for (const elem of expr.elements) {\n          if (elem) {\n            this.checkLVal(elem, \"array destructuring pattern\", bindingType, checkClashes, disallowLetBinding);\n          }\n        }\n\n        break;\n\n      case \"AssignmentPattern\":\n        this.checkLVal(expr.left, \"assignment pattern\", bindingType, checkClashes);\n        break;\n\n      case \"RestElement\":\n        this.checkLVal(expr.argument, \"rest element\", bindingType, checkClashes);\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.checkLVal(expr.expression, \"parenthesized expression\", bindingType, checkClashes);\n        break;\n\n      default:\n        {\n          this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.InvalidLhs : ErrorMessages.InvalidLhsBinding, contextDescription);\n        }\n    }\n  }\n\n  checkToRestConversion(node) {\n    if (node.argument.type !== \"Identifier\" && node.argument.type !== \"MemberExpression\") {\n      this.raise(node.argument.start, ErrorMessages.InvalidRestAssignmentPattern);\n    }\n  }\n\n  checkCommaAfterRest(close) {\n    if (this.match(types$1.comma)) {\n      if (this.lookaheadCharCode() === close) {\n        this.raiseTrailingCommaAfterRest(this.state.start);\n      } else {\n        this.raiseRestNotLast(this.state.start);\n      }\n    }\n  }\n\n  raiseRestNotLast(pos) {\n    throw this.raise(pos, ErrorMessages.ElementAfterRest);\n  }\n\n  raiseTrailingCommaAfterRest(pos) {\n    this.raise(pos, ErrorMessages.RestTrailingComma);\n  }\n\n}\n\nclass ExpressionParser extends LValParser {\n  checkProto(prop, isRecord, protoRef, refExpressionErrors) {\n    if (prop.type === \"SpreadElement\" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {\n      return;\n    }\n\n    const key = prop.key;\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(key.start, ErrorMessages.RecordNoProto);\n        return;\n      }\n\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          if (refExpressionErrors.doubleProto === -1) {\n            refExpressionErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raise(key.start, ErrorMessages.DuplicateProto);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(expr, potentialArrowAt) {\n    return expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt;\n  }\n\n  getExpression() {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression();\n\n    if (!this.match(types$1.eof)) {\n      this.unexpected();\n    }\n\n    this.finalizeRemainingComments();\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n\n    return expr;\n  }\n\n  parseExpression(disallowIn, refExpressionErrors) {\n    if (disallowIn) {\n      return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n    }\n\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  parseExpressionBase(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n\n    if (this.match(types$1.comma)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.expressions = [expr];\n\n      while (this.eat(types$1.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n\n    return expr;\n  }\n\n  parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {\n    return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n  }\n\n  parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {\n    return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n  }\n\n  setOptionalParametersError(refExpressionErrors, resultError) {\n    var _resultError$pos;\n\n    refExpressionErrors.optionalParameters = (_resultError$pos = resultError == null ? void 0 : resultError.pos) != null ? _resultError$pos : this.state.start;\n  }\n\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    if (this.isContextual(\"yield\")) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startPos, startLoc);\n        }\n\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n\n    if (this.match(types$1.parenL) || this.match(types$1.name)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startPos, startLoc);\n    }\n\n    if (this.state.type.isAssign) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n      const leftIsHackPipeExpression = left.type === \"BinaryExpression\" && left.operator === \"|>\" && this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"hack\";\n\n      if (leftIsHackPipeExpression) {\n        throw this.raise(this.state.start, ErrorMessages.PipeBodyIsTighter, operator);\n      }\n\n      if (this.match(types$1.eq)) {\n        node.left = this.toAssignable(left, true);\n        refExpressionErrors.doubleProto = -1;\n      } else {\n        node.left = left;\n      }\n\n      if (refExpressionErrors.shorthandAssign >= node.left.start) {\n        refExpressionErrors.shorthandAssign = -1;\n      }\n\n      this.checkLVal(left, \"assignment expression\");\n      this.next();\n      node.right = this.parseMaybeAssign();\n      return this.finishNode(node, \"AssignmentExpression\");\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  parseMaybeConditional(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n    if (this.eat(types$1.question)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(types$1.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    return expr;\n  }\n\n  parseExprOps(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnary(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startPos, startLoc, -1);\n  }\n\n  parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n    let prec = this.state.type.binop;\n\n    if (prec != null && (this.prodParam.hasIn || !this.match(types$1._in))) {\n      if (prec > minPrec) {\n        const op = this.state.type;\n\n        if (op === types$1.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n\n          this.checkPipelineAtInfixOperator(left, leftStartPos);\n        }\n\n        const node = this.startNodeAt(leftStartPos, leftStartLoc);\n        node.left = left;\n        node.operator = this.state.value;\n        const logical = op === types$1.logicalOR || op === types$1.logicalAND;\n        const coalesce = op === types$1.nullishCoalescing;\n\n        if (coalesce) {\n          prec = types$1.logicalAND.binop;\n        }\n\n        this.next();\n\n        if (op === types$1.pipeline && this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\") {\n          if (this.match(types$1.name) && this.state.value === \"await\" && this.prodParam.hasAwait) {\n            throw this.raise(this.state.start, ErrorMessages.UnexpectedAwaitAfterPipelineBody);\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        this.finishNode(node, logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\");\n        const nextOp = this.state.type;\n\n        if (coalesce && (nextOp === types$1.logicalOR || nextOp === types$1.logicalAND) || logical && nextOp === types$1.nullishCoalescing) {\n          throw this.raise(this.state.start, ErrorMessages.MixingCoalesceWithLogical);\n        }\n\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n    }\n\n    return left;\n  }\n\n  parseExprOpRightExpr(op, prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    switch (op) {\n      case types$1.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              const bodyExpr = this.parseHackPipeBody(op, prec);\n              this.checkHackPipeBodyEarlyErrors(startPos);\n              return bodyExpr;\n            });\n\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              const childExpr = this.parseHackPipeBody(op, prec);\n              return this.parseSmartPipelineBodyInStyle(childExpr, startPos, startLoc);\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  parseExprOpBaseRightExpr(op, prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, op.rightAssociative ? prec - 1 : prec);\n  }\n\n  parseHackPipeBody(op, prec) {\n    const bodyIsInGeneratorContext = this.prodParam.hasYield;\n    const bodyIsYieldExpression = bodyIsInGeneratorContext && this.isContextual(\"yield\");\n\n    if (bodyIsYieldExpression) {\n      throw this.raise(this.state.start, ErrorMessages.PipeBodyIsTighter, this.state.value);\n    } else {\n      return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  checkExponentialAfterUnary(node) {\n    if (this.match(types$1.exponent)) {\n      this.raise(node.argument.start, ErrorMessages.UnexpectedTokenUnaryExponentiation);\n    }\n  }\n\n  parseMaybeUnary(refExpressionErrors, sawUnary) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(\"await\");\n\n    if (isAwait && this.isAwaitAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startPos, startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n\n    const update = this.match(types$1.incDec);\n    const node = this.startNode();\n\n    if (this.state.type.prefix) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(types$1._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n\n      const isDelete = this.match(types$1._delete);\n      this.next();\n      node.argument = this.parseMaybeUnary(null, true);\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(node.start, ErrorMessages.StrictDelete);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(node.start, ErrorMessages.DeletePrivateField);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) this.checkExponentialAfterUnary(node);\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(node, update, refExpressionErrors);\n\n    if (isAwait) {\n      const startsExpr = this.hasPlugin(\"v8intrinsic\") ? this.state.type.startsExpr : this.state.type.startsExpr && !this.match(types$1.modulo);\n\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(startPos, ErrorMessages.AwaitNotInAsyncContext);\n        return this.parseAwait(startPos, startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  parseUpdate(node, update, refExpressionErrors) {\n    if (update) {\n      this.checkLVal(node.argument, \"prefix operation\");\n      return this.finishNode(node, \"UpdateExpression\");\n    }\n\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n\n    while (this.state.type.postfix && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.checkLVal(expr, \"postfix operation\");\n      this.next();\n      expr = this.finishNode(node, \"UpdateExpression\");\n    }\n\n    return expr;\n  }\n\n  parseExprSubscripts(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startPos, startLoc);\n  }\n\n  parseSubscripts(base, startPos, startLoc, noCalls) {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false\n    };\n\n    do {\n      base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n\n    return base;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    if (!noCalls && this.eat(types$1.doubleColon)) {\n      return this.parseBind(base, startPos, startLoc, noCalls, state);\n    } else if (this.match(types$1.backQuote)) {\n      return this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (this.match(types$1.questionDot)) {\n      if (noCalls && this.lookaheadCharCode() === 40) {\n        state.stop = true;\n        return base;\n      }\n\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(types$1.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional);\n    } else if (optional || this.match(types$1.bracketL) || this.eat(types$1.dot)) {\n      return this.parseMember(base, startPos, startLoc, state, optional);\n    } else {\n      state.stop = true;\n      return base;\n    }\n  }\n\n  parseMember(base, startPos, startLoc, state, optional) {\n    const node = this.startNodeAt(startPos, startLoc);\n    const computed = this.eat(types$1.bracketL);\n    node.object = base;\n    node.computed = computed;\n    const privateName = !computed && this.match(types$1.privateName) && this.state.value;\n    const property = computed ? this.parseExpression() : privateName ? this.parsePrivateName() : this.parseIdentifier(true);\n\n    if (privateName !== false) {\n      if (node.object.type === \"Super\") {\n        this.raise(startPos, ErrorMessages.SuperPrivateField);\n      }\n\n      this.classScope.usePrivateName(privateName, property.start);\n    }\n\n    node.property = property;\n\n    if (computed) {\n      this.expect(types$1.bracketR);\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  parseBind(base, startPos, startLoc, noCalls, state) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(this.finishNode(node, \"BindExpression\"), startPos, startLoc, noCalls);\n  }\n\n  parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional) {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors = null;\n    this.state.maybeInArrowParameters = true;\n    this.next();\n    let node = this.startNodeAt(startPos, startLoc);\n    node.callee = base;\n\n    if (state.maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(types$1.parenR);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(types$1.parenR, base.type === \"Import\", base.type !== \"Super\", node, refExpressionErrors);\n    }\n\n    this.finishCallExpression(node, state.optionalChainMember);\n\n    if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      state.stop = true;\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      node = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node);\n    } else {\n      if (state.maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n\n      this.toReferencedArguments(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n\n  toReferencedArguments(node, isParenthesizedExpr) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  parseTaggedTemplateExpression(base, startPos, startLoc, state) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n\n    if (state.optionalChainMember) {\n      this.raise(startPos, ErrorMessages.OptionalChainingNoTemplate);\n    }\n\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base) {\n    return base.type === \"Identifier\" && base.name === \"async\" && this.state.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;\n  }\n\n  finishCallExpression(node, optional) {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectPlugin(\"importAssertions\");\n          }\n        }\n      }\n\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(node.start, ErrorMessages.ImportCallArity, this.hasPlugin(\"importAssertions\") || this.hasPlugin(\"moduleAttributes\") ? \"one or two arguments\" : \"one argument\");\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(arg.start, ErrorMessages.ImportCallSpreadArgument);\n          }\n        }\n      }\n    }\n\n    return this.finishNode(node, optional ? \"OptionalCallExpression\" : \"CallExpression\");\n  }\n\n  parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {\n    const elts = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types$1.comma);\n\n        if (this.match(close)) {\n          if (dynamicImport && !this.hasPlugin(\"importAssertions\") && !this.hasPlugin(\"moduleAttributes\")) {\n            this.raise(this.state.lastTokStart, ErrorMessages.ImportCallArgumentTrailingComma);\n          }\n\n          if (nodeForExtra) {\n            this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n          }\n\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return elts;\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(types$1.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    var _call$extra;\n\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(types$1.arrow);\n    this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingComma);\n    setInnerComments(node, call.innerComments);\n    setInnerComments(node, call.callee.trailingComments);\n    return node;\n  }\n\n  parseNoCallExpr() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    let node;\n\n    switch (this.state.type) {\n      case types$1._super:\n        return this.parseSuper();\n\n      case types$1._import:\n        node = this.startNode();\n        this.next();\n\n        if (this.match(types$1.dot)) {\n          return this.parseImportMetaProperty(node);\n        }\n\n        if (!this.match(types$1.parenL)) {\n          this.raise(this.state.lastTokStart, ErrorMessages.UnsupportedImport);\n        }\n\n        return this.finishNode(node, \"Import\");\n\n      case types$1._this:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case types$1.name:\n        {\n          if (this.isContextual(\"module\") && this.lookaheadCharCode() === 123 && !this.hasFollowingLineBreak()) {\n            return this.parseModuleExpression();\n          }\n\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n            if (this.match(types$1._function)) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseFunction(this.startNodeAtNode(id), undefined, true);\n            } else if (this.match(types$1.name)) {\n              if (this.lookaheadCharCode() === 61) {\n                return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));\n              } else {\n                return id;\n              }\n            } else if (this.match(types$1._do)) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (canBeArrow && this.match(types$1.arrow) && !this.canInsertSemicolon()) {\n            this.next();\n            return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);\n          }\n\n          return id;\n        }\n\n      case types$1._do:\n        {\n          return this.parseDo(this.startNode(), false);\n        }\n\n      case types$1.slash:\n      case types$1.slashAssign:\n        {\n          this.readRegexp();\n          return this.parseRegExpLiteral(this.state.value);\n        }\n\n      case types$1.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case types$1.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case types$1.decimal:\n        return this.parseDecimalLiteral(this.state.value);\n\n      case types$1.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case types$1._null:\n        return this.parseNullLiteral();\n\n      case types$1._true:\n        return this.parseBooleanLiteral(true);\n\n      case types$1._false:\n        return this.parseBooleanLiteral(false);\n\n      case types$1.parenL:\n        {\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          return this.parseParenAndDistinguishExpression(canBeArrow);\n        }\n\n      case types$1.bracketBarL:\n      case types$1.bracketHashL:\n        {\n          return this.parseArrayLike(this.state.type === types$1.bracketBarL ? types$1.bracketBarR : types$1.bracketR, false, true, refExpressionErrors);\n        }\n\n      case types$1.bracketL:\n        {\n          return this.parseArrayLike(types$1.bracketR, true, false, refExpressionErrors);\n        }\n\n      case types$1.braceBarL:\n      case types$1.braceHashL:\n        {\n          return this.parseObjectLike(this.state.type === types$1.braceBarL ? types$1.braceBarR : types$1.braceR, false, true, refExpressionErrors);\n        }\n\n      case types$1.braceL:\n        {\n          return this.parseObjectLike(types$1.braceR, false, false, refExpressionErrors);\n        }\n\n      case types$1._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case types$1.at:\n        this.parseDecorators();\n\n      case types$1._class:\n        node = this.startNode();\n        this.takeDecorators(node);\n        return this.parseClass(node, false);\n\n      case types$1._new:\n        return this.parseNewOrNewTarget();\n\n      case types$1.backQuote:\n        return this.parseTemplate(false);\n\n      case types$1.doubleColon:\n        {\n          node = this.startNode();\n          this.next();\n          node.object = null;\n          const callee = node.callee = this.parseNoCallExpr();\n\n          if (callee.type === \"MemberExpression\") {\n            return this.finishNode(node, \"BindExpression\");\n          } else {\n            throw this.raise(callee.start, ErrorMessages.UnsupportedBind);\n          }\n        }\n\n      case types$1.privateName:\n        {\n          const {\n            value,\n            start\n          } = this.state;\n          node = this.parsePrivateName();\n\n          if (this.match(types$1._in)) {\n            this.classScope.usePrivateName(value, start);\n          } else {\n            this.raise(start, ErrorMessages.PrivateInExpectedIn, value);\n          }\n\n          return node;\n        }\n\n      case types$1.moduloAssign:\n        if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"hack\" && this.getPluginOption(\"pipelineOperator\", \"topicToken\") === \"%\") {\n          this.state.value = \"%\";\n          this.state.type = types$1.modulo;\n          this.state.pos--;\n          this.state.end--;\n          this.state.endLoc.column--;\n        } else {\n          throw this.unexpected();\n        }\n\n      case types$1.modulo:\n      case types$1.hash:\n        {\n          const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n          if (pipeProposal) {\n            node = this.startNode();\n            const start = this.state.start;\n            const tokenType = this.state.type;\n            this.next();\n            return this.finishTopicReference(node, start, pipeProposal, tokenType);\n          }\n        }\n\n      case types$1.relational:\n        {\n          if (this.state.value === \"<\") {\n            const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n\n            if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {\n                this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n              }\n          }\n        }\n\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  finishTopicReference(node, start, pipeProposal, tokenType) {\n    if (this.testTopicReferenceConfiguration(pipeProposal, start, tokenType)) {\n      let nodeType;\n\n      if (pipeProposal === \"smart\") {\n        nodeType = \"PipelinePrimaryTopicReference\";\n      } else {\n        nodeType = \"TopicReference\";\n      }\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        if (pipeProposal === \"smart\") {\n          this.raise(start, ErrorMessages.PrimaryTopicNotAllowed);\n        } else {\n          this.raise(start, ErrorMessages.PipeTopicUnbound);\n        }\n      }\n\n      this.registerTopicReference();\n      return this.finishNode(node, nodeType);\n    } else {\n      throw this.raise(start, ErrorMessages.PipeTopicUnconfiguredToken, tokenType.label);\n    }\n  }\n\n  testTopicReferenceConfiguration(pipeProposal, start, tokenType) {\n    switch (pipeProposal) {\n      case \"hack\":\n        {\n          const pluginTopicToken = this.getPluginOption(\"pipelineOperator\", \"topicToken\");\n          return tokenType.label === pluginTopicToken;\n        }\n\n      case \"smart\":\n        return tokenType === types$1.hash;\n\n      default:\n        throw this.raise(start, ErrorMessages.PipeTopicRequiresHackPipes);\n    }\n  }\n\n  parseAsyncArrowUnaryFunction(node) {\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.pos, ErrorMessages.LineTerminatorBeforeArrow);\n    }\n\n    this.expect(types$1.arrow);\n    this.parseArrowExpression(node, params, true);\n    return node;\n  }\n\n  parseDo(node, isAsync) {\n    this.expectPlugin(\"doExpressions\");\n\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n\n    node.async = isAsync;\n    this.next();\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    if (isAsync) {\n      this.prodParam.enter(PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  parseSuper() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.match(types$1.parenL) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(node.start, ErrorMessages.SuperNotAllowed);\n    } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(node.start, ErrorMessages.UnexpectedSuper);\n    }\n\n    if (!this.match(types$1.parenL) && !this.match(types$1.bracketL) && !this.match(types$1.dot)) {\n      this.raise(node.start, ErrorMessages.UnsupportedSuper);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parseMaybePrivateName(isPrivateNameAllowed) {\n    const isPrivate = this.match(types$1.privateName);\n\n    if (isPrivate) {\n      if (!isPrivateNameAllowed) {\n        this.raise(this.state.start + 1, ErrorMessages.UnexpectedPrivateField);\n      }\n\n      return this.parsePrivateName();\n    } else {\n      return this.parseIdentifier(true);\n    }\n  }\n\n  parsePrivateName() {\n    const node = this.startNode();\n    const id = this.startNodeAt(this.state.start + 1, new Position(this.state.curLine, this.state.start + 1 - this.state.lineStart));\n    const name = this.state.value;\n    this.next();\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.prodParam.hasYield && this.match(types$1.dot)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"function\");\n      this.next();\n      return this.parseMetaProperty(node, meta, \"sent\");\n    }\n\n    return this.parseFunction(node);\n  }\n\n  parseMetaProperty(node, meta, propertyName) {\n    node.meta = meta;\n\n    if (meta.name === \"function\" && propertyName === \"sent\") {\n      if (this.isContextual(propertyName)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        this.unexpected();\n      }\n    }\n\n    const containsEsc = this.state.containsEsc;\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(node.property.start, ErrorMessages.UnsupportedMetaProperty, meta.name, propertyName);\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  parseImportMetaProperty(node) {\n    const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n    this.next();\n\n    if (this.isContextual(\"meta\")) {\n      if (!this.inModule) {\n        this.raise(id.start, SourceTypeModuleErrorMessages.ImportMetaOutsideModule);\n      }\n\n      this.sawUnambiguousESM = true;\n    }\n\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n\n  parseLiteralAtNode(value, type, node) {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode(node, type);\n  }\n\n  parseLiteral(value, type) {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value) {\n    return this.parseLiteral(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value) {\n    return this.parseLiteral(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value) {\n    return this.parseLiteral(value, \"BigIntLiteral\");\n  }\n\n  parseDecimalLiteral(value) {\n    return this.parseLiteral(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value) {\n    const node = this.parseLiteral(value.value, \"RegExpLiteral\");\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    return node;\n  }\n\n  parseBooleanLiteral(value) {\n    const node = this.startNode();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  parseParenAndDistinguishExpression(canBeArrow) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let val;\n    this.next();\n    this.expressionScope.enter(newArrowHeadScope());\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n    const innerStartPos = this.state.start;\n    const innerStartLoc = this.state.startLoc;\n    const exprList = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStart;\n    let optionalCommaStart;\n\n    while (!this.match(types$1.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types$1.comma, refExpressionErrors.optionalParameters === -1 ? null : refExpressionErrors.optionalParameters);\n\n        if (this.match(types$1.parenR)) {\n          optionalCommaStart = this.state.start;\n          break;\n        }\n      }\n\n      if (this.match(types$1.ellipsis)) {\n        const spreadNodeStartPos = this.state.start;\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStart = this.state.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartPos, spreadNodeStartLoc));\n        this.checkCommaAfterRest(41);\n        break;\n      } else {\n        exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));\n      }\n    }\n\n    const innerEndPos = this.state.lastTokEnd;\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(types$1.parenR);\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let arrowNode = this.startNodeAt(startPos, startLoc);\n\n    if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      return arrowNode;\n    }\n\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStart);\n    }\n\n    if (optionalCommaStart) this.unexpected(optionalCommaStart);\n    if (spreadStart) this.unexpected(spreadStart);\n    this.checkExpressionErrors(refExpressionErrors, true);\n    this.toReferencedListDeep(exprList, true);\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNode(val, \"SequenceExpression\");\n      val.end = innerEndPos;\n      val.loc.end = innerEndLoc;\n    } else {\n      val = exprList[0];\n    }\n\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(val, \"parenthesized\", true);\n      this.addExtra(val, \"parenStart\", startPos);\n      return val;\n    }\n\n    const parenExpression = this.startNodeAt(startPos, startLoc);\n    parenExpression.expression = val;\n    this.finishNode(parenExpression, \"ParenthesizedExpression\");\n    return parenExpression;\n  }\n\n  shouldParseArrow(params) {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(node) {\n    if (this.eat(types$1.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    return node;\n  }\n\n  parseNewOrNewTarget() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.match(types$1.dot)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n      this.next();\n      const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n        this.raise(metaProp.start, ErrorMessages.UnexpectedNewTarget);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node);\n  }\n\n  parseNew(node) {\n    node.callee = this.parseNoCallExpr();\n\n    if (node.callee.type === \"Import\") {\n      this.raise(node.callee.start, ErrorMessages.ImportCallNotNewExpression);\n    } else if (this.isOptionalChain(node.callee)) {\n      this.raise(this.state.lastTokEnd, ErrorMessages.OptionalChainingNoNew);\n    } else if (this.eat(types$1.questionDot)) {\n      this.raise(this.state.start, ErrorMessages.OptionalChainingNoNew);\n    }\n\n    this.parseNewArguments(node);\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewArguments(node) {\n    if (this.eat(types$1.parenL)) {\n      const args = this.parseExprList(types$1.parenR);\n      this.toReferencedList(args);\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n  }\n\n  parseTemplateElement(isTagged) {\n    const elem = this.startNode();\n\n    if (this.state.value === null) {\n      if (!isTagged) {\n        this.raise(this.state.start + 1, ErrorMessages.InvalidEscapeSequenceTemplate);\n      }\n    }\n\n    elem.value = {\n      raw: this.input.slice(this.state.start, this.state.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.state.value\n    };\n    this.next();\n    elem.tail = this.match(types$1.backQuote);\n    return this.finishNode(elem, \"TemplateElement\");\n  }\n\n  parseTemplate(isTagged) {\n    const node = this.startNode();\n    this.next();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n\n    while (!curElt.tail) {\n      this.expect(types$1.dollarBraceL);\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.expect(types$1.braceR);\n      node.quasis.push(curElt = this.parseTemplateElement(isTagged));\n    }\n\n    this.next();\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  parseTemplateSubstitution() {\n    return this.parseExpression();\n  }\n\n  parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash = Object.create(null);\n    let first = true;\n    const node = this.startNode();\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types$1.comma);\n\n        if (this.match(close)) {\n          this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n          break;\n        }\n      }\n\n      const prop = this.parsePropertyDefinition(isPattern, refExpressionErrors);\n\n      if (!isPattern) {\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (isRecord && !this.isObjectProperty(prop) && prop.type !== \"SpreadElement\") {\n        this.raise(prop.start, ErrorMessages.InvalidRecordProperty);\n      }\n\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n\n      node.properties.push(prop);\n    }\n\n    this.next();\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n\n    return this.finishNode(node, type);\n  }\n\n  maybeAsyncOrAccessorProp(prop) {\n    return !prop.computed && prop.key.type === \"Identifier\" && (this.isLiteralPropertyName() || this.match(types$1.bracketL) || this.match(types$1.star));\n  }\n\n  parsePropertyDefinition(isPattern, refExpressionErrors) {\n    let decorators = [];\n\n    if (this.match(types$1.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(this.state.start, ErrorMessages.UnsupportedPropertyDecorator);\n      }\n\n      while (this.match(types$1.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode();\n    let isGenerator = false;\n    let isAsync = false;\n    let isAccessor = false;\n    let startPos;\n    let startLoc;\n\n    if (this.match(types$1.ellipsis)) {\n      if (decorators.length) this.unexpected();\n\n      if (isPattern) {\n        this.next();\n        prop.argument = this.parseIdentifier();\n        this.checkCommaAfterRest(125);\n        return this.finishNode(prop, \"RestElement\");\n      }\n\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (isPattern || refExpressionErrors) {\n      startPos = this.state.start;\n      startLoc = this.state.startLoc;\n    }\n\n    if (!isPattern) {\n      isGenerator = this.eat(types$1.star);\n    }\n\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop, false);\n\n    if (!isPattern && !isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const keyName = key.name;\n\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(types$1.star);\n        this.parsePropertyName(prop, false);\n      }\n\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n\n        if (this.match(types$1.star)) {\n          isGenerator = true;\n          this.raise(this.state.pos, ErrorMessages.AccessorIsGenerator, keyName);\n          this.next();\n        }\n\n        this.parsePropertyName(prop, false);\n      }\n    }\n\n    this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n    return prop;\n  }\n\n  getGetterSetterExpectedParamCount(method) {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  getObjectOrClassMethodParams(method) {\n    return method.params;\n  }\n\n  checkGetterSetterParams(method) {\n    var _params;\n\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    const start = method.start;\n\n    if (params.length !== paramCount) {\n      if (method.kind === \"get\") {\n        this.raise(start, ErrorMessages.BadGetterArity);\n      } else {\n        this.raise(start, ErrorMessages.BadSetterArity);\n      }\n    }\n\n    if (method.kind === \"set\" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === \"RestElement\") {\n      this.raise(start, ErrorMessages.BadSetterRestParameter);\n    }\n  }\n\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    if (isAccessor) {\n      this.parseMethod(prop, isGenerator, false, false, false, \"ObjectMethod\");\n      this.checkGetterSetterParams(prop);\n      return prop;\n    }\n\n    if (isAsync || isGenerator || this.match(types$1.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(prop, isGenerator, isAsync, false, false, \"ObjectMethod\");\n    }\n  }\n\n  parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n    prop.shorthand = false;\n\n    if (this.eat(types$1.colon)) {\n      prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      this.checkReservedWord(prop.key.name, prop.key.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(startPos, startLoc, cloneIdentifier(prop.key));\n      } else if (this.match(types$1.eq) && refExpressionErrors) {\n        if (refExpressionErrors.shorthandAssign === -1) {\n          refExpressionErrors.shorthandAssign = this.state.start;\n        }\n\n        prop.value = this.parseMaybeDefault(startPos, startLoc, cloneIdentifier(prop.key));\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n\n      prop.shorthand = true;\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n    if (!node) this.unexpected();\n    return node;\n  }\n\n  parsePropertyName(prop, isPrivateNameAllowed) {\n    if (this.eat(types$1.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(types$1.bracketR);\n    } else {\n      const oldInPropertyName = this.state.inPropertyName;\n      this.state.inPropertyName = true;\n      const type = this.state.type;\n      prop.key = type === types$1.num || type === types$1.string || type === types$1.bigint || type === types$1.decimal ? this.parseExprAtom() : this.parseMaybePrivateName(isPrivateNameAllowed);\n\n      if (type !== types$1.privateName) {\n        prop.computed = false;\n      }\n\n      this.state.inPropertyName = oldInPropertyName;\n    }\n\n    return prop.key;\n  }\n\n  initFunction(node, isAsync) {\n    node.id = null;\n    node.generator = false;\n    node.async = !!isAsync;\n  }\n\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    this.initFunction(node, isAsync);\n    node.generator = !!isGenerator;\n    const allowModifiers = isConstructor;\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, allowModifiers);\n    this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    return node;\n  }\n\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(node, isTuple ? \"TupleExpression\" : \"ArrayExpression\");\n  }\n\n  parseArrowExpression(node, params, isAsync, trailingCommaPos) {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n\n    if (!this.match(types$1.bracketL) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaPos);\n    }\n\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(node, params, trailingCommaPos) {\n    node.params = this.toAssignableList(params, trailingCommaPos, false);\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    this.parseFunctionBody(node, false, isMethod);\n    this.finishNode(node, type);\n  }\n\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    const isExpression = allowExpression && !this.match(types$1.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      node.body = this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(true, false, hasStrictModeDirective => {\n        const nonSimple = !this.isSimpleParamList(node.params);\n\n        if (hasStrictModeDirective && nonSimple) {\n          const errorPos = (node.kind === \"method\" || node.kind === \"constructor\") && !!node.key ? node.key.end : node.start;\n          this.raise(errorPos, ErrorMessages.IllegalLanguageModeDirective);\n        }\n\n        const strictModeChanged = !oldStrict && this.state.strict;\n        this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);\n\n        if (this.state.strict && node.id) {\n          this.checkLVal(node.id, \"function name\", BIND_OUTSIDE, undefined, undefined, strictModeChanged);\n        }\n      });\n      this.prodParam.exit();\n      this.expressionScope.exit();\n      this.state.labels = oldLabels;\n    }\n  }\n\n  isSimpleParamList(params) {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (params[i].type !== \"Identifier\") return false;\n    }\n\n    return true;\n  }\n\n  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {\n    const checkClashes = new Set();\n\n    for (const param of node.params) {\n      this.checkLVal(param, \"function parameter list\", BIND_VAR, allowDuplicates ? null : checkClashes, undefined, strictModeChanged);\n    }\n  }\n\n  parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types$1.comma);\n\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n          }\n\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n\n    return elts;\n  }\n\n  parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {\n    let elt;\n\n    if (this.match(types$1.comma)) {\n      if (!allowEmpty) {\n        this.raise(this.state.pos, ErrorMessages.UnexpectedToken, \",\");\n      }\n\n      elt = null;\n    } else if (this.match(types$1.ellipsis)) {\n      const spreadNodeStartPos = this.state.start;\n      const spreadNodeStartLoc = this.state.startLoc;\n      elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartPos, spreadNodeStartLoc);\n    } else if (this.match(types$1.question)) {\n      this.expectPlugin(\"partialApplication\");\n\n      if (!allowPlaceholder) {\n        this.raise(this.state.start, ErrorMessages.UnexpectedArgumentPlaceholder);\n      }\n\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);\n    }\n\n    return elt;\n  }\n\n  parseIdentifier(liberal) {\n    const node = this.startNode();\n    const name = this.parseIdentifierName(node.start, liberal);\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node, name) {\n    node.name = name;\n    node.loc.identifierName = name;\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(pos, liberal) {\n    let name;\n    const {\n      start,\n      type\n    } = this.state;\n\n    if (type === types$1.name) {\n      name = this.state.value;\n    } else if (type.keyword) {\n      name = type.keyword;\n    } else {\n      throw this.unexpected();\n    }\n\n    if (liberal) {\n      this.state.type = types$1.name;\n    } else {\n      this.checkReservedWord(name, start, !!type.keyword, false);\n    }\n\n    this.next();\n    return name;\n  }\n\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n    if (word.length > 10) {\n      return;\n    }\n\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(startLoc, ErrorMessages.YieldBindingIdentifier);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(startLoc, ErrorMessages.AwaitBindingIdentifier);\n        return;\n      } else if (this.scope.inStaticBlock) {\n        this.raise(startLoc, ErrorMessages.AwaitBindingIdentifierInStaticBlock);\n        return;\n      } else {\n        this.expressionScope.recordAsyncArrowParametersError(startLoc, ErrorMessages.AwaitBindingIdentifier);\n      }\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(startLoc, ErrorMessages.ArgumentsInClass);\n        return;\n      }\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(startLoc, ErrorMessages.UnexpectedKeyword, word);\n      return;\n    }\n\n    const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(startLoc, ErrorMessages.UnexpectedReservedWord, word);\n    }\n  }\n\n  isAwaitAllowed() {\n    if (this.prodParam.hasAwait) return true;\n\n    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n      return true;\n    }\n\n    return false;\n  }\n\n  parseAwait(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.AwaitExpressionFormalParameter);\n\n    if (this.eat(types$1.star)) {\n      this.raise(node.start, ErrorMessages.ObsoleteAwaitStar);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousAwait() {\n    return this.hasPrecedingLineBreak() || this.match(types$1.plusMin) || this.match(types$1.parenL) || this.match(types$1.bracketL) || this.match(types$1.backQuote) || this.match(types$1.regexp) || this.match(types$1.slash) || this.hasPlugin(\"v8intrinsic\") && this.match(types$1.modulo);\n  }\n\n  parseYield() {\n    const node = this.startNode();\n    this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.YieldInParameter);\n    this.next();\n    let delegating = false;\n    let argument = null;\n\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(types$1.star);\n\n      switch (this.state.type) {\n        case types$1.semi:\n        case types$1.eof:\n        case types$1.braceR:\n        case types$1.parenR:\n        case types$1.bracketR:\n        case types$1.braceBarR:\n        case types$1.colon:\n        case types$1.comma:\n          if (!delegating) break;\n\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  checkPipelineAtInfixOperator(left, leftStartPos) {\n    if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n      if (left.type === \"SequenceExpression\") {\n        this.raise(leftStartPos, ErrorMessages.PipelineHeadSequenceExpression);\n      }\n    }\n  }\n\n  checkHackPipeBodyEarlyErrors(startPos) {\n    if (this.match(types$1.arrow)) {\n      throw this.raise(this.state.start, ErrorMessages.PipeBodyIsTighter, types$1.arrow.label);\n    } else if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(startPos, ErrorMessages.PipeTopicUnused);\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr, startPos, startLoc) {\n    const bodyNode = this.startNodeAt(startPos, startLoc);\n\n    if (this.isSimpleReference(childExpr)) {\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      this.checkSmartPipeTopicBodyEarlyErrors(startPos);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression) {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return !expression.computed && this.isSimpleReference(expression.object);\n\n      case \"Identifier\":\n        return true;\n\n      default:\n        return false;\n    }\n  }\n\n  checkSmartPipeTopicBodyEarlyErrors(startPos) {\n    if (this.match(types$1.arrow)) {\n      throw this.raise(this.state.start, ErrorMessages.PipelineBodyNoArrow);\n    } else if (!this.topicReferenceWasUsedInCurrentContext()) {\n        this.raise(startPos, ErrorMessages.PipelineTopicUnused);\n      }\n  }\n\n  withTopicBindingContext(callback) {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      maxNumOfResolvableTopics: 1,\n      maxTopicIndex: null\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  withSmartMixTopicForbiddingContext(callback) {\n    const proposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (proposal === \"smart\") {\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        maxNumOfResolvableTopics: 0,\n        maxTopicIndex: null\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext(callback) {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n\n    return callback();\n  }\n\n  disallowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n\n    return callback();\n  }\n\n  registerTopicReference() {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext() {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext() {\n    return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;\n  }\n\n  parseFSharpPipelineBody(prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n    const ret = this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, prec);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return ret;\n  }\n\n  parseModuleExpression() {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode();\n    this.next();\n    this.eat(types$1.braceL);\n    const revertScopes = this.initializeScopes(true);\n    this.enterInitialScopes();\n    const program = this.startNode();\n\n    try {\n      node.body = this.parseProgram(program, types$1.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n\n    this.eat(types$1.braceR);\n    return this.finishNode(node, \"ModuleExpression\");\n  }\n\n}\n\nconst loopLabel = {\n  kind: \"loop\"\n},\n      switchLabel = {\n  kind: \"switch\"\n};\nconst FUNC_NO_FLAGS = 0b000,\n      FUNC_STATEMENT = 0b001,\n      FUNC_HANGING_STATEMENT = 0b010,\n      FUNC_NULLABLE_ID = 0b100;\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\nfunction babel7CompatTokens(tokens) {\n  {\n    for (let i = 0; i < tokens.length; i++) {\n      const token = tokens[i];\n\n      if (token.type === types$1.privateName) {\n        const {\n          loc,\n          start,\n          value,\n          end\n        } = token;\n        const hashEndPos = start + 1;\n        const hashEndLoc = new Position(loc.start.line, loc.start.column + 1);\n        tokens.splice(i, 1, new Token({\n          type: types$1.hash,\n          value: \"#\",\n          start: start,\n          end: hashEndPos,\n          startLoc: loc.start,\n          endLoc: hashEndLoc\n        }), new Token({\n          type: types$1.name,\n          value: value,\n          start: hashEndPos,\n          end: end,\n          startLoc: hashEndLoc,\n          endLoc: loc.end\n        }));\n      }\n    }\n  }\n  return tokens;\n}\n\nclass StatementParser extends ExpressionParser {\n  parseTopLevel(file, program) {\n    file.program = this.parseProgram(program);\n    file.comments = this.state.comments;\n    if (this.options.tokens) file.tokens = babel7CompatTokens(this.tokens);\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(program, end = types$1.eof, sourceType = this.options.sourceType) {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n\n    if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {\n      for (const [name] of Array.from(this.scope.undefinedExports)) {\n        const pos = this.scope.undefinedExports.get(name);\n        this.raise(pos, ErrorMessages.ModuleExportUndefined, name);\n      }\n    }\n\n    return this.finishNode(program, \"Program\");\n  }\n\n  stmtToDirective(stmt) {\n    const directive = stmt;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n    const directiveLiteral = directive.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = directiveLiteral.value = raw.slice(1, -1);\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    directiveLiteral.type = \"DirectiveLiteral\";\n    return directive;\n  }\n\n  parseInterpreterDirective() {\n    if (!this.match(types$1.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(context) {\n    if (!this.isContextual(\"let\")) {\n      return false;\n    }\n\n    return this.isLetKeyword(context);\n  }\n\n  isLetKeyword(context) {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n\n    if (nextCh === 92 || nextCh === 91) {\n      return true;\n    }\n\n    if (context) return false;\n    if (nextCh === 123) return true;\n\n    if (isIdentifierStart(nextCh)) {\n      keywordRelationalOperator.lastIndex = next;\n      const matched = keywordRelationalOperator.exec(this.input);\n\n      if (matched !== null) {\n        const endCh = this.codePointAtPos(next + matched[0].length);\n\n        if (!isIdentifierChar(endCh) && endCh !== 92) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  parseStatement(context, topLevel) {\n    if (this.match(types$1.at)) {\n      this.parseDecorators(true);\n    }\n\n    return this.parseStatementContent(context, topLevel);\n  }\n\n  parseStatementContent(context, topLevel) {\n    let starttype = this.state.type;\n    const node = this.startNode();\n    let kind;\n\n    if (this.isLet(context)) {\n      starttype = types$1._var;\n      kind = \"let\";\n    }\n\n    switch (starttype) {\n      case types$1._break:\n      case types$1._continue:\n        return this.parseBreakContinueStatement(node, starttype.keyword);\n\n      case types$1._debugger:\n        return this.parseDebuggerStatement(node);\n\n      case types$1._do:\n        return this.parseDoStatement(node);\n\n      case types$1._for:\n        return this.parseForStatement(node);\n\n      case types$1._function:\n        if (this.lookaheadCharCode() === 46) break;\n\n        if (context) {\n          if (this.state.strict) {\n            this.raise(this.state.start, ErrorMessages.StrictFunction);\n          } else if (context !== \"if\" && context !== \"label\") {\n            this.raise(this.state.start, ErrorMessages.SloppyFunction);\n          }\n        }\n\n        return this.parseFunctionStatement(node, false, !context);\n\n      case types$1._class:\n        if (context) this.unexpected();\n        return this.parseClass(node, true);\n\n      case types$1._if:\n        return this.parseIfStatement(node);\n\n      case types$1._return:\n        return this.parseReturnStatement(node);\n\n      case types$1._switch:\n        return this.parseSwitchStatement(node);\n\n      case types$1._throw:\n        return this.parseThrowStatement(node);\n\n      case types$1._try:\n        return this.parseTryStatement(node);\n\n      case types$1._const:\n      case types$1._var:\n        kind = kind || this.state.value;\n\n        if (context && kind !== \"var\") {\n          this.raise(this.state.start, ErrorMessages.UnexpectedLexicalDeclaration);\n        }\n\n        return this.parseVarStatement(node, kind);\n\n      case types$1._while:\n        return this.parseWhileStatement(node);\n\n      case types$1._with:\n        return this.parseWithStatement(node);\n\n      case types$1.braceL:\n        return this.parseBlock();\n\n      case types$1.semi:\n        return this.parseEmptyStatement(node);\n\n      case types$1._import:\n        {\n          const nextTokenCharCode = this.lookaheadCharCode();\n\n          if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {\n              break;\n            }\n        }\n\n      case types$1._export:\n        {\n          if (!this.options.allowImportExportEverywhere && !topLevel) {\n            this.raise(this.state.start, ErrorMessages.UnexpectedImportExport);\n          }\n\n          this.next();\n          let result;\n\n          if (starttype === types$1._import) {\n            result = this.parseImport(node);\n\n            if (result.type === \"ImportDeclaration\" && (!result.importKind || result.importKind === \"value\")) {\n              this.sawUnambiguousESM = true;\n            }\n          } else {\n            result = this.parseExport(node);\n\n            if (result.type === \"ExportNamedDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportAllDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportDefaultDeclaration\") {\n              this.sawUnambiguousESM = true;\n            }\n          }\n\n          this.assertModuleNodeAllowed(node);\n          return result;\n        }\n\n      default:\n        {\n          if (this.isAsyncFunction()) {\n            if (context) {\n              this.raise(this.state.start, ErrorMessages.AsyncFunctionInSingleStatementContext);\n            }\n\n            this.next();\n            return this.parseFunctionStatement(node, true, !context);\n          }\n        }\n    }\n\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon)) {\n      return this.parseLabeledStatement(node, maybeName, expr, context);\n    } else {\n      return this.parseExpressionStatement(node, expr);\n    }\n  }\n\n  assertModuleNodeAllowed(node) {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(node.start, SourceTypeModuleErrorMessages.ImportOutsideModule);\n    }\n  }\n\n  takeDecorators(node) {\n    const decorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    if (decorators.length) {\n      node.decorators = decorators;\n      this.resetStartLocationFromNode(node, decorators[0]);\n      this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n    }\n  }\n\n  canHaveLeadingDecorator() {\n    return this.match(types$1._class);\n  }\n\n  parseDecorators(allowExport) {\n    const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    while (this.match(types$1.at)) {\n      const decorator = this.parseDecorator();\n      currentContextDecorators.push(decorator);\n    }\n\n    if (this.match(types$1._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (this.hasPlugin(\"decorators\") && !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n        this.raise(this.state.start, ErrorMessages.DecoratorExportClass);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(this.state.start, ErrorMessages.UnexpectedLeadingDecorator);\n    }\n  }\n\n  parseDecorator() {\n    this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n    const node = this.startNode();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      this.state.decoratorStack.push([]);\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let expr;\n\n      if (this.eat(types$1.parenL)) {\n        expr = this.parseExpression();\n        this.expect(types$1.parenR);\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(types$1.dot)) {\n          const node = this.startNodeAt(startPos, startLoc);\n          node.object = expr;\n          node.property = this.parseIdentifier(true);\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n      }\n\n      node.expression = this.parseMaybeDecoratorArguments(expr);\n      this.state.decoratorStack.pop();\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(expr) {\n    if (this.eat(types$1.parenL)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(node, keyword) {\n    const isBreak = keyword === \"break\";\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, keyword);\n    return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n  }\n\n  verifyBreakContinue(node, keyword) {\n    const isBreak = keyword === \"break\";\n    let i;\n\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n\n    if (i === this.state.labels.length) {\n      this.raise(node.start, ErrorMessages.IllegalBreakContinue, keyword);\n    }\n  }\n\n  parseDebuggerStatement(node) {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression() {\n    this.expect(types$1.parenL);\n    const val = this.parseExpression();\n    this.expect(types$1.parenR);\n    return val;\n  }\n\n  parseDoStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"do\"));\n    this.state.labels.pop();\n    this.expect(types$1._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(types$1.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  parseForStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    let awaitAt = -1;\n\n    if (this.isAwaitAllowed() && this.eatContextual(\"await\")) {\n      awaitAt = this.state.lastTokStart;\n    }\n\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(types$1.parenL);\n\n    if (this.match(types$1.semi)) {\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n\n      return this.parseFor(node, null);\n    }\n\n    const startsWithLet = this.isContextual(\"let\");\n    const isLet = startsWithLet && this.isLetKeyword();\n\n    if (this.match(types$1._var) || this.match(types$1._const) || isLet) {\n      const init = this.startNode();\n      const kind = isLet ? \"let\" : this.state.value;\n      this.next();\n      this.parseVar(init, true, kind);\n      this.finishNode(init, \"VariableDeclaration\");\n\n      if ((this.match(types$1._in) || this.isContextual(\"of\")) && init.declarations.length === 1) {\n        return this.parseForIn(node, init, awaitAt);\n      }\n\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n\n      return this.parseFor(node, init);\n    }\n\n    const startsWithUnescapedName = this.match(types$1.name) && !this.state.containsEsc;\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(\"of\");\n\n    if (isForOf) {\n      if (startsWithLet) {\n        this.raise(init.start, ErrorMessages.ForOfLet);\n      } else if (awaitAt === -1 && startsWithUnescapedName && init.type === \"Identifier\" && init.name === \"async\") {\n        this.raise(init.start, ErrorMessages.ForOfAsync);\n      }\n    }\n\n    if (isForOf || this.match(types$1._in)) {\n      this.toAssignable(init, true);\n      const description = isForOf ? \"for-of statement\" : \"for-in statement\";\n      this.checkLVal(init, description);\n      return this.parseForIn(node, init, awaitAt);\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n\n    return this.parseFor(node, init);\n  }\n\n  parseFunctionStatement(node, isAsync, declarationPosition) {\n    this.next();\n    return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), isAsync);\n  }\n\n  parseIfStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    node.consequent = this.parseStatement(\"if\");\n    node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(node) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(this.state.start, ErrorMessages.IllegalReturn);\n    }\n\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  parseSwitchStatement(node) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases = node.cases = [];\n    this.expect(types$1.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n    let cur;\n\n    for (let sawDefault; !this.match(types$1.braceR);) {\n      if (this.match(types$1._case) || this.match(types$1._default)) {\n        const isCase = this.match(types$1._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        cases.push(cur = this.startNode());\n        cur.consequent = [];\n        this.next();\n\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(this.state.lastTokStart, ErrorMessages.MultipleDefaultsInSwitch);\n          }\n\n          sawDefault = true;\n          cur.test = null;\n        }\n\n        this.expect(types$1.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatement(null));\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next();\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(node) {\n    this.next();\n\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.lastTokEnd, ErrorMessages.NewlineAfterThrow);\n    }\n\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam() {\n    const param = this.parseBindingAtom();\n    const simple = param.type === \"Identifier\";\n    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, \"catch clause\", BIND_LEXICAL);\n    return param;\n  }\n\n  parseTryStatement(node) {\n    this.next();\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(types$1._catch)) {\n      const clause = this.startNode();\n      this.next();\n\n      if (this.match(types$1.parenL)) {\n        this.expect(types$1.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(types$1.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n\n      clause.body = this.withSmartMixTopicForbiddingContext(() => this.parseBlock(false, false));\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(node.start, ErrorMessages.NoCatchOrFinally);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  parseVarStatement(node, kind) {\n    this.next();\n    this.parseVar(node, false, kind);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  parseWhileStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"while\"));\n    this.state.labels.pop();\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(node) {\n    if (this.state.strict) {\n      this.raise(this.state.start, ErrorMessages.StrictWith);\n    }\n\n    this.next();\n    node.object = this.parseHeaderExpression();\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"with\"));\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node) {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  parseLabeledStatement(node, maybeName, expr, context) {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(expr.start, ErrorMessages.LabelRedeclaration, maybeName);\n      }\n    }\n\n    const kind = this.state.type.isLoop ? \"loop\" : this.match(types$1._switch) ? \"switch\" : null;\n\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start\n    });\n    node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(node, expr) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {\n    const node = this.startNode();\n\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n\n    this.expect(types$1.braceL);\n\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n\n    this.parseBlockBody(node, allowDirectives, false, types$1.braceR, afterBlockParse);\n\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt) {\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"StringLiteral\" && !stmt.expression.extra.parenthesized;\n  }\n\n  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {\n    const body = node.body = [];\n    const directives = node.directives = [];\n    this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);\n  }\n\n  parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = this.parseStatement(null, topLevel);\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (!hasStrictModeDirective && directive.value.value === \"use strict\") {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n\n        parsedNonDirective = true;\n        this.state.strictErrors.clear();\n      }\n\n      body.push(stmt);\n    }\n\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  parseFor(node, init) {\n    node.init = init;\n    this.semicolon(false);\n    node.test = this.match(types$1.semi) ? null : this.parseExpression();\n    this.semicolon(false);\n    node.update = this.match(types$1.parenR) ? null : this.parseExpression();\n    this.expect(types$1.parenR);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"for\"));\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  parseForIn(node, init, awaitAt) {\n    const isForIn = this.match(types$1._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt > -1) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt > -1;\n    }\n\n    if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) {\n      this.raise(init.start, ErrorMessages.ForInOfLoopInitializer, isForIn ? \"for-in\" : \"for-of\");\n    } else if (init.type === \"AssignmentPattern\") {\n      this.raise(init.start, ErrorMessages.InvalidLhs, \"for-loop\");\n    }\n\n    node.left = init;\n    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();\n    this.expect(types$1.parenR);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"for\"));\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  parseVar(node, isFor, kind) {\n    const declarations = node.declarations = [];\n    const isTypescript = this.hasPlugin(\"typescript\");\n    node.kind = kind;\n\n    for (;;) {\n      const decl = this.startNode();\n      this.parseVarId(decl, kind);\n\n      if (this.eat(types$1.eq)) {\n        decl.init = isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();\n      } else {\n        if (kind === \"const\" && !(this.match(types$1._in) || this.isContextual(\"of\"))) {\n          if (!isTypescript) {\n            this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Const declarations\");\n          }\n        } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.match(types$1._in) || this.isContextual(\"of\")))) {\n          this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Complex binding patterns\");\n        }\n\n        decl.init = null;\n      }\n\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(types$1.comma)) break;\n    }\n\n    return node;\n  }\n\n  parseVarId(decl, kind) {\n    decl.id = this.parseBindingAtom();\n    this.checkLVal(decl.id, \"variable declaration\", kind === \"var\" ? BIND_VAR : BIND_LEXICAL, undefined, kind !== \"var\");\n  }\n\n  parseFunction(node, statement = FUNC_NO_FLAGS, isAsync = false) {\n    const isStatement = statement & FUNC_STATEMENT;\n    const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n    const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n    this.initFunction(node, isAsync);\n\n    if (this.match(types$1.star) && isHangingStatement) {\n      this.raise(this.state.start, ErrorMessages.GeneratorInSingleStatementContext);\n    }\n\n    node.generator = this.eat(types$1.star);\n\n    if (isStatement) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isStatement) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, false);\n    this.withSmartMixTopicForbiddingContext(() => {\n      this.parseFunctionBodyAndFinish(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n    });\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isStatement && !isHangingStatement) {\n      this.registerFunctionStatementId(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n\n  parseFunctionId(requireId) {\n    return requireId || this.match(types$1.name) ? this.parseIdentifier() : null;\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    this.expect(types$1.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(types$1.parenR, 41, false, allowModifiers);\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node) {\n    if (!node.id) return;\n    this.scope.declareName(node.id.name, this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.start);\n  }\n\n  parseClass(node, isStatement, optionalId) {\n    this.next();\n    this.takeDecorators(node);\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n  }\n\n  isClassProperty() {\n    return this.match(types$1.eq) || this.match(types$1.semi) || this.match(types$1.braceR);\n  }\n\n  isClassMethod() {\n    return this.match(types$1.parenL);\n  }\n\n  isNonstaticConstructor(method) {\n    return !method.computed && !method.static && (method.key.name === \"constructor\" || method.key.value === \"constructor\");\n  }\n\n  parseClassBody(hadSuperClass, oldStrict) {\n    this.classScope.enter();\n    const state = {\n      hadConstructor: false,\n      hadSuperClass\n    };\n    let decorators = [];\n    const classBody = this.startNode();\n    classBody.body = [];\n    this.expect(types$1.braceL);\n    this.withSmartMixTopicForbiddingContext(() => {\n      while (!this.match(types$1.braceR)) {\n        if (this.eat(types$1.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(this.state.lastTokEnd, ErrorMessages.DecoratorSemicolon);\n          }\n\n          continue;\n        }\n\n        if (this.match(types$1.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode();\n\n        if (decorators.length) {\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (member.kind === \"constructor\" && member.decorators && member.decorators.length > 0) {\n          this.raise(member.start, ErrorMessages.DecoratorConstructor);\n        }\n      }\n    });\n    this.state.strict = oldStrict;\n    this.next();\n\n    if (decorators.length) {\n      throw this.raise(this.state.start, ErrorMessages.TrailingDecorator);\n    }\n\n    this.classScope.exit();\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  parseClassMemberFromModifier(classBody, member) {\n    const key = this.parseIdentifier(true);\n\n    if (this.isClassMethod()) {\n      const method = member;\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(classBody, method, false, false, false, false);\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop = member;\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(classBody, member, state) {\n    const isStatic = this.isContextual(\"static\");\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n\n      if (this.eat(types$1.braceL)) {\n        this.parseClassStaticBlock(classBody, member);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const publicMethod = member;\n    const privateMethod = member;\n    const publicProp = member;\n    const privateProp = member;\n    const method = publicMethod;\n    const publicMember = publicMethod;\n    member.static = isStatic;\n\n    if (this.eat(types$1.star)) {\n      method.kind = \"method\";\n      const isPrivateName = this.match(types$1.privateName);\n      this.parseClassElementName(method);\n\n      if (isPrivateName) {\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsGenerator);\n      }\n\n      this.pushClassMethod(classBody, publicMethod, true, false, false, false);\n      return;\n    }\n\n    const isContextual = this.match(types$1.name) && !this.state.containsEsc;\n    const isPrivate = this.match(types$1.privateName);\n    const key = this.parseClassElementName(member);\n    const maybeQuestionTokenStart = this.state.start;\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(key.start, ErrorMessages.DuplicateConstructor);\n        }\n\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(key.start, ErrorMessages.OverrideOnConstructor);\n        }\n\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (isContextual && key.name === \"async\" && !this.isLineTerminator()) {\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(types$1.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStart);\n      }\n\n      method.kind = \"method\";\n      const isPrivate = this.match(types$1.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAsync);\n        }\n\n        this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);\n      }\n    } else if (isContextual && (key.name === \"get\" || key.name === \"set\") && !(this.match(types$1.star) && this.isLineTerminator())) {\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = key.name;\n      const isPrivate = this.match(types$1.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAccessor);\n        }\n\n        this.pushClassMethod(classBody, publicMethod, false, false, false, false);\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (this.isLineTerminator()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  parseClassElementName(member) {\n    const {\n      type,\n      value,\n      start\n    } = this.state;\n\n    if ((type === types$1.name || type === types$1.string) && member.static && value === \"prototype\") {\n      this.raise(start, ErrorMessages.StaticPrototype);\n    }\n\n    if (type === types$1.privateName && value === \"constructor\") {\n      this.raise(start, ErrorMessages.ConstructorClassPrivateField);\n    }\n\n    return this.parsePropertyName(member, true);\n  }\n\n  parseClassStaticBlock(classBody, member) {\n    var _member$decorators;\n\n    this.expectPlugin(\"classStaticBlock\", member.start);\n    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    this.prodParam.enter(PARAM);\n    const body = member.body = [];\n    this.parseBlockOrModuleBlockBody(body, undefined, false, types$1.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode(member, \"StaticBlock\"));\n\n    if ((_member$decorators = member.decorators) != null && _member$decorators.length) {\n      this.raise(member.start, ErrorMessages.DecoratorStaticBlock);\n    }\n  }\n\n  pushClassProperty(classBody, prop) {\n    if (!prop.computed && (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")) {\n      this.raise(prop.key.start, ErrorMessages.ConstructorClassField);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(classBody, prop) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.start);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true));\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const node = this.parseMethod(method, isGenerator, isAsync, false, false, \"ClassPrivateMethod\", true);\n    classBody.body.push(node);\n    const kind = node.kind === \"get\" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === \"set\" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;\n    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.start);\n  }\n\n  parsePostMemberNameModifiers(methodOrProp) {}\n\n  parseClassPrivateProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  parseClassProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseInitializer(node) {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(PARAM);\n    node.value = this.eat(types$1.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {\n    if (this.match(types$1.name)) {\n      node.id = this.parseIdentifier();\n\n      if (isStatement) {\n        this.checkLVal(node.id, \"class name\", bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        this.unexpected(null, ErrorMessages.MissingClassName);\n      }\n    }\n  }\n\n  parseClassSuper(node) {\n    node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  parseExport(node) {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n    const parseAfterDefault = !hasDefault || this.eat(types$1.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(types$1.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      this.parseExportFrom(node, true);\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers || hasNamespace && parseAfterNamespace && !hasSpecifiers) {\n      throw this.unexpected(null, types$1.braceL);\n    }\n\n    let hasDeclaration;\n\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      this.parseExportFrom(node, isFromRequired);\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(node);\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      this.checkExport(node, true, false, !!node.source);\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(types$1._default)) {\n      node.declaration = this.parseExportDefaultExpression();\n      this.checkExport(node, true, true);\n      return this.finishNode(node, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, types$1.braceL);\n  }\n\n  eatExportStar(node) {\n    return this.eat(types$1.star);\n  }\n\n  maybeParseExportDefaultSpecifier(node) {\n    if (this.isExportDefaultSpecifier()) {\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node) {\n    if (this.isContextual(\"as\")) {\n      if (!node.specifiers) node.specifiers = [];\n      const specifier = this.startNodeAt(this.state.lastTokStart, this.state.lastTokStartLoc);\n      this.next();\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(this.finishNode(specifier, \"ExportNamespaceSpecifier\"));\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(node) {\n    if (this.match(types$1.braceL)) {\n      if (!node.specifiers) node.specifiers = [];\n      node.specifiers.push(...this.parseExportSpecifiers());\n      node.source = null;\n      node.declaration = null;\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportDeclaration(node) {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n\n    return false;\n  }\n\n  isAsyncFunction() {\n    if (!this.isContextual(\"async\")) return false;\n    const next = this.nextTokenStart();\n    return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression() {\n    const expr = this.startNode();\n    const isAsync = this.isAsyncFunction();\n\n    if (this.match(types$1._function) || isAsync) {\n      this.next();\n\n      if (isAsync) {\n        this.next();\n      }\n\n      return this.parseFunction(expr, FUNC_STATEMENT | FUNC_NULLABLE_ID, isAsync);\n    } else if (this.match(types$1._class)) {\n      return this.parseClass(expr, true, true);\n    } else if (this.match(types$1.at)) {\n      if (this.hasPlugin(\"decorators\") && this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n        this.raise(this.state.start, ErrorMessages.DecoratorBeforeExport);\n      }\n\n      this.parseDecorators(false);\n      return this.parseClass(expr, true, true);\n    } else if (this.match(types$1._const) || this.match(types$1._var) || this.isLet()) {\n      throw this.raise(this.state.start, ErrorMessages.UnsupportedDefaultExport);\n    } else {\n      const res = this.parseMaybeAssignAllowIn();\n      this.semicolon();\n      return res;\n    }\n  }\n\n  parseExportDeclaration(node) {\n    return this.parseStatement(null);\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.match(types$1.name)) {\n      const value = this.state.value;\n\n      if (value === \"async\" && !this.state.containsEsc || value === \"let\") {\n        return false;\n      }\n\n      if ((value === \"type\" || value === \"interface\") && !this.state.containsEsc) {\n        const l = this.lookahead();\n\n        if (l.type === types$1.name && l.value !== \"from\" || l.type === types$1.braceL) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(types$1._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n\n    if (this.input.charCodeAt(next) === 44 || this.match(types$1.name) && hasFrom) {\n      return true;\n    }\n\n    if (this.match(types$1._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));\n      return nextAfterFrom === 34 || nextAfterFrom === 39;\n    }\n\n    return false;\n  }\n\n  parseExportFrom(node, expect) {\n    if (this.eatContextual(\"from\")) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      const assertions = this.maybeParseImportAssertions();\n\n      if (assertions) {\n        node.assertions = assertions;\n      }\n    } else {\n      if (expect) {\n        this.unexpected();\n      } else {\n        node.source = null;\n      }\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration() {\n    if (this.match(types$1.at)) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n          this.unexpected(this.state.start, ErrorMessages.DecoratorBeforeExport);\n        } else {\n          return true;\n        }\n      }\n    }\n\n    return this.state.type.keyword === \"var\" || this.state.type.keyword === \"const\" || this.state.type.keyword === \"function\" || this.state.type.keyword === \"class\" || this.isLet() || this.isAsyncFunction();\n  }\n\n  checkExport(node, checkNames, isDefault, isFrom) {\n    if (checkNames) {\n      if (isDefault) {\n        this.checkDuplicateExports(node, \"default\");\n\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          var _declaration$extra;\n\n          const declaration = node.declaration;\n\n          if (declaration.type === \"Identifier\" && declaration.name === \"from\" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {\n            this.raise(declaration.start, ErrorMessages.ExportDefaultFromAsIdentifier);\n          }\n        }\n      } else if (node.specifiers && node.specifiers.length) {\n        for (const specifier of node.specifiers) {\n          const {\n            exported\n          } = specifier;\n          const exportedName = exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportedName);\n\n          if (!isFrom && specifier.local) {\n            const {\n              local\n            } = specifier;\n\n            if (local.type !== \"Identifier\") {\n              this.raise(specifier.start, ErrorMessages.ExportBindingIsString, local.value, exportedName);\n            } else {\n              this.checkReservedWord(local.name, local.start, true, false);\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        if (node.declaration.type === \"FunctionDeclaration\" || node.declaration.type === \"ClassDeclaration\") {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (const declaration of node.declaration.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n\n    const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    if (currentContextDecorators.length) {\n      throw this.raise(node.start, ErrorMessages.UnsupportedDecoratorExport);\n    }\n  }\n\n  checkDeclaration(node) {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(node, name) {\n    if (this.exportedIdentifiers.has(name)) {\n      this.raise(node.start, name === \"default\" ? ErrorMessages.DuplicateDefaultExport : ErrorMessages.DuplicateExport, name);\n    }\n\n    this.exportedIdentifiers.add(name);\n  }\n\n  parseExportSpecifiers() {\n    const nodes = [];\n    let first = true;\n    this.expect(types$1.braceL);\n\n    while (!this.eat(types$1.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types$1.comma);\n        if (this.eat(types$1.braceR)) break;\n      }\n\n      const node = this.startNode();\n      const isString = this.match(types$1.string);\n      const local = this.parseModuleExportName();\n      node.local = local;\n\n      if (this.eatContextual(\"as\")) {\n        node.exported = this.parseModuleExportName();\n      } else if (isString) {\n        node.exported = cloneStringLiteral(local);\n      } else {\n        node.exported = cloneIdentifier(local);\n      }\n\n      nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n    }\n\n    return nodes;\n  }\n\n  parseModuleExportName() {\n    if (this.match(types$1.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = result.value.match(loneSurrogate);\n\n      if (surrogate) {\n        this.raise(result.start, ErrorMessages.ModuleExportNameHasLoneSurrogate, surrogate[0].charCodeAt(0).toString(16));\n      }\n\n      return result;\n    }\n\n    return this.parseIdentifier(true);\n  }\n\n  parseImport(node) {\n    node.specifiers = [];\n\n    if (!this.match(types$1.string)) {\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      const parseNext = !hasDefault || this.eat(types$1.comma);\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(\"from\");\n    }\n\n    node.source = this.parseImportSource();\n    const assertions = this.maybeParseImportAssertions();\n\n    if (assertions) {\n      node.assertions = assertions;\n    } else {\n      const attributes = this.maybeParseModuleAttributes();\n\n      if (attributes) {\n        node.attributes = attributes;\n      }\n    }\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource() {\n    if (!this.match(types$1.string)) this.unexpected();\n    return this.parseExprAtom();\n  }\n\n  shouldParseDefaultImport(node) {\n    return this.match(types$1.name);\n  }\n\n  parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n    specifier.local = this.parseIdentifier();\n    this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  parseAssertEntries() {\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(types$1.braceR)) {\n        break;\n      }\n\n      const node = this.startNode();\n      const keyName = this.state.value;\n\n      if (attrNames.has(keyName)) {\n        this.raise(this.state.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, keyName);\n      }\n\n      attrNames.add(keyName);\n\n      if (this.match(types$1.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n\n      this.expect(types$1.colon);\n\n      if (!this.match(types$1.string)) {\n        throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n      }\n\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(types$1.comma));\n\n    return attrs;\n  }\n\n  maybeParseModuleAttributes() {\n    if (this.match(types$1._with) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n\n    const attrs = [];\n    const attributes = new Set();\n\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributeDifferentFromType, node.key.name);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, node.key.name);\n      }\n\n      attributes.add(node.key.name);\n      this.expect(types$1.colon);\n\n      if (!this.match(types$1.string)) {\n        throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n      }\n\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(types$1.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAssertions() {\n    if (this.isContextual(\"assert\") && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"importAssertions\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n\n    this.eat(types$1.braceL);\n    const attrs = this.parseAssertEntries();\n    this.eat(types$1.braceR);\n    return attrs;\n  }\n\n  maybeParseDefaultImportSpecifier(node) {\n    if (this.shouldParseDefaultImport(node)) {\n      this.parseImportSpecifierLocal(node, this.startNode(), \"ImportDefaultSpecifier\", \"default import specifier\");\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node) {\n    if (this.match(types$1.star)) {\n      const specifier = this.startNode();\n      this.next();\n      this.expectContextual(\"as\");\n      this.parseImportSpecifierLocal(node, specifier, \"ImportNamespaceSpecifier\", \"import namespace specifier\");\n      return true;\n    }\n\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node) {\n    let first = true;\n    this.expect(types$1.braceL);\n\n    while (!this.eat(types$1.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        if (this.eat(types$1.colon)) {\n          throw this.raise(this.state.start, ErrorMessages.DestructureNamedImport);\n        }\n\n        this.expect(types$1.comma);\n        if (this.eat(types$1.braceR)) break;\n      }\n\n      this.parseImportSpecifier(node);\n    }\n  }\n\n  parseImportSpecifier(node) {\n    const specifier = this.startNode();\n    const importedIsString = this.match(types$1.string);\n    specifier.imported = this.parseModuleExportName();\n\n    if (this.eatContextual(\"as\")) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const {\n        imported\n      } = specifier;\n\n      if (importedIsString) {\n        throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, imported.value);\n      }\n\n      this.checkReservedWord(imported.name, specifier.start, true, true);\n      specifier.local = cloneIdentifier(imported);\n    }\n\n    this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n  }\n\n  isThisParam(param) {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n\n}\n\nclass Parser extends StatementParser {\n  constructor(options, input) {\n    options = getOptions(options);\n    super(options, input);\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n\n  getScopeHandler() {\n    return ScopeHandler;\n  }\n\n  parse() {\n    this.enterInitialScopes();\n    const file = this.startNode();\n    const program = this.startNode();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n\n}\n\nfunction pluginsMap(plugins) {\n  const pluginMap = new Map();\n\n  for (const plugin of plugins) {\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n\n  return pluginMap;\n}\n\nfunction parse(input, options) {\n  var _options;\n\n  if (((_options = options) == null ? void 0 : _options.sourceType) === \"unambiguous\") {\n    options = Object.assign({}, options);\n\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch (_unused) {}\n      } else {\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch (_unused2) {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\nfunction parseExpression(input, options) {\n  const parser = getParser(options, input);\n\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n\n  return parser.getExpression();\n}\n\nfunction getParser(options, input) {\n  let cls = Parser;\n\n  if (options != null && options.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n\n  return new cls(options, input);\n}\n\nconst parserClassCache = {};\n\nfunction getParserClass(pluginsFromOptions) {\n  const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n\n  if (!cls) {\n    cls = Parser;\n\n    for (const plugin of pluginList) {\n      cls = mixinPlugins[plugin](cls);\n    }\n\n    parserClassCache[key] = cls;\n  }\n\n  return cls;\n}\n\nexports.parse = parse;\nexports.parseExpression = parseExpression;\nexports.tokTypes = types$1;\n//# sourceMappingURL=index.js.map\n", "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.estreeWalker = {}));\n}(this, (function (exports) { 'use strict';\n\n\t// @ts-check\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\n\t/** @typedef {{\n\t\tskip: () => void;\n\t\tremove: () => void;\n\t\treplace: (node: BaseNode) => void;\n\t}} WalkerContext */\n\n\tclass WalkerBase {\n\t\tconstructor() {\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_skip = false;\n\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_remove = false;\n\n\t\t\t/** @type {BaseNode | null} */\n\t\t\tthis.replacement = null;\n\n\t\t\t/** @type {WalkerContext} */\n\t\t\tthis.context = {\n\t\t\t\tskip: () => (this.should_skip = true),\n\t\t\t\tremove: () => (this.should_remove = true),\n\t\t\t\treplace: (node) => (this.replacement = node)\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t * @param {BaseNode} node\n\t\t */\n\t\treplace(parent, prop, index, node) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop][index] = node;\n\t\t\t\t} else {\n\t\t\t\t\tparent[prop] = node;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t */\n\t\tremove(parent, prop, index) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t\t} else {\n\t\t\t\t\tdelete parent[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => void} SyncHandler */\n\n\tclass SyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {SyncHandler} enter\n\t\t * @param {SyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {BaseNode}\n\t\t */\n\t\tvisit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => Promise<void>} AsyncHandler */\n\n\tclass AsyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {AsyncHandler} enter\n\t\t * @param {AsyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {Promise<BaseNode>}\n\t\t */\n\t\tasync visit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tawait this.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!(await this.visit(value[i], node, key, i))) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tawait this.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tawait this.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n\t/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: SyncHandler\n\t *   leave?: SyncHandler\n\t * }} walker\n\t * @returns {BaseNode}\n\t */\n\tfunction walk(ast, { enter, leave }) {\n\t\tconst instance = new SyncWalker(enter, leave);\n\t\treturn instance.visit(ast, null);\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: AsyncHandler\n\t *   leave?: AsyncHandler\n\t * }} walker\n\t * @returns {Promise<BaseNode>}\n\t */\n\tasync function asyncWalk(ast, { enter, leave }) {\n\t\tconst instance = new AsyncWalker(enter, leave);\n\t\treturn await instance.visit(ast, null);\n\t}\n\n\texports.asyncWalk = asyncWalk;\n\texports.walk = walk;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\nvar sourceMap = require('source-map');\nvar parser = require('@babel/parser');\nvar estreeWalker = require('estree-walker');\n\nfunction defaultOnError(error) {\r\n    throw error;\r\n}\r\nfunction defaultOnWarn(msg) {\r\n    console.warn(`[Vue warn] ${msg.message}`);\r\n}\r\nfunction createCompilerError(code, loc, messages, additionalMessage) {\r\n    const msg = (messages || errorMessages)[code] + (additionalMessage || ``)\r\n        ;\r\n    const error = new SyntaxError(String(msg));\r\n    error.code = code;\r\n    error.loc = loc;\r\n    return error;\r\n}\r\nconst errorMessages = {\r\n    // parse errors\r\n    [0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\r\n    [1 /* CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\r\n    [2 /* DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\r\n    [3 /* END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\r\n    [4 /* END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\r\n    [5 /* EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\r\n    [6 /* EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\r\n    [7 /* EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\r\n    [8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\r\n    [9 /* EOF_IN_TAG */]: 'Unexpected EOF in tag.',\r\n    [10 /* INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\r\n    [11 /* INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\r\n    [12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\r\n    [13 /* MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\r\n    [14 /* MISSING_END_TAG_NAME */]: 'End tag name was expected.',\r\n    [15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\r\n    [16 /* NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\r\n    [17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\r\n    [18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\r\n    [19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\r\n    [21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\r\n    [20 /* UNEXPECTED_NULL_CHARACTER */]: `Unexpected null cahracter.`,\r\n    [22 /* UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\r\n    // Vue-specific parse errors\r\n    [23 /* X_INVALID_END_TAG */]: 'Invalid end tag.',\r\n    [24 /* X_MISSING_END_TAG */]: 'Element is missing end tag.',\r\n    [25 /* X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\r\n    [26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\r\n        'Note that dynamic directive argument cannot contain spaces.',\r\n    // transform errors\r\n    [27 /* X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\r\n    [28 /* X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\r\n    [29 /* X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if.`,\r\n    [30 /* X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\r\n    [31 /* X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\r\n    [32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\r\n    [33 /* X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\r\n    [34 /* X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\r\n    [35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\r\n    [36 /* X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>.` +\r\n        `When there are multiple named slots, all slots should use <template> ` +\r\n        `syntax to avoid scope ambiguity.`,\r\n    [37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\r\n    [38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\r\n        `default slot. These children will be ignored.`,\r\n    [39 /* X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\r\n    [40 /* X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\r\n    [41 /* X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\r\n    [42 /* X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\r\n    [43 /* X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\r\n    [44 /* X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\r\n    // generic errors\r\n    [45 /* X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\r\n    [46 /* X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\r\n    [47 /* X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\r\n    [48 /* X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\r\n    // just to fullfill types\r\n    [49 /* __EXTEND_POINT__ */]: ``\r\n};\n\nconst FRAGMENT = Symbol(`Fragment` );\r\nconst TELEPORT = Symbol(`Teleport` );\r\nconst SUSPENSE = Symbol(`Suspense` );\r\nconst KEEP_ALIVE = Symbol(`KeepAlive` );\r\nconst BASE_TRANSITION = Symbol(`BaseTransition` );\r\nconst OPEN_BLOCK = Symbol(`openBlock` );\r\nconst CREATE_BLOCK = Symbol(`createBlock` );\r\nconst CREATE_ELEMENT_BLOCK = Symbol(`createElementBlock` );\r\nconst CREATE_VNODE = Symbol(`createVNode` );\r\nconst CREATE_ELEMENT_VNODE = Symbol(`createElementVNode` );\r\nconst CREATE_COMMENT = Symbol(`createCommentVNode` );\r\nconst CREATE_TEXT = Symbol(`createTextVNode` );\r\nconst CREATE_STATIC = Symbol(`createStaticVNode` );\r\nconst RESOLVE_COMPONENT = Symbol(`resolveComponent` );\r\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(`resolveDynamicComponent` );\r\nconst RESOLVE_DIRECTIVE = Symbol(`resolveDirective` );\r\nconst RESOLVE_FILTER = Symbol(`resolveFilter` );\r\nconst WITH_DIRECTIVES = Symbol(`withDirectives` );\r\nconst RENDER_LIST = Symbol(`renderList` );\r\nconst RENDER_SLOT = Symbol(`renderSlot` );\r\nconst CREATE_SLOTS = Symbol(`createSlots` );\r\nconst TO_DISPLAY_STRING = Symbol(`toDisplayString` );\r\nconst MERGE_PROPS = Symbol(`mergeProps` );\r\nconst NORMALIZE_CLASS = Symbol(`normalizeClass` );\r\nconst NORMALIZE_STYLE = Symbol(`normalizeStyle` );\r\nconst NORMALIZE_PROPS = Symbol(`normalizeProps` );\r\nconst GUARD_REACTIVE_PROPS = Symbol(`guardReactiveProps` );\r\nconst TO_HANDLERS = Symbol(`toHandlers` );\r\nconst CAMELIZE = Symbol(`camelize` );\r\nconst CAPITALIZE = Symbol(`capitalize` );\r\nconst TO_HANDLER_KEY = Symbol(`toHandlerKey` );\r\nconst SET_BLOCK_TRACKING = Symbol(`setBlockTracking` );\r\nconst PUSH_SCOPE_ID = Symbol(`pushScopeId` );\r\nconst POP_SCOPE_ID = Symbol(`popScopeId` );\r\nconst WITH_SCOPE_ID = Symbol(`withScopeId` );\r\nconst WITH_CTX = Symbol(`withCtx` );\r\nconst UNREF = Symbol(`unref` );\r\nconst IS_REF = Symbol(`isRef` );\r\nconst WITH_MEMO = Symbol(`withMemo` );\r\nconst IS_MEMO_SAME = Symbol(`isMemoSame` );\r\n// Name mapping for runtime helpers that need to be imported from 'vue' in\r\n// generated code. Make sure these are correctly exported in the runtime!\r\n// Using `any` here because TS doesn't allow symbols as index type.\r\nconst helperNameMap = {\r\n    [FRAGMENT]: `Fragment`,\r\n    [TELEPORT]: `Teleport`,\r\n    [SUSPENSE]: `Suspense`,\r\n    [KEEP_ALIVE]: `KeepAlive`,\r\n    [BASE_TRANSITION]: `BaseTransition`,\r\n    [OPEN_BLOCK]: `openBlock`,\r\n    [CREATE_BLOCK]: `createBlock`,\r\n    [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\r\n    [CREATE_VNODE]: `createVNode`,\r\n    [CREATE_ELEMENT_VNODE]: `createElementVNode`,\r\n    [CREATE_COMMENT]: `createCommentVNode`,\r\n    [CREATE_TEXT]: `createTextVNode`,\r\n    [CREATE_STATIC]: `createStaticVNode`,\r\n    [RESOLVE_COMPONENT]: `resolveComponent`,\r\n    [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\r\n    [RESOLVE_DIRECTIVE]: `resolveDirective`,\r\n    [RESOLVE_FILTER]: `resolveFilter`,\r\n    [WITH_DIRECTIVES]: `withDirectives`,\r\n    [RENDER_LIST]: `renderList`,\r\n    [RENDER_SLOT]: `renderSlot`,\r\n    [CREATE_SLOTS]: `createSlots`,\r\n    [TO_DISPLAY_STRING]: `toDisplayString`,\r\n    [MERGE_PROPS]: `mergeProps`,\r\n    [NORMALIZE_CLASS]: `normalizeClass`,\r\n    [NORMALIZE_STYLE]: `normalizeStyle`,\r\n    [NORMALIZE_PROPS]: `normalizeProps`,\r\n    [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\r\n    [TO_HANDLERS]: `toHandlers`,\r\n    [CAMELIZE]: `camelize`,\r\n    [CAPITALIZE]: `capitalize`,\r\n    [TO_HANDLER_KEY]: `toHandlerKey`,\r\n    [SET_BLOCK_TRACKING]: `setBlockTracking`,\r\n    [PUSH_SCOPE_ID]: `pushScopeId`,\r\n    [POP_SCOPE_ID]: `popScopeId`,\r\n    [WITH_SCOPE_ID]: `withScopeId`,\r\n    [WITH_CTX]: `withCtx`,\r\n    [UNREF]: `unref`,\r\n    [IS_REF]: `isRef`,\r\n    [WITH_MEMO]: `withMemo`,\r\n    [IS_MEMO_SAME]: `isMemoSame`\r\n};\r\nfunction registerRuntimeHelpers(helpers) {\r\n    Object.getOwnPropertySymbols(helpers).forEach(s => {\r\n        helperNameMap[s] = helpers[s];\r\n    });\r\n}\n\n// AST Utilities ---------------------------------------------------------------\r\n// Some expressions, e.g. sequence and conditional expressions, are never\r\n// associated with template nodes, so their source locations are just a stub.\r\n// Container types like CompoundExpression also don't need a real location.\r\nconst locStub = {\r\n    source: '',\r\n    start: { line: 1, column: 1, offset: 0 },\r\n    end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createRoot(children, loc = locStub) {\r\n    return {\r\n        type: 0 /* ROOT */,\r\n        children,\r\n        helpers: [],\r\n        components: [],\r\n        directives: [],\r\n        hoists: [],\r\n        imports: [],\r\n        cached: 0,\r\n        temps: 0,\r\n        codegenNode: undefined,\r\n        loc\r\n    };\r\n}\r\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\r\n    if (context) {\r\n        if (isBlock) {\r\n            context.helper(OPEN_BLOCK);\r\n            context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\r\n        }\r\n        else {\r\n            context.helper(getVNodeHelper(context.inSSR, isComponent));\r\n        }\r\n        if (directives) {\r\n            context.helper(WITH_DIRECTIVES);\r\n        }\r\n    }\r\n    return {\r\n        type: 13 /* VNODE_CALL */,\r\n        tag,\r\n        props,\r\n        children,\r\n        patchFlag,\r\n        dynamicProps,\r\n        directives,\r\n        isBlock,\r\n        disableTracking,\r\n        isComponent,\r\n        loc\r\n    };\r\n}\r\nfunction createArrayExpression(elements, loc = locStub) {\r\n    return {\r\n        type: 17 /* JS_ARRAY_EXPRESSION */,\r\n        loc,\r\n        elements\r\n    };\r\n}\r\nfunction createObjectExpression(properties, loc = locStub) {\r\n    return {\r\n        type: 15 /* JS_OBJECT_EXPRESSION */,\r\n        loc,\r\n        properties\r\n    };\r\n}\r\nfunction createObjectProperty(key, value) {\r\n    return {\r\n        type: 16 /* JS_PROPERTY */,\r\n        loc: locStub,\r\n        key: shared.isString(key) ? createSimpleExpression(key, true) : key,\r\n        value\r\n    };\r\n}\r\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* NOT_CONSTANT */) {\r\n    return {\r\n        type: 4 /* SIMPLE_EXPRESSION */,\r\n        loc,\r\n        content,\r\n        isStatic,\r\n        constType: isStatic ? 3 /* CAN_STRINGIFY */ : constType\r\n    };\r\n}\r\nfunction createInterpolation(content, loc) {\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        loc,\r\n        content: shared.isString(content)\r\n            ? createSimpleExpression(content, false, loc)\r\n            : content\r\n    };\r\n}\r\nfunction createCompoundExpression(children, loc = locStub) {\r\n    return {\r\n        type: 8 /* COMPOUND_EXPRESSION */,\r\n        loc,\r\n        children\r\n    };\r\n}\r\nfunction createCallExpression(callee, args = [], loc = locStub) {\r\n    return {\r\n        type: 14 /* JS_CALL_EXPRESSION */,\r\n        loc,\r\n        callee,\r\n        arguments: args\r\n    };\r\n}\r\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\r\n    return {\r\n        type: 18 /* JS_FUNCTION_EXPRESSION */,\r\n        params,\r\n        returns,\r\n        newline,\r\n        isSlot,\r\n        loc\r\n    };\r\n}\r\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\r\n    return {\r\n        type: 19 /* JS_CONDITIONAL_EXPRESSION */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        newline,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createCacheExpression(index, value, isVNode = false) {\r\n    return {\r\n        type: 20 /* JS_CACHE_EXPRESSION */,\r\n        index,\r\n        value,\r\n        isVNode,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createBlockStatement(body) {\r\n    return {\r\n        type: 21 /* JS_BLOCK_STATEMENT */,\r\n        body,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createTemplateLiteral(elements) {\r\n    return {\r\n        type: 22 /* JS_TEMPLATE_LITERAL */,\r\n        elements,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createIfStatement(test, consequent, alternate) {\r\n    return {\r\n        type: 23 /* JS_IF_STATEMENT */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createAssignmentExpression(left, right) {\r\n    return {\r\n        type: 24 /* JS_ASSIGNMENT_EXPRESSION */,\r\n        left,\r\n        right,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createSequenceExpression(expressions) {\r\n    return {\r\n        type: 25 /* JS_SEQUENCE_EXPRESSION */,\r\n        expressions,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createReturnStatement(returns) {\r\n    return {\r\n        type: 26 /* JS_RETURN_STATEMENT */,\r\n        returns,\r\n        loc: locStub\r\n    };\r\n}\n\nconst isStaticExp = (p) => p.type === 4 /* SIMPLE_EXPRESSION */ && p.isStatic;\r\nconst isBuiltInType = (tag, expected) => tag === expected || tag === shared.hyphenate(expected);\r\nfunction isCoreComponent(tag) {\r\n    if (isBuiltInType(tag, 'Teleport')) {\r\n        return TELEPORT;\r\n    }\r\n    else if (isBuiltInType(tag, 'Suspense')) {\r\n        return SUSPENSE;\r\n    }\r\n    else if (isBuiltInType(tag, 'KeepAlive')) {\r\n        return KEEP_ALIVE;\r\n    }\r\n    else if (isBuiltInType(tag, 'BaseTransition')) {\r\n        return BASE_TRANSITION;\r\n    }\r\n}\r\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\r\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\r\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\r\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\r\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\r\n/**\r\n * Simple lexer to check if an expression is a member expression. This is\r\n * lax and only checks validity at the root level (i.e. does not validate exps\r\n * inside square brackets), but it's ok since these are only used on template\r\n * expressions and false positives are invalid expressions in the first place.\r\n */\r\nconst isMemberExpression = (path) => {\r\n    // remove whitespaces around . or [ first\r\n    path = path.trim().replace(whitespaceRE, s => s.trim());\r\n    let state = 0 /* inMemberExp */;\r\n    let stateStack = [];\r\n    let currentOpenBracketCount = 0;\r\n    let currentOpenParensCount = 0;\r\n    let currentStringType = null;\r\n    for (let i = 0; i < path.length; i++) {\r\n        const char = path.charAt(i);\r\n        switch (state) {\r\n            case 0 /* inMemberExp */:\r\n                if (char === '[') {\r\n                    stateStack.push(state);\r\n                    state = 1 /* inBrackets */;\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === '(') {\r\n                    stateStack.push(state);\r\n                    state = 2 /* inParens */;\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\r\n                    return false;\r\n                }\r\n                break;\r\n            case 1 /* inBrackets */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `[`) {\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === `]`) {\r\n                    if (!--currentOpenBracketCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 2 /* inParens */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `(`) {\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (char === `)`) {\r\n                    // if the exp ends as a call then it should not be considered valid\r\n                    if (i === path.length - 1) {\r\n                        return false;\r\n                    }\r\n                    if (!--currentOpenParensCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 3 /* inString */:\r\n                if (char === currentStringType) {\r\n                    state = stateStack.pop();\r\n                    currentStringType = null;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    return !currentOpenBracketCount && !currentOpenParensCount;\r\n};\r\nfunction getInnerRange(loc, offset, length) {\r\n    const source = loc.source.substr(offset, length);\r\n    const newLoc = {\r\n        source,\r\n        start: advancePositionWithClone(loc.start, loc.source, offset),\r\n        end: loc.end\r\n    };\r\n    if (length != null) {\r\n        newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\r\n    }\r\n    return newLoc;\r\n}\r\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\r\n    return advancePositionWithMutation(shared.extend({}, pos), source, numberOfCharacters);\r\n}\r\n// advance by mutation without cloning (for performance reasons), since this\r\n// gets called a lot in the parser\r\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\r\n    let linesCount = 0;\r\n    let lastNewLinePos = -1;\r\n    for (let i = 0; i < numberOfCharacters; i++) {\r\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\r\n            linesCount++;\r\n            lastNewLinePos = i;\r\n        }\r\n    }\r\n    pos.offset += numberOfCharacters;\r\n    pos.line += linesCount;\r\n    pos.column =\r\n        lastNewLinePos === -1\r\n            ? pos.column + numberOfCharacters\r\n            : numberOfCharacters - lastNewLinePos;\r\n    return pos;\r\n}\r\nfunction assert(condition, msg) {\r\n    /* istanbul ignore if */\r\n    if (!condition) {\r\n        throw new Error(msg || `unexpected compiler condition`);\r\n    }\r\n}\r\nfunction findDir(node, name, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 7 /* DIRECTIVE */ &&\r\n            (allowEmpty || p.exp) &&\r\n            (shared.isString(name) ? p.name === name : name.test(p.name))) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (dynamicOnly)\r\n                continue;\r\n            if (p.name === name && (p.value || allowEmpty)) {\r\n                return p;\r\n            }\r\n        }\r\n        else if (p.name === 'bind' &&\r\n            (p.exp || allowEmpty) &&\r\n            isBindKey(p.arg, name)) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction isBindKey(arg, name) {\r\n    return !!(arg && isStaticExp(arg) && arg.content === name);\r\n}\r\nfunction hasDynamicKeyVBind(node) {\r\n    return node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n        p.name === 'bind' &&\r\n        (!p.arg || // v-bind=\"obj\"\r\n            p.arg.type !== 4 /* SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\r\n            !p.arg.isStatic) // v-bind:[foo]\r\n    );\r\n}\r\nfunction isText(node) {\r\n    return node.type === 5 /* INTERPOLATION */ || node.type === 2 /* TEXT */;\r\n}\r\nfunction isVSlot(p) {\r\n    return p.type === 7 /* DIRECTIVE */ && p.name === 'slot';\r\n}\r\nfunction isTemplateNode(node) {\r\n    return (node.type === 1 /* ELEMENT */ && node.tagType === 3 /* TEMPLATE */);\r\n}\r\nfunction isSlotOutlet(node) {\r\n    return node.type === 1 /* ELEMENT */ && node.tagType === 2 /* SLOT */;\r\n}\r\nfunction getVNodeHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\r\n}\r\nfunction getVNodeBlockHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\r\n}\r\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\r\nfunction getUnnormalizedProps(props, callPath = []) {\r\n    if (props &&\r\n        !shared.isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const callee = props.callee;\r\n        if (!shared.isString(callee) && propsHelperSet.has(callee)) {\r\n            return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\r\n        }\r\n    }\r\n    return [props, callPath];\r\n}\r\nfunction injectProp(node, prop, context) {\r\n    let propsWithInjection;\r\n    const originalProps = node.type === 13 /* VNODE_CALL */ ? node.props : node.arguments[2];\r\n    /**\r\n     * 1. mergeProps(...)\r\n     * 2. toHandlers(...)\r\n     * 3. normalizeProps(...)\r\n     * 4. normalizeProps(guardReactiveProps(...))\r\n     *\r\n     * we need to get the real props before normalization\r\n     */\r\n    let props = originalProps;\r\n    let callPath = [];\r\n    let parentCall;\r\n    if (props &&\r\n        !shared.isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const ret = getUnnormalizedProps(props);\r\n        props = ret[0];\r\n        callPath = ret[1];\r\n        parentCall = callPath[callPath.length - 1];\r\n    }\r\n    if (props == null || shared.isString(props)) {\r\n        propsWithInjection = createObjectExpression([prop]);\r\n    }\r\n    else if (props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        // merged props... add ours\r\n        // only inject key to object literal if it's the first argument so that\r\n        // if doesn't override user provided keys\r\n        const first = props.arguments[0];\r\n        if (!shared.isString(first) && first.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n            first.properties.unshift(prop);\r\n        }\r\n        else {\r\n            if (props.callee === TO_HANDLERS) {\r\n                // #2366\r\n                propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n                    createObjectExpression([prop]),\r\n                    props\r\n                ]);\r\n            }\r\n            else {\r\n                props.arguments.unshift(createObjectExpression([prop]));\r\n            }\r\n        }\r\n        !propsWithInjection && (propsWithInjection = props);\r\n    }\r\n    else if (props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        let alreadyExists = false;\r\n        // check existing key to avoid overriding user provided keys\r\n        if (prop.key.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            const propKeyName = prop.key.content;\r\n            alreadyExists = props.properties.some(p => p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                p.key.content === propKeyName);\r\n        }\r\n        if (!alreadyExists) {\r\n            props.properties.unshift(prop);\r\n        }\r\n        propsWithInjection = props;\r\n    }\r\n    else {\r\n        // single v-bind with expression, return a merged replacement\r\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n            createObjectExpression([prop]),\r\n            props\r\n        ]);\r\n        // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\r\n        // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\r\n        // the `guardReactiveProps` will no longer be needed\r\n        if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\r\n            parentCall = callPath[callPath.length - 2];\r\n        }\r\n    }\r\n    if (node.type === 13 /* VNODE_CALL */) {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.props = propsWithInjection;\r\n        }\r\n    }\r\n    else {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.arguments[2] = propsWithInjection;\r\n        }\r\n    }\r\n}\r\nfunction toValidAssetId(name, type) {\r\n    return `_${type}_${name.replace(/[^\\w]/g, '_')}`;\r\n}\r\n// Check if a node contains expressions that reference current context scope ids\r\nfunction hasScopeRef(node, ids) {\r\n    if (!node || Object.keys(ids).length === 0) {\r\n        return false;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            for (let i = 0; i < node.props.length; i++) {\r\n                const p = node.props[i];\r\n                if (p.type === 7 /* DIRECTIVE */ &&\r\n                    (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\r\n                    return true;\r\n                }\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 11 /* FOR */:\r\n            if (hasScopeRef(node.source, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 9 /* IF */:\r\n            return node.branches.some(b => hasScopeRef(b, ids));\r\n        case 10 /* IF_BRANCH */:\r\n            if (hasScopeRef(node.condition, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return (!node.isStatic &&\r\n                isSimpleIdentifier(node.content) &&\r\n                !!ids[node.content]);\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            return node.children.some(c => shared.isObject(c) && hasScopeRef(c, ids));\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return hasScopeRef(node.content, ids);\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return false;\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getMemoedVNodeCall(node) {\r\n    if (node.type === 14 /* JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\r\n        return node.arguments[1].returns;\r\n    }\r\n    else {\r\n        return node;\r\n    }\r\n}\r\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\r\n    if (!node.isBlock) {\r\n        node.isBlock = true;\r\n        removeHelper(getVNodeHelper(inSSR, node.isComponent));\r\n        helper(OPEN_BLOCK);\r\n        helper(getVNodeBlockHelper(inSSR, node.isComponent));\r\n    }\r\n}\n\nconst deprecationData = {\r\n    [\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */]: {\r\n        message: `Platform-native elements with \"is\" prop will no longer be ` +\r\n            `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\r\n            `prefixed with \"vue:\".`,\r\n        link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`\r\n    },\r\n    [\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */]: {\r\n        message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\r\n            `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\r\n            `\\`v-model:${key}\\`.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-model.html`\r\n    },\r\n    [\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */]: {\r\n        message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\r\n            `Vue 3 will automatically set a binding as DOM property when appropriate.`\r\n    },\r\n    [\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */]: {\r\n        message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\r\n            `object spread: it will now overwrite an existing non-mergeable attribute ` +\r\n            `that appears before v-bind in the case of conflict. ` +\r\n            `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\r\n            `You can also suppress this warning if the usage is intended.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-bind.html`\r\n    },\r\n    [\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */]: {\r\n        message: `.native modifier for v-on has been removed as is no longer necessary.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`\r\n    },\r\n    [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\r\n        message: `v-if / v-for precedence when used on the same element has changed ` +\r\n            `in Vue 3: v-if now takes higher precedence and will no longer have ` +\r\n            `access to v-for scope variables. It is best to avoid the ambiguity ` +\r\n            `with <template> tags or use a computed property that filters v-for ` +\r\n            `data source.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`\r\n    },\r\n    [\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */]: {\r\n        message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +\r\n            `Consider using function refs or refactor to avoid ref usage altogether.`,\r\n        link: `https://v3.vuejs.org/guide/migration/array-refs.html`\r\n    },\r\n    [\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */]: {\r\n        message: `<template> with no special directives will render as a native template ` +\r\n            `element instead of its inner content in Vue 3.`\r\n    },\r\n    [\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */]: {\r\n        message: `\"inline-template\" has been removed in Vue 3.`,\r\n        link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`\r\n    },\r\n    [\"COMPILER_FILTER\" /* COMPILER_FILTERS */]: {\r\n        message: `filters have been removed in Vue 3. ` +\r\n            `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\r\n            `Use method calls or computed properties instead.`,\r\n        link: `https://v3.vuejs.org/guide/migration/filters.html`\r\n    }\r\n};\r\nfunction getCompatValue(key, context) {\r\n    const config = context.options\r\n        ? context.options.compatConfig\r\n        : context.compatConfig;\r\n    const value = config && config[key];\r\n    if (key === 'MODE') {\r\n        return value || 3; // compiler defaults to v3 behavior\r\n    }\r\n    else {\r\n        return value;\r\n    }\r\n}\r\nfunction isCompatEnabled(key, context) {\r\n    const mode = getCompatValue('MODE', context);\r\n    const value = getCompatValue(key, context);\r\n    // in v3 mode, only enable if explicitly set to true\r\n    // otherwise enable for any non-false value\r\n    return mode === 3 ? value === true : value !== false;\r\n}\r\nfunction checkCompatEnabled(key, context, loc, ...args) {\r\n    const enabled = isCompatEnabled(key, context);\r\n    if (enabled) {\r\n        warnDeprecation(key, context, loc, ...args);\r\n    }\r\n    return enabled;\r\n}\r\nfunction warnDeprecation(key, context, loc, ...args) {\r\n    const val = getCompatValue(key, context);\r\n    if (val === 'suppress-warning') {\r\n        return;\r\n    }\r\n    const { message, link } = deprecationData[key];\r\n    const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\r\n    const err = new SyntaxError(msg);\r\n    err.code = key;\r\n    if (loc)\r\n        err.loc = loc;\r\n    context.onWarn(err);\r\n}\n\n// The default decoder only provides escapes for characters reserved as part of\r\n// the template syntax, and is only used if the custom renderer did not provide\r\n// a platform-specific decoder.\r\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\r\nconst decodeMap = {\r\n    gt: '>',\r\n    lt: '<',\r\n    amp: '&',\r\n    apos: \"'\",\r\n    quot: '\"'\r\n};\r\nconst defaultParserOptions = {\r\n    delimiters: [`{{`, `}}`],\r\n    getNamespace: () => 0 /* HTML */,\r\n    getTextMode: () => 0 /* DATA */,\r\n    isVoidTag: shared.NO,\r\n    isPreTag: shared.NO,\r\n    isCustomElement: shared.NO,\r\n    decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\r\n    onError: defaultOnError,\r\n    onWarn: defaultOnWarn,\r\n    comments: true\r\n};\r\nfunction baseParse(content, options = {}) {\r\n    const context = createParserContext(content, options);\r\n    const start = getCursor(context);\r\n    return createRoot(parseChildren(context, 0 /* DATA */, []), getSelection(context, start));\r\n}\r\nfunction createParserContext(content, rawOptions) {\r\n    const options = shared.extend({}, defaultParserOptions);\r\n    let key;\r\n    for (key in rawOptions) {\r\n        // @ts-ignore\r\n        options[key] =\r\n            rawOptions[key] === undefined\r\n                ? defaultParserOptions[key]\r\n                : rawOptions[key];\r\n    }\r\n    return {\r\n        options,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        originalSource: content,\r\n        source: content,\r\n        inPre: false,\r\n        inVPre: false,\r\n        onWarn: options.onWarn\r\n    };\r\n}\r\nfunction parseChildren(context, mode, ancestors) {\r\n    const parent = last(ancestors);\r\n    const ns = parent ? parent.ns : 0 /* HTML */;\r\n    const nodes = [];\r\n    while (!isEnd(context, mode, ancestors)) {\r\n        const s = context.source;\r\n        let node = undefined;\r\n        if (mode === 0 /* DATA */ || mode === 1 /* RCDATA */) {\r\n            if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\r\n                // '{{'\r\n                node = parseInterpolation(context, mode);\r\n            }\r\n            else if (mode === 0 /* DATA */ && s[0] === '<') {\r\n                // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\r\n                if (s.length === 1) {\r\n                    emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 1);\r\n                }\r\n                else if (s[1] === '!') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\r\n                    if (startsWith(s, '<!--')) {\r\n                        node = parseComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<!DOCTYPE')) {\r\n                        // Ignore DOCTYPE by a limitation.\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<![CDATA[')) {\r\n                        if (ns !== 0 /* HTML */) {\r\n                            node = parseCDATA(context, ancestors);\r\n                        }\r\n                        else {\r\n                            emitError(context, 1 /* CDATA_IN_HTML_CONTENT */);\r\n                            node = parseBogusComment(context);\r\n                        }\r\n                    }\r\n                    else {\r\n                        emitError(context, 11 /* INCORRECTLY_OPENED_COMMENT */);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (s[1] === '/') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\r\n                    if (s.length === 2) {\r\n                        emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 2);\r\n                    }\r\n                    else if (s[2] === '>') {\r\n                        emitError(context, 14 /* MISSING_END_TAG_NAME */, 2);\r\n                        advanceBy(context, 3);\r\n                        continue;\r\n                    }\r\n                    else if (/[a-z]/i.test(s[2])) {\r\n                        emitError(context, 23 /* X_INVALID_END_TAG */);\r\n                        parseTag(context, 1 /* End */, parent);\r\n                        continue;\r\n                    }\r\n                    else {\r\n                        emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (/[a-z]/i.test(s[1])) {\r\n                    node = parseElement(context, ancestors);\r\n                    // 2.x <template> with no directive compat\r\n                    if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context) &&\r\n                        node &&\r\n                        node.tag === 'template' &&\r\n                        !node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n                            isSpecialTemplateDirective(p.name))) {\r\n                        warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context, node.loc);\r\n                        node = node.children;\r\n                    }\r\n                }\r\n                else if (s[1] === '?') {\r\n                    emitError(context, 21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\r\n                    node = parseBogusComment(context);\r\n                }\r\n                else {\r\n                    emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\r\n                }\r\n            }\r\n        }\r\n        if (!node) {\r\n            node = parseText(context, mode);\r\n        }\r\n        if (shared.isArray(node)) {\r\n            for (let i = 0; i < node.length; i++) {\r\n                pushNode(nodes, node[i]);\r\n            }\r\n        }\r\n        else {\r\n            pushNode(nodes, node);\r\n        }\r\n    }\r\n    // Whitespace handling strategy like v2\r\n    let removedWhitespace = false;\r\n    if (mode !== 2 /* RAWTEXT */ && mode !== 1 /* RCDATA */) {\r\n        const shouldCondense = context.options.whitespace !== 'preserve';\r\n        for (let i = 0; i < nodes.length; i++) {\r\n            const node = nodes[i];\r\n            if (!context.inPre && node.type === 2 /* TEXT */) {\r\n                if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\r\n                    const prev = nodes[i - 1];\r\n                    const next = nodes[i + 1];\r\n                    // Remove if:\r\n                    // - the whitespace is the first or last node, or:\r\n                    // - (condense mode) the whitespace is adjacent to a comment, or:\r\n                    // - (condense mode) the whitespace is between two elements AND contains newline\r\n                    if (!prev ||\r\n                        !next ||\r\n                        (shouldCondense &&\r\n                            (prev.type === 3 /* COMMENT */ ||\r\n                                next.type === 3 /* COMMENT */ ||\r\n                                (prev.type === 1 /* ELEMENT */ &&\r\n                                    next.type === 1 /* ELEMENT */ &&\r\n                                    /[\\r\\n]/.test(node.content))))) {\r\n                        removedWhitespace = true;\r\n                        nodes[i] = null;\r\n                    }\r\n                    else {\r\n                        // Otherwise, the whitespace is condensed into a single space\r\n                        node.content = ' ';\r\n                    }\r\n                }\r\n                else if (shouldCondense) {\r\n                    // in condense mode, consecutive whitespaces in text are condensed\r\n                    // down to a single space.\r\n                    node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\r\n                }\r\n            }\r\n            // Remove comment nodes if desired by configuration.\r\n            else if (node.type === 3 /* COMMENT */ && !context.options.comments) {\r\n                removedWhitespace = true;\r\n                nodes[i] = null;\r\n            }\r\n        }\r\n        if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\r\n            // remove leading newline per html spec\r\n            // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\r\n            const first = nodes[0];\r\n            if (first && first.type === 2 /* TEXT */) {\r\n                first.content = first.content.replace(/^\\r?\\n/, '');\r\n            }\r\n        }\r\n    }\r\n    return removedWhitespace ? nodes.filter(Boolean) : nodes;\r\n}\r\nfunction pushNode(nodes, node) {\r\n    if (node.type === 2 /* TEXT */) {\r\n        const prev = last(nodes);\r\n        // Merge if both this and the previous node are text and those are\r\n        // consecutive. This happens for cases like \"a < b\".\r\n        if (prev &&\r\n            prev.type === 2 /* TEXT */ &&\r\n            prev.loc.end.offset === node.loc.start.offset) {\r\n            prev.content += node.content;\r\n            prev.loc.end = node.loc.end;\r\n            prev.loc.source += node.loc.source;\r\n            return;\r\n        }\r\n    }\r\n    nodes.push(node);\r\n}\r\nfunction parseCDATA(context, ancestors) {\r\n    advanceBy(context, 9);\r\n    const nodes = parseChildren(context, 3 /* CDATA */, ancestors);\r\n    if (context.source.length === 0) {\r\n        emitError(context, 6 /* EOF_IN_CDATA */);\r\n    }\r\n    else {\r\n        advanceBy(context, 3);\r\n    }\r\n    return nodes;\r\n}\r\nfunction parseComment(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    // Regular comment.\r\n    const match = /--(\\!)?>/.exec(context.source);\r\n    if (!match) {\r\n        content = context.source.slice(4);\r\n        advanceBy(context, context.source.length);\r\n        emitError(context, 7 /* EOF_IN_COMMENT */);\r\n    }\r\n    else {\r\n        if (match.index <= 3) {\r\n            emitError(context, 0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\r\n        }\r\n        if (match[1]) {\r\n            emitError(context, 10 /* INCORRECTLY_CLOSED_COMMENT */);\r\n        }\r\n        content = context.source.slice(4, match.index);\r\n        // Advancing with reporting nested comments.\r\n        const s = context.source.slice(0, match.index);\r\n        let prevIndex = 1, nestedIndex = 0;\r\n        while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\r\n            advanceBy(context, nestedIndex - prevIndex + 1);\r\n            if (nestedIndex + 4 < s.length) {\r\n                emitError(context, 16 /* NESTED_COMMENT */);\r\n            }\r\n            prevIndex = nestedIndex + 1;\r\n        }\r\n        advanceBy(context, match.index + match[0].length - prevIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseBogusComment(context) {\r\n    const start = getCursor(context);\r\n    const contentStart = context.source[1] === '?' ? 1 : 2;\r\n    let content;\r\n    const closeIndex = context.source.indexOf('>');\r\n    if (closeIndex === -1) {\r\n        content = context.source.slice(contentStart);\r\n        advanceBy(context, context.source.length);\r\n    }\r\n    else {\r\n        content = context.source.slice(contentStart, closeIndex);\r\n        advanceBy(context, closeIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseElement(context, ancestors) {\r\n    // Start tag.\r\n    const wasInPre = context.inPre;\r\n    const wasInVPre = context.inVPre;\r\n    const parent = last(ancestors);\r\n    const element = parseTag(context, 0 /* Start */, parent);\r\n    const isPreBoundary = context.inPre && !wasInPre;\r\n    const isVPreBoundary = context.inVPre && !wasInVPre;\r\n    if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\r\n        // #4030 self-closing <pre> tag\r\n        if (isPreBoundary) {\r\n            context.inPre = false;\r\n        }\r\n        if (isVPreBoundary) {\r\n            context.inVPre = false;\r\n        }\r\n        return element;\r\n    }\r\n    // Children.\r\n    ancestors.push(element);\r\n    const mode = context.options.getTextMode(element, parent);\r\n    const children = parseChildren(context, mode, ancestors);\r\n    ancestors.pop();\r\n    // 2.x inline-template compat\r\n    {\r\n        const inlineTemplateProp = element.props.find(p => p.type === 6 /* ATTRIBUTE */ && p.name === 'inline-template');\r\n        if (inlineTemplateProp &&\r\n            checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\r\n            const loc = getSelection(context, element.loc.end);\r\n            inlineTemplateProp.value = {\r\n                type: 2 /* TEXT */,\r\n                content: loc.source,\r\n                loc\r\n            };\r\n        }\r\n    }\r\n    element.children = children;\r\n    // End tag.\r\n    if (startsWithEndTagOpen(context.source, element.tag)) {\r\n        parseTag(context, 1 /* End */, parent);\r\n    }\r\n    else {\r\n        emitError(context, 24 /* X_MISSING_END_TAG */, 0, element.loc.start);\r\n        if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\r\n            const first = children[0];\r\n            if (first && startsWith(first.loc.source, '<!--')) {\r\n                emitError(context, 8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\r\n            }\r\n        }\r\n    }\r\n    element.loc = getSelection(context, element.loc.start);\r\n    if (isPreBoundary) {\r\n        context.inPre = false;\r\n    }\r\n    if (isVPreBoundary) {\r\n        context.inVPre = false;\r\n    }\r\n    return element;\r\n}\r\nconst isSpecialTemplateDirective = /*#__PURE__*/ shared.makeMap(`if,else,else-if,for,slot`);\r\nfunction parseTag(context, type, parent) {\r\n    // Tag open.\r\n    const start = getCursor(context);\r\n    const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\r\n    const tag = match[1];\r\n    const ns = context.options.getNamespace(tag, parent);\r\n    advanceBy(context, match[0].length);\r\n    advanceSpaces(context);\r\n    // save current state in case we need to re-parse attributes with v-pre\r\n    const cursor = getCursor(context);\r\n    const currentSource = context.source;\r\n    // check <pre> tag\r\n    if (context.options.isPreTag(tag)) {\r\n        context.inPre = true;\r\n    }\r\n    // Attributes.\r\n    let props = parseAttributes(context, type);\r\n    // check v-pre\r\n    if (type === 0 /* Start */ &&\r\n        !context.inVPre &&\r\n        props.some(p => p.type === 7 /* DIRECTIVE */ && p.name === 'pre')) {\r\n        context.inVPre = true;\r\n        // reset context\r\n        shared.extend(context, cursor);\r\n        context.source = currentSource;\r\n        // re-parse attrs and filter out v-pre itself\r\n        props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\r\n    }\r\n    // Tag close.\r\n    let isSelfClosing = false;\r\n    if (context.source.length === 0) {\r\n        emitError(context, 9 /* EOF_IN_TAG */);\r\n    }\r\n    else {\r\n        isSelfClosing = startsWith(context.source, '/>');\r\n        if (type === 1 /* End */ && isSelfClosing) {\r\n            emitError(context, 4 /* END_TAG_WITH_TRAILING_SOLIDUS */);\r\n        }\r\n        advanceBy(context, isSelfClosing ? 2 : 1);\r\n    }\r\n    if (type === 1 /* End */) {\r\n        return;\r\n    }\r\n    // 2.x deprecation checks\r\n    if (isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\r\n        let hasIf = false;\r\n        let hasFor = false;\r\n        for (let i = 0; i < props.length; i++) {\r\n            const p = props[i];\r\n            if (p.type === 7 /* DIRECTIVE */) {\r\n                if (p.name === 'if') {\r\n                    hasIf = true;\r\n                }\r\n                else if (p.name === 'for') {\r\n                    hasFor = true;\r\n                }\r\n            }\r\n            if (hasIf && hasFor) {\r\n                warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\r\n            }\r\n        }\r\n    }\r\n    let tagType = 0 /* ELEMENT */;\r\n    if (!context.inVPre) {\r\n        if (tag === 'slot') {\r\n            tagType = 2 /* SLOT */;\r\n        }\r\n        else if (tag === 'template') {\r\n            if (props.some(p => p.type === 7 /* DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\r\n                tagType = 3 /* TEMPLATE */;\r\n            }\r\n        }\r\n        else if (isComponent(tag, props, context)) {\r\n            tagType = 1 /* COMPONENT */;\r\n        }\r\n    }\r\n    return {\r\n        type: 1 /* ELEMENT */,\r\n        ns,\r\n        tag,\r\n        tagType,\r\n        props,\r\n        isSelfClosing,\r\n        children: [],\r\n        loc: getSelection(context, start),\r\n        codegenNode: undefined // to be created during transform phase\r\n    };\r\n}\r\nfunction isComponent(tag, props, context) {\r\n    const options = context.options;\r\n    if (options.isCustomElement(tag)) {\r\n        return false;\r\n    }\r\n    if (tag === 'component' ||\r\n        /^[A-Z]/.test(tag) ||\r\n        isCoreComponent(tag) ||\r\n        (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\r\n        (options.isNativeTag && !options.isNativeTag(tag))) {\r\n        return true;\r\n    }\r\n    // at this point the tag should be a native tag, but check for potential \"is\"\r\n    // casting\r\n    for (let i = 0; i < props.length; i++) {\r\n        const p = props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.name === 'is' && p.value) {\r\n                if (p.value.content.startsWith('vue:')) {\r\n                    return true;\r\n                }\r\n                else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            // directive\r\n            // v-is (TODO Deprecate)\r\n            if (p.name === 'is') {\r\n                return true;\r\n            }\r\n            else if (\r\n            // :is on plain element - only treat as component in compat mode\r\n            p.name === 'bind' &&\r\n                isBindKey(p.arg, 'is') &&\r\n                true &&\r\n                checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseAttributes(context, type) {\r\n    const props = [];\r\n    const attributeNames = new Set();\r\n    while (context.source.length > 0 &&\r\n        !startsWith(context.source, '>') &&\r\n        !startsWith(context.source, '/>')) {\r\n        if (startsWith(context.source, '/')) {\r\n            emitError(context, 22 /* UNEXPECTED_SOLIDUS_IN_TAG */);\r\n            advanceBy(context, 1);\r\n            advanceSpaces(context);\r\n            continue;\r\n        }\r\n        if (type === 1 /* End */) {\r\n            emitError(context, 3 /* END_TAG_WITH_ATTRIBUTES */);\r\n        }\r\n        const attr = parseAttribute(context, attributeNames);\r\n        if (type === 0 /* Start */) {\r\n            props.push(attr);\r\n        }\r\n        if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\r\n            emitError(context, 15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\r\n        }\r\n        advanceSpaces(context);\r\n    }\r\n    return props;\r\n}\r\nfunction parseAttribute(context, nameSet) {\r\n    // Name.\r\n    const start = getCursor(context);\r\n    const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\r\n    const name = match[0];\r\n    if (nameSet.has(name)) {\r\n        emitError(context, 2 /* DUPLICATE_ATTRIBUTE */);\r\n    }\r\n    nameSet.add(name);\r\n    if (name[0] === '=') {\r\n        emitError(context, 19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\r\n    }\r\n    {\r\n        const pattern = /[\"'<]/g;\r\n        let m;\r\n        while ((m = pattern.exec(name))) {\r\n            emitError(context, 17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\r\n        }\r\n    }\r\n    advanceBy(context, name.length);\r\n    // Value\r\n    let value = undefined;\r\n    if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\r\n        advanceSpaces(context);\r\n        advanceBy(context, 1);\r\n        advanceSpaces(context);\r\n        value = parseAttributeValue(context);\r\n        if (!value) {\r\n            emitError(context, 13 /* MISSING_ATTRIBUTE_VALUE */);\r\n        }\r\n    }\r\n    const loc = getSelection(context, start);\r\n    if (!context.inVPre && /^(v-|:|\\.|@|#)/.test(name)) {\r\n        const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\r\n        let isPropShorthand = startsWith(name, '.');\r\n        let dirName = match[1] ||\r\n            (isPropShorthand || startsWith(name, ':')\r\n                ? 'bind'\r\n                : startsWith(name, '@')\r\n                    ? 'on'\r\n                    : 'slot');\r\n        let arg;\r\n        if (match[2]) {\r\n            const isSlot = dirName === 'slot';\r\n            const startOffset = name.lastIndexOf(match[2]);\r\n            const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\r\n            let content = match[2];\r\n            let isStatic = true;\r\n            if (content.startsWith('[')) {\r\n                isStatic = false;\r\n                if (!content.endsWith(']')) {\r\n                    emitError(context, 26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\r\n                }\r\n                content = content.substr(1, content.length - 2);\r\n            }\r\n            else if (isSlot) {\r\n                // #1241 special case for v-slot: vuetify relies extensively on slot\r\n                // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\r\n                // supports such usage so we are keeping it consistent with 2.x.\r\n                content += match[3] || '';\r\n            }\r\n            arg = {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content,\r\n                isStatic,\r\n                constType: isStatic\r\n                    ? 3 /* CAN_STRINGIFY */\r\n                    : 0 /* NOT_CONSTANT */,\r\n                loc\r\n            };\r\n        }\r\n        if (value && value.isQuoted) {\r\n            const valueLoc = value.loc;\r\n            valueLoc.start.offset++;\r\n            valueLoc.start.column++;\r\n            valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\r\n            valueLoc.source = valueLoc.source.slice(1, -1);\r\n        }\r\n        const modifiers = match[3] ? match[3].substr(1).split('.') : [];\r\n        if (isPropShorthand)\r\n            modifiers.push('prop');\r\n        // 2.x compat v-bind:foo.sync -> v-model:foo\r\n        if (dirName === 'bind' && arg) {\r\n            if (modifiers.includes('sync') &&\r\n                checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\r\n                dirName = 'model';\r\n                modifiers.splice(modifiers.indexOf('sync'), 1);\r\n            }\r\n            if (modifiers.includes('prop')) {\r\n                checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */, context, loc);\r\n            }\r\n        }\r\n        return {\r\n            type: 7 /* DIRECTIVE */,\r\n            name: dirName,\r\n            exp: value && {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content: value.content,\r\n                isStatic: false,\r\n                // Treat as non-constant by default. This can be potentially set to\r\n                // other values by `transformExpression` to make it eligible for hoisting.\r\n                constType: 0 /* NOT_CONSTANT */,\r\n                loc: value.loc\r\n            },\r\n            arg,\r\n            modifiers,\r\n            loc\r\n        };\r\n    }\r\n    return {\r\n        type: 6 /* ATTRIBUTE */,\r\n        name,\r\n        value: value && {\r\n            type: 2 /* TEXT */,\r\n            content: value.content,\r\n            loc: value.loc\r\n        },\r\n        loc\r\n    };\r\n}\r\nfunction parseAttributeValue(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    const quote = context.source[0];\r\n    const isQuoted = quote === `\"` || quote === `'`;\r\n    if (isQuoted) {\r\n        // Quoted value.\r\n        advanceBy(context, 1);\r\n        const endIndex = context.source.indexOf(quote);\r\n        if (endIndex === -1) {\r\n            content = parseTextData(context, context.source.length, 4 /* ATTRIBUTE_VALUE */);\r\n        }\r\n        else {\r\n            content = parseTextData(context, endIndex, 4 /* ATTRIBUTE_VALUE */);\r\n            advanceBy(context, 1);\r\n        }\r\n    }\r\n    else {\r\n        // Unquoted\r\n        const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\r\n        if (!match) {\r\n            return undefined;\r\n        }\r\n        const unexpectedChars = /[\"'<=`]/g;\r\n        let m;\r\n        while ((m = unexpectedChars.exec(match[0]))) {\r\n            emitError(context, 18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\r\n        }\r\n        content = parseTextData(context, match[0].length, 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n    return { content, isQuoted, loc: getSelection(context, start) };\r\n}\r\nfunction parseInterpolation(context, mode) {\r\n    const [open, close] = context.options.delimiters;\r\n    const closeIndex = context.source.indexOf(close, open.length);\r\n    if (closeIndex === -1) {\r\n        emitError(context, 25 /* X_MISSING_INTERPOLATION_END */);\r\n        return undefined;\r\n    }\r\n    const start = getCursor(context);\r\n    advanceBy(context, open.length);\r\n    const innerStart = getCursor(context);\r\n    const innerEnd = getCursor(context);\r\n    const rawContentLength = closeIndex - open.length;\r\n    const rawContent = context.source.slice(0, rawContentLength);\r\n    const preTrimContent = parseTextData(context, rawContentLength, mode);\r\n    const content = preTrimContent.trim();\r\n    const startOffset = preTrimContent.indexOf(content);\r\n    if (startOffset > 0) {\r\n        advancePositionWithMutation(innerStart, rawContent, startOffset);\r\n    }\r\n    const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\r\n    advancePositionWithMutation(innerEnd, rawContent, endOffset);\r\n    advanceBy(context, close.length);\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        content: {\r\n            type: 4 /* SIMPLE_EXPRESSION */,\r\n            isStatic: false,\r\n            // Set `isConstant` to false by default and will decide in transformExpression\r\n            constType: 0 /* NOT_CONSTANT */,\r\n            content,\r\n            loc: getSelection(context, innerStart, innerEnd)\r\n        },\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseText(context, mode) {\r\n    const endTokens = ['<', context.options.delimiters[0]];\r\n    if (mode === 3 /* CDATA */) {\r\n        endTokens.push(']]>');\r\n    }\r\n    let endIndex = context.source.length;\r\n    for (let i = 0; i < endTokens.length; i++) {\r\n        const index = context.source.indexOf(endTokens[i], 1);\r\n        if (index !== -1 && endIndex > index) {\r\n            endIndex = index;\r\n        }\r\n    }\r\n    const start = getCursor(context);\r\n    const content = parseTextData(context, endIndex, mode);\r\n    return {\r\n        type: 2 /* TEXT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\n/**\r\n * Get text data with a given length from the current location.\r\n * This translates HTML entities in the text data.\r\n */\r\nfunction parseTextData(context, length, mode) {\r\n    const rawText = context.source.slice(0, length);\r\n    advanceBy(context, length);\r\n    if (mode === 2 /* RAWTEXT */ ||\r\n        mode === 3 /* CDATA */ ||\r\n        rawText.indexOf('&') === -1) {\r\n        return rawText;\r\n    }\r\n    else {\r\n        // DATA or RCDATA containing \"&\"\". Entity decoding required.\r\n        return context.options.decodeEntities(rawText, mode === 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n}\r\nfunction getCursor(context) {\r\n    const { column, line, offset } = context;\r\n    return { column, line, offset };\r\n}\r\nfunction getSelection(context, start, end) {\r\n    end = end || getCursor(context);\r\n    return {\r\n        start,\r\n        end,\r\n        source: context.originalSource.slice(start.offset, end.offset)\r\n    };\r\n}\r\nfunction last(xs) {\r\n    return xs[xs.length - 1];\r\n}\r\nfunction startsWith(source, searchString) {\r\n    return source.startsWith(searchString);\r\n}\r\nfunction advanceBy(context, numberOfCharacters) {\r\n    const { source } = context;\r\n    advancePositionWithMutation(context, source, numberOfCharacters);\r\n    context.source = source.slice(numberOfCharacters);\r\n}\r\nfunction advanceSpaces(context) {\r\n    const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\r\n    if (match) {\r\n        advanceBy(context, match[0].length);\r\n    }\r\n}\r\nfunction getNewPosition(context, start, numberOfCharacters) {\r\n    return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\r\n}\r\nfunction emitError(context, code, offset, loc = getCursor(context)) {\r\n    if (offset) {\r\n        loc.offset += offset;\r\n        loc.column += offset;\r\n    }\r\n    context.options.onError(createCompilerError(code, {\r\n        start: loc,\r\n        end: loc,\r\n        source: ''\r\n    }));\r\n}\r\nfunction isEnd(context, mode, ancestors) {\r\n    const s = context.source;\r\n    switch (mode) {\r\n        case 0 /* DATA */:\r\n            if (startsWith(s, '</')) {\r\n                // TODO: probably bad performance\r\n                for (let i = ancestors.length - 1; i >= 0; --i) {\r\n                    if (startsWithEndTagOpen(s, ancestors[i].tag)) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        case 1 /* RCDATA */:\r\n        case 2 /* RAWTEXT */: {\r\n            const parent = last(ancestors);\r\n            if (parent && startsWithEndTagOpen(s, parent.tag)) {\r\n                return true;\r\n            }\r\n            break;\r\n        }\r\n        case 3 /* CDATA */:\r\n            if (startsWith(s, ']]>')) {\r\n                return true;\r\n            }\r\n            break;\r\n    }\r\n    return !s;\r\n}\r\nfunction startsWithEndTagOpen(source, tag) {\r\n    return (startsWith(source, '</') &&\r\n        source.substr(2, tag.length).toLowerCase() === tag.toLowerCase() &&\r\n        /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\r\n}\n\nfunction hoistStatic(root, context) {\r\n    walk(root, context, \r\n    // Root node is unfortunately non-hoistable due to potential parent\r\n    // fallthrough attributes.\r\n    isSingleElementRoot(root, root.children[0]));\r\n}\r\nfunction isSingleElementRoot(root, child) {\r\n    const { children } = root;\r\n    return (children.length === 1 &&\r\n        child.type === 1 /* ELEMENT */ &&\r\n        !isSlotOutlet(child));\r\n}\r\nfunction walk(node, context, doNotHoistNode = false) {\r\n    // Some transforms, e.g. transformAssetUrls from @vue/compiler-sfc, replaces\r\n    // static bindings with expressions. These expressions are guaranteed to be\r\n    // constant so they are still eligible for hoisting, but they are only\r\n    // available at runtime and therefore cannot be evaluated ahead of time.\r\n    // This is only a concern for pre-stringification (via transformHoist by\r\n    // @vue/compiler-dom), but doing it here allows us to perform only one full\r\n    // walk of the AST and allow `stringifyStatic` to stop walking as soon as its\r\n    // stringficiation threshold is met.\r\n    let canStringify = true;\r\n    const { children } = node;\r\n    const originalCount = children.length;\r\n    let hoistedCount = 0;\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        // only plain elements & text calls are eligible for hoisting.\r\n        if (child.type === 1 /* ELEMENT */ &&\r\n            child.tagType === 0 /* ELEMENT */) {\r\n            const constantType = doNotHoistNode\r\n                ? 0 /* NOT_CONSTANT */\r\n                : getConstantType(child, context);\r\n            if (constantType > 0 /* NOT_CONSTANT */) {\r\n                if (constantType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (constantType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode.patchFlag =\r\n                        -1 /* HOISTED */ + (` /* HOISTED */` );\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                    continue;\r\n                }\r\n            }\r\n            else {\r\n                // node may contain dynamic children, but its props may be eligible for\r\n                // hoisting.\r\n                const codegenNode = child.codegenNode;\r\n                if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                    const flag = getPatchFlag(codegenNode);\r\n                    if ((!flag ||\r\n                        flag === 512 /* NEED_PATCH */ ||\r\n                        flag === 1 /* TEXT */) &&\r\n                        getGeneratedPropsConstantType(child, context) >=\r\n                            2 /* CAN_HOIST */) {\r\n                        const props = getNodeProps(child);\r\n                        if (props) {\r\n                            codegenNode.props = context.hoist(props);\r\n                        }\r\n                    }\r\n                    if (codegenNode.dynamicProps) {\r\n                        codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else if (child.type === 12 /* TEXT_CALL */) {\r\n            const contentType = getConstantType(child.content, context);\r\n            if (contentType > 0) {\r\n                if (contentType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (contentType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                }\r\n            }\r\n        }\r\n        // walk further\r\n        if (child.type === 1 /* ELEMENT */) {\r\n            const isComponent = child.tagType === 1 /* COMPONENT */;\r\n            if (isComponent) {\r\n                context.scopes.vSlot++;\r\n            }\r\n            walk(child, context);\r\n            if (isComponent) {\r\n                context.scopes.vSlot--;\r\n            }\r\n        }\r\n        else if (child.type === 11 /* FOR */) {\r\n            // Do not hoist v-for single child because it has to be a block\r\n            walk(child, context, child.children.length === 1);\r\n        }\r\n        else if (child.type === 9 /* IF */) {\r\n            for (let i = 0; i < child.branches.length; i++) {\r\n                // Do not hoist v-if single child because it has to be a block\r\n                walk(child.branches[i], context, child.branches[i].children.length === 1);\r\n            }\r\n        }\r\n    }\r\n    if (canStringify && hoistedCount && context.transformHoist) {\r\n        context.transformHoist(children, context, node);\r\n    }\r\n    // all children were hoisted - the entire children array is hoistable.\r\n    if (hoistedCount &&\r\n        hoistedCount === originalCount &&\r\n        node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 0 /* ELEMENT */ &&\r\n        node.codegenNode &&\r\n        node.codegenNode.type === 13 /* VNODE_CALL */ &&\r\n        shared.isArray(node.codegenNode.children)) {\r\n        node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\r\n    }\r\n}\r\nfunction getConstantType(node, context) {\r\n    const { constantCache } = context;\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            if (node.tagType !== 0 /* ELEMENT */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const cached = constantCache.get(node);\r\n            if (cached !== undefined) {\r\n                return cached;\r\n            }\r\n            const codegenNode = node.codegenNode;\r\n            if (codegenNode.type !== 13 /* VNODE_CALL */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const flag = getPatchFlag(codegenNode);\r\n            if (!flag) {\r\n                let returnType = 3 /* CAN_STRINGIFY */;\r\n                // Element itself has no patch flag. However we still need to check:\r\n                // 1. Even for a node with no patch flag, it is possible for it to contain\r\n                // non-hoistable expressions that refers to scope variables, e.g. compiler\r\n                // injected keys or cached event handlers. Therefore we need to always\r\n                // check the codegenNode's props to be sure.\r\n                const generatedPropsType = getGeneratedPropsConstantType(node, context);\r\n                if (generatedPropsType === 0 /* NOT_CONSTANT */) {\r\n                    constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                if (generatedPropsType < returnType) {\r\n                    returnType = generatedPropsType;\r\n                }\r\n                // 2. its children.\r\n                for (let i = 0; i < node.children.length; i++) {\r\n                    const childType = getConstantType(node.children[i], context);\r\n                    if (childType === 0 /* NOT_CONSTANT */) {\r\n                        constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                        return 0 /* NOT_CONSTANT */;\r\n                    }\r\n                    if (childType < returnType) {\r\n                        returnType = childType;\r\n                    }\r\n                }\r\n                // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\r\n                // type, check if any of the props can cause the type to be lowered\r\n                // we can skip can_patch because it's guaranteed by the absence of a\r\n                // patchFlag.\r\n                if (returnType > 1 /* CAN_SKIP_PATCH */) {\r\n                    for (let i = 0; i < node.props.length; i++) {\r\n                        const p = node.props[i];\r\n                        if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind' && p.exp) {\r\n                            const expType = getConstantType(p.exp, context);\r\n                            if (expType === 0 /* NOT_CONSTANT */) {\r\n                                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                                return 0 /* NOT_CONSTANT */;\r\n                            }\r\n                            if (expType < returnType) {\r\n                                returnType = expType;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                // only svg/foreignObject could be block here, however if they are\r\n                // static then they don't need to be blocks since there will be no\r\n                // nested updates.\r\n                if (codegenNode.isBlock) {\r\n                    context.removeHelper(OPEN_BLOCK);\r\n                    context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\r\n                    codegenNode.isBlock = false;\r\n                    context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\r\n                }\r\n                constantCache.set(node, returnType);\r\n                return returnType;\r\n            }\r\n            else {\r\n                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return 3 /* CAN_STRINGIFY */;\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n        case 10 /* IF_BRANCH */:\r\n            return 0 /* NOT_CONSTANT */;\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return getConstantType(node.content, context);\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return node.constType;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            let returnType = 3 /* CAN_STRINGIFY */;\r\n            for (let i = 0; i < node.children.length; i++) {\r\n                const child = node.children[i];\r\n                if (shared.isString(child) || shared.isSymbol(child)) {\r\n                    continue;\r\n                }\r\n                const childType = getConstantType(child, context);\r\n                if (childType === 0 /* NOT_CONSTANT */) {\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                else if (childType < returnType) {\r\n                    returnType = childType;\r\n                }\r\n            }\r\n            return returnType;\r\n        default:\r\n            return 0 /* NOT_CONSTANT */;\r\n    }\r\n}\r\nconst allowHoistedHelperSet = new Set([\r\n    NORMALIZE_CLASS,\r\n    NORMALIZE_STYLE,\r\n    NORMALIZE_PROPS,\r\n    GUARD_REACTIVE_PROPS\r\n]);\r\nfunction getConstantTypeOfHelperCall(value, context) {\r\n    if (value.type === 14 /* JS_CALL_EXPRESSION */ &&\r\n        !shared.isString(value.callee) &&\r\n        allowHoistedHelperSet.has(value.callee)) {\r\n        const arg = value.arguments[0];\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            return getConstantType(arg, context);\r\n        }\r\n        else if (arg.type === 14 /* JS_CALL_EXPRESSION */) {\r\n            // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\r\n            return getConstantTypeOfHelperCall(arg, context);\r\n        }\r\n    }\r\n    return 0 /* NOT_CONSTANT */;\r\n}\r\nfunction getGeneratedPropsConstantType(node, context) {\r\n    let returnType = 3 /* CAN_STRINGIFY */;\r\n    const props = getNodeProps(node);\r\n    if (props && props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        const { properties } = props;\r\n        for (let i = 0; i < properties.length; i++) {\r\n            const { key, value } = properties[i];\r\n            const keyType = getConstantType(key, context);\r\n            if (keyType === 0 /* NOT_CONSTANT */) {\r\n                return keyType;\r\n            }\r\n            if (keyType < returnType) {\r\n                returnType = keyType;\r\n            }\r\n            if (value.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n                // some helper calls can be hoisted,\r\n                // such as the `normalizeProps` generated by the compiler for pre-normalize class,\r\n                // in this case we need to respect the ConstanType of the helper's argments\r\n                if (value.type === 14 /* JS_CALL_EXPRESSION */) {\r\n                    return getConstantTypeOfHelperCall(value, context);\r\n                }\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const valueType = getConstantType(value, context);\r\n            if (valueType === 0 /* NOT_CONSTANT */) {\r\n                return valueType;\r\n            }\r\n            if (valueType < returnType) {\r\n                returnType = valueType;\r\n            }\r\n        }\r\n    }\r\n    return returnType;\r\n}\r\nfunction getNodeProps(node) {\r\n    const codegenNode = node.codegenNode;\r\n    if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n        return codegenNode.props;\r\n    }\r\n}\r\nfunction getPatchFlag(node) {\r\n    const flag = node.patchFlag;\r\n    return flag ? parseInt(flag, 10) : undefined;\r\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = shared.NOOP, isCustomElement = shared.NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = shared.EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\r\n    const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\r\n    const context = {\r\n        // options\r\n        selfName: nameMatch && shared.capitalize(shared.camelize(nameMatch[1])),\r\n        prefixIdentifiers,\r\n        hoistStatic,\r\n        cacheHandlers,\r\n        nodeTransforms,\r\n        directiveTransforms,\r\n        transformHoist,\r\n        isBuiltInComponent,\r\n        isCustomElement,\r\n        expressionPlugins,\r\n        scopeId,\r\n        slotted,\r\n        ssr,\r\n        inSSR,\r\n        ssrCssVars,\r\n        bindingMetadata,\r\n        inline,\r\n        isTS,\r\n        onError,\r\n        onWarn,\r\n        compatConfig,\r\n        // state\r\n        root,\r\n        helpers: new Map(),\r\n        components: new Set(),\r\n        directives: new Set(),\r\n        hoists: [],\r\n        imports: [],\r\n        constantCache: new Map(),\r\n        temps: 0,\r\n        cached: 0,\r\n        identifiers: Object.create(null),\r\n        scopes: {\r\n            vFor: 0,\r\n            vSlot: 0,\r\n            vPre: 0,\r\n            vOnce: 0\r\n        },\r\n        parent: null,\r\n        currentNode: root,\r\n        childIndex: 0,\r\n        inVOnce: false,\r\n        // methods\r\n        helper(name) {\r\n            const count = context.helpers.get(name) || 0;\r\n            context.helpers.set(name, count + 1);\r\n            return name;\r\n        },\r\n        removeHelper(name) {\r\n            const count = context.helpers.get(name);\r\n            if (count) {\r\n                const currentCount = count - 1;\r\n                if (!currentCount) {\r\n                    context.helpers.delete(name);\r\n                }\r\n                else {\r\n                    context.helpers.set(name, currentCount);\r\n                }\r\n            }\r\n        },\r\n        helperString(name) {\r\n            return `_${helperNameMap[context.helper(name)]}`;\r\n        },\r\n        replaceNode(node) {\r\n            /* istanbul ignore if */\r\n            {\r\n                if (!context.currentNode) {\r\n                    throw new Error(`Node being replaced is already removed.`);\r\n                }\r\n                if (!context.parent) {\r\n                    throw new Error(`Cannot replace root node.`);\r\n                }\r\n            }\r\n            context.parent.children[context.childIndex] = context.currentNode = node;\r\n        },\r\n        removeNode(node) {\r\n            if (!context.parent) {\r\n                throw new Error(`Cannot remove root node.`);\r\n            }\r\n            const list = context.parent.children;\r\n            const removalIndex = node\r\n                ? list.indexOf(node)\r\n                : context.currentNode\r\n                    ? context.childIndex\r\n                    : -1;\r\n            /* istanbul ignore if */\r\n            if (removalIndex < 0) {\r\n                throw new Error(`node being removed is not a child of current parent`);\r\n            }\r\n            if (!node || node === context.currentNode) {\r\n                // current node removed\r\n                context.currentNode = null;\r\n                context.onNodeRemoved();\r\n            }\r\n            else {\r\n                // sibling node removed\r\n                if (context.childIndex > removalIndex) {\r\n                    context.childIndex--;\r\n                    context.onNodeRemoved();\r\n                }\r\n            }\r\n            context.parent.children.splice(removalIndex, 1);\r\n        },\r\n        onNodeRemoved: () => { },\r\n        addIdentifiers(exp) {\r\n            // identifier tracking only happens in non-browser builds.\r\n            {\r\n                if (shared.isString(exp)) {\r\n                    addId(exp);\r\n                }\r\n                else if (exp.identifiers) {\r\n                    exp.identifiers.forEach(addId);\r\n                }\r\n                else if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                    addId(exp.content);\r\n                }\r\n            }\r\n        },\r\n        removeIdentifiers(exp) {\r\n            {\r\n                if (shared.isString(exp)) {\r\n                    removeId(exp);\r\n                }\r\n                else if (exp.identifiers) {\r\n                    exp.identifiers.forEach(removeId);\r\n                }\r\n                else if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                    removeId(exp.content);\r\n                }\r\n            }\r\n        },\r\n        hoist(exp) {\r\n            if (shared.isString(exp))\r\n                exp = createSimpleExpression(exp);\r\n            context.hoists.push(exp);\r\n            const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* CAN_HOIST */);\r\n            identifier.hoisted = exp;\r\n            return identifier;\r\n        },\r\n        cache(exp, isVNode = false) {\r\n            return createCacheExpression(context.cached++, exp, isVNode);\r\n        }\r\n    };\r\n    {\r\n        context.filters = new Set();\r\n    }\r\n    function addId(id) {\r\n        const { identifiers } = context;\r\n        if (identifiers[id] === undefined) {\r\n            identifiers[id] = 0;\r\n        }\r\n        identifiers[id]++;\r\n    }\r\n    function removeId(id) {\r\n        context.identifiers[id]--;\r\n    }\r\n    return context;\r\n}\r\nfunction transform(root, options) {\r\n    const context = createTransformContext(root, options);\r\n    traverseNode(root, context);\r\n    if (options.hoistStatic) {\r\n        hoistStatic(root, context);\r\n    }\r\n    if (!options.ssr) {\r\n        createRootCodegen(root, context);\r\n    }\r\n    // finalize meta information\r\n    root.helpers = [...context.helpers.keys()];\r\n    root.components = [...context.components];\r\n    root.directives = [...context.directives];\r\n    root.imports = context.imports;\r\n    root.hoists = context.hoists;\r\n    root.temps = context.temps;\r\n    root.cached = context.cached;\r\n    {\r\n        root.filters = [...context.filters];\r\n    }\r\n}\r\nfunction createRootCodegen(root, context) {\r\n    const { helper } = context;\r\n    const { children } = root;\r\n    if (children.length === 1) {\r\n        const child = children[0];\r\n        // if the single child is an element, turn it into a block.\r\n        if (isSingleElementRoot(root, child) && child.codegenNode) {\r\n            // single element root is never hoisted so codegenNode will never be\r\n            // SimpleExpressionNode\r\n            const codegenNode = child.codegenNode;\r\n            if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                makeBlock(codegenNode, context);\r\n            }\r\n            root.codegenNode = codegenNode;\r\n        }\r\n        else {\r\n            // - single <slot/>, IfNode, ForNode: already blocks.\r\n            // - single text node: always patched.\r\n            // root codegen falls through via genNode()\r\n            root.codegenNode = child;\r\n        }\r\n    }\r\n    else if (children.length > 1) {\r\n        // root has multiple nodes - return a fragment block.\r\n        let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n        let patchFlagText = shared.PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n        // check if the fragment actually contains a single valid child with\r\n        // the rest being comments\r\n        if (children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n            patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n            patchFlagText += `, ${shared.PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n        }\r\n        root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, undefined, false /* isComponent */);\r\n    }\r\n    else ;\r\n}\r\nfunction traverseChildren(parent, context) {\r\n    let i = 0;\r\n    const nodeRemoved = () => {\r\n        i--;\r\n    };\r\n    for (; i < parent.children.length; i++) {\r\n        const child = parent.children[i];\r\n        if (shared.isString(child))\r\n            continue;\r\n        context.parent = parent;\r\n        context.childIndex = i;\r\n        context.onNodeRemoved = nodeRemoved;\r\n        traverseNode(child, context);\r\n    }\r\n}\r\nfunction traverseNode(node, context) {\r\n    context.currentNode = node;\r\n    // apply transform plugins\r\n    const { nodeTransforms } = context;\r\n    const exitFns = [];\r\n    for (let i = 0; i < nodeTransforms.length; i++) {\r\n        const onExit = nodeTransforms[i](node, context);\r\n        if (onExit) {\r\n            if (shared.isArray(onExit)) {\r\n                exitFns.push(...onExit);\r\n            }\r\n            else {\r\n                exitFns.push(onExit);\r\n            }\r\n        }\r\n        if (!context.currentNode) {\r\n            // node was removed\r\n            return;\r\n        }\r\n        else {\r\n            // node may have been replaced\r\n            node = context.currentNode;\r\n        }\r\n    }\r\n    switch (node.type) {\r\n        case 3 /* COMMENT */:\r\n            if (!context.ssr) {\r\n                // inject import for the Comment symbol, which is needed for creating\r\n                // comment nodes with `createVNode`\r\n                context.helper(CREATE_COMMENT);\r\n            }\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            // no need to traverse, but we need to inject toString helper\r\n            if (!context.ssr) {\r\n                context.helper(TO_DISPLAY_STRING);\r\n            }\r\n            break;\r\n        // for container types, further traverse downwards\r\n        case 9 /* IF */:\r\n            for (let i = 0; i < node.branches.length; i++) {\r\n                traverseNode(node.branches[i], context);\r\n            }\r\n            break;\r\n        case 10 /* IF_BRANCH */:\r\n        case 11 /* FOR */:\r\n        case 1 /* ELEMENT */:\r\n        case 0 /* ROOT */:\r\n            traverseChildren(node, context);\r\n            break;\r\n    }\r\n    // exit transforms\r\n    context.currentNode = node;\r\n    let i = exitFns.length;\r\n    while (i--) {\r\n        exitFns[i]();\r\n    }\r\n}\r\nfunction createStructuralDirectiveTransform(name, fn) {\r\n    const matches = shared.isString(name)\r\n        ? (n) => n === name\r\n        : (n) => name.test(n);\r\n    return (node, context) => {\r\n        if (node.type === 1 /* ELEMENT */) {\r\n            const { props } = node;\r\n            // structural directive transforms are not concerned with slots\r\n            // as they are handled separately in vSlot.ts\r\n            if (node.tagType === 3 /* TEMPLATE */ && props.some(isVSlot)) {\r\n                return;\r\n            }\r\n            const exitFns = [];\r\n            for (let i = 0; i < props.length; i++) {\r\n                const prop = props[i];\r\n                if (prop.type === 7 /* DIRECTIVE */ && matches(prop.name)) {\r\n                    // structural directives are removed to avoid infinite recursion\r\n                    // also we remove them *before* applying so that it can further\r\n                    // traverse itself in case it moves the node around\r\n                    props.splice(i, 1);\r\n                    i--;\r\n                    const onExit = fn(node, prop, context);\r\n                    if (onExit)\r\n                        exitFns.push(onExit);\r\n                }\r\n            }\r\n            return exitFns;\r\n        }\r\n    };\r\n}\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\r\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap: sourceMap$1 = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssr = false, isTS = false, inSSR = false }) {\r\n    const context = {\r\n        mode,\r\n        prefixIdentifiers,\r\n        sourceMap: sourceMap$1,\r\n        filename,\r\n        scopeId,\r\n        optimizeImports,\r\n        runtimeGlobalName,\r\n        runtimeModuleName,\r\n        ssr,\r\n        isTS,\r\n        inSSR,\r\n        source: ast.loc.source,\r\n        code: ``,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        indentLevel: 0,\r\n        pure: false,\r\n        map: undefined,\r\n        helper(key) {\r\n            return `_${helperNameMap[key]}`;\r\n        },\r\n        push(code, node) {\r\n            context.code += code;\r\n            if (context.map) {\r\n                if (node) {\r\n                    let name;\r\n                    if (node.type === 4 /* SIMPLE_EXPRESSION */ && !node.isStatic) {\r\n                        const content = node.content.replace(/^_ctx\\./, '');\r\n                        if (content !== node.content && isSimpleIdentifier(content)) {\r\n                            name = content;\r\n                        }\r\n                    }\r\n                    addMapping(node.loc.start, name);\r\n                }\r\n                advancePositionWithMutation(context, code);\r\n                if (node && node.loc !== locStub) {\r\n                    addMapping(node.loc.end);\r\n                }\r\n            }\r\n        },\r\n        indent() {\r\n            newline(++context.indentLevel);\r\n        },\r\n        deindent(withoutNewLine = false) {\r\n            if (withoutNewLine) {\r\n                --context.indentLevel;\r\n            }\r\n            else {\r\n                newline(--context.indentLevel);\r\n            }\r\n        },\r\n        newline() {\r\n            newline(context.indentLevel);\r\n        }\r\n    };\r\n    function newline(n) {\r\n        context.push('\\n' + `  `.repeat(n));\r\n    }\r\n    function addMapping(loc, name) {\r\n        context.map.addMapping({\r\n            name,\r\n            source: context.filename,\r\n            original: {\r\n                line: loc.line,\r\n                column: loc.column - 1 // source-map column is 0 based\r\n            },\r\n            generated: {\r\n                line: context.line,\r\n                column: context.column - 1\r\n            }\r\n        });\r\n    }\r\n    if (sourceMap$1) {\r\n        // lazy require source-map implementation, only in non-browser builds\r\n        context.map = new sourceMap.SourceMapGenerator();\r\n        context.map.setSourceContent(filename, context.source);\r\n    }\r\n    return context;\r\n}\r\nfunction generate(ast, options = {}) {\r\n    const context = createCodegenContext(ast, options);\r\n    if (options.onContextCreated)\r\n        options.onContextCreated(context);\r\n    const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\r\n    const hasHelpers = ast.helpers.length > 0;\r\n    const useWithBlock = !prefixIdentifiers && mode !== 'module';\r\n    const genScopeId = scopeId != null && mode === 'module';\r\n    const isSetupInlined = !!options.inline;\r\n    // preambles\r\n    // in setup() inline mode, the preamble is generated in a sub context\r\n    // and returned separately.\r\n    const preambleContext = isSetupInlined\r\n        ? createCodegenContext(ast, options)\r\n        : context;\r\n    if (mode === 'module') {\r\n        genModulePreamble(ast, preambleContext, genScopeId, isSetupInlined);\r\n    }\r\n    else {\r\n        genFunctionPreamble(ast, preambleContext);\r\n    }\r\n    // enter render function\r\n    const functionName = ssr ? `ssrRender` : `render`;\r\n    const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\r\n    if (options.bindingMetadata && !options.inline) {\r\n        // binding optimization args\r\n        args.push('$props', '$setup', '$data', '$options');\r\n    }\r\n    const signature = options.isTS\r\n        ? args.map(arg => `${arg}: any`).join(',')\r\n        : args.join(', ');\r\n    if (isSetupInlined) {\r\n        push(`(${signature}) => {`);\r\n    }\r\n    else {\r\n        push(`function ${functionName}(${signature}) {`);\r\n    }\r\n    indent();\r\n    if (useWithBlock) {\r\n        push(`with (_ctx) {`);\r\n        indent();\r\n        // function mode const declarations should be inside with block\r\n        // also they should be renamed to avoid collision with user properties\r\n        if (hasHelpers) {\r\n            push(`const { ${ast.helpers\r\n                .map(s => `${helperNameMap[s]}: _${helperNameMap[s]}`)\r\n                .join(', ')} } = _Vue`);\r\n            push(`\\n`);\r\n            newline();\r\n        }\r\n    }\r\n    // generate asset resolution statements\r\n    if (ast.components.length) {\r\n        genAssets(ast.components, 'component', context);\r\n        if (ast.directives.length || ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.directives.length) {\r\n        genAssets(ast.directives, 'directive', context);\r\n        if (ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.filters && ast.filters.length) {\r\n        newline();\r\n        genAssets(ast.filters, 'filter', context);\r\n        newline();\r\n    }\r\n    if (ast.temps > 0) {\r\n        push(`let `);\r\n        for (let i = 0; i < ast.temps; i++) {\r\n            push(`${i > 0 ? `, ` : ``}_temp${i}`);\r\n        }\r\n    }\r\n    if (ast.components.length || ast.directives.length || ast.temps) {\r\n        push(`\\n`);\r\n        newline();\r\n    }\r\n    // generate the VNode tree expression\r\n    if (!ssr) {\r\n        push(`return `);\r\n    }\r\n    if (ast.codegenNode) {\r\n        genNode(ast.codegenNode, context);\r\n    }\r\n    else {\r\n        push(`null`);\r\n    }\r\n    if (useWithBlock) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    deindent();\r\n    push(`}`);\r\n    return {\r\n        ast,\r\n        code: context.code,\r\n        preamble: isSetupInlined ? preambleContext.code : ``,\r\n        // SourceMapGenerator does have toJSON() method but it's not in the types\r\n        map: context.map ? context.map.toJSON() : undefined\r\n    };\r\n}\r\nfunction genFunctionPreamble(ast, context) {\r\n    const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName } = context;\r\n    const VueBinding = ssr\r\n        ? `require(${JSON.stringify(runtimeModuleName)})`\r\n        : runtimeGlobalName;\r\n    const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\r\n    // Generate const declaration for helpers\r\n    // In prefix mode, we place the const declaration at top so it's done\r\n    // only once; But if we not prefixing, we place the declaration inside the\r\n    // with block so it doesn't incur the `in` check cost for every helper access.\r\n    if (ast.helpers.length > 0) {\r\n        if (prefixIdentifiers) {\r\n            push(`const { ${ast.helpers.map(aliasHelper).join(', ')} } = ${VueBinding}\\n`);\r\n        }\r\n        else {\r\n            // \"with\" mode.\r\n            // save Vue in a separate variable to avoid collision\r\n            push(`const _Vue = ${VueBinding}\\n`);\r\n            // in \"with\" mode, helpers are declared inside the with block to avoid\r\n            // has check cost, but hoists are lifted out of the function - we need\r\n            // to provide the helper here.\r\n            if (ast.hoists.length) {\r\n                const staticHelpers = [\r\n                    CREATE_VNODE,\r\n                    CREATE_ELEMENT_VNODE,\r\n                    CREATE_COMMENT,\r\n                    CREATE_TEXT,\r\n                    CREATE_STATIC\r\n                ]\r\n                    .filter(helper => ast.helpers.includes(helper))\r\n                    .map(aliasHelper)\r\n                    .join(', ');\r\n                push(`const { ${staticHelpers} } = _Vue\\n`);\r\n            }\r\n        }\r\n    }\r\n    // generate variables for ssr helpers\r\n    if (ast.ssrHelpers && ast.ssrHelpers.length) {\r\n        // ssr guarantees prefixIdentifier: true\r\n        push(`const { ${ast.ssrHelpers\r\n            .map(aliasHelper)\r\n            .join(', ')} } = require(\"@vue/server-renderer\")\\n`);\r\n    }\r\n    genHoists(ast.hoists, context);\r\n    newline();\r\n    push(`return `);\r\n}\r\nfunction genModulePreamble(ast, context, genScopeId, inline) {\r\n    const { push, newline, optimizeImports, runtimeModuleName } = context;\r\n    if (genScopeId) {\r\n        ast.helpers.push(WITH_SCOPE_ID);\r\n        if (ast.hoists.length) {\r\n            ast.helpers.push(PUSH_SCOPE_ID, POP_SCOPE_ID);\r\n        }\r\n    }\r\n    // generate import statements for helpers\r\n    if (ast.helpers.length) {\r\n        if (optimizeImports) {\r\n            // when bundled with webpack with code-split, calling an import binding\r\n            // as a function leads to it being wrapped with `Object(a.b)` or `(0,a.b)`,\r\n            // incurring both payload size increase and potential perf overhead.\r\n            // therefore we assign the imports to variables (which is a constant ~50b\r\n            // cost per-component instead of scaling with template size)\r\n            push(`import { ${ast.helpers\r\n                .map(s => helperNameMap[s])\r\n                .join(', ')} } from ${JSON.stringify(runtimeModuleName)}\\n`);\r\n            push(`\\n// Binding optimization for webpack code-split\\nconst ${ast.helpers\r\n                .map(s => `_${helperNameMap[s]} = ${helperNameMap[s]}`)\r\n                .join(', ')}\\n`);\r\n        }\r\n        else {\r\n            push(`import { ${ast.helpers\r\n                .map(s => `${helperNameMap[s]} as _${helperNameMap[s]}`)\r\n                .join(', ')} } from ${JSON.stringify(runtimeModuleName)}\\n`);\r\n        }\r\n    }\r\n    if (ast.ssrHelpers && ast.ssrHelpers.length) {\r\n        push(`import { ${ast.ssrHelpers\r\n            .map(s => `${helperNameMap[s]} as _${helperNameMap[s]}`)\r\n            .join(', ')} } from \"@vue/server-renderer\"\\n`);\r\n    }\r\n    if (ast.imports.length) {\r\n        genImports(ast.imports, context);\r\n        newline();\r\n    }\r\n    genHoists(ast.hoists, context);\r\n    newline();\r\n    if (!inline) {\r\n        push(`export `);\r\n    }\r\n}\r\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\r\n    const resolver = helper(type === 'filter'\r\n        ? RESOLVE_FILTER\r\n        : type === 'component'\r\n            ? RESOLVE_COMPONENT\r\n            : RESOLVE_DIRECTIVE);\r\n    for (let i = 0; i < assets.length; i++) {\r\n        let id = assets[i];\r\n        // potential component implicit self-reference inferred from SFC filename\r\n        const maybeSelfReference = id.endsWith('__self');\r\n        if (maybeSelfReference) {\r\n            id = id.slice(0, -6);\r\n        }\r\n        push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\r\n        if (i < assets.length - 1) {\r\n            newline();\r\n        }\r\n    }\r\n}\r\nfunction genHoists(hoists, context) {\r\n    if (!hoists.length) {\r\n        return;\r\n    }\r\n    context.pure = true;\r\n    const { push, newline, helper, scopeId, mode } = context;\r\n    const genScopeId = scopeId != null && mode !== 'function';\r\n    newline();\r\n    // push scope Id before initializing hoisted vnodes so that these vnodes\r\n    // get the proper scopeId as well.\r\n    if (genScopeId) {\r\n        push(`${helper(PUSH_SCOPE_ID)}(\"${scopeId}\")`);\r\n        newline();\r\n    }\r\n    hoists.forEach((exp, i) => {\r\n        if (exp) {\r\n            push(`const _hoisted_${i + 1} = `);\r\n            genNode(exp, context);\r\n            newline();\r\n        }\r\n    });\r\n    if (genScopeId) {\r\n        push(`${helper(POP_SCOPE_ID)}()`);\r\n        newline();\r\n    }\r\n    context.pure = false;\r\n}\r\nfunction genImports(importsOptions, context) {\r\n    if (!importsOptions.length) {\r\n        return;\r\n    }\r\n    importsOptions.forEach(imports => {\r\n        context.push(`import `);\r\n        genNode(imports.exp, context);\r\n        context.push(` from '${imports.path}'`);\r\n        context.newline();\r\n    });\r\n}\r\nfunction isText$1(n) {\r\n    return (shared.isString(n) ||\r\n        n.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n        n.type === 2 /* TEXT */ ||\r\n        n.type === 5 /* INTERPOLATION */ ||\r\n        n.type === 8 /* COMPOUND_EXPRESSION */);\r\n}\r\nfunction genNodeListAsArray(nodes, context) {\r\n    const multilines = nodes.length > 3 ||\r\n        (nodes.some(n => shared.isArray(n) || !isText$1(n)));\r\n    context.push(`[`);\r\n    multilines && context.indent();\r\n    genNodeList(nodes, context, multilines);\r\n    multilines && context.deindent();\r\n    context.push(`]`);\r\n}\r\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\r\n    const { push, newline } = context;\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        const node = nodes[i];\r\n        if (shared.isString(node)) {\r\n            push(node);\r\n        }\r\n        else if (shared.isArray(node)) {\r\n            genNodeListAsArray(node, context);\r\n        }\r\n        else {\r\n            genNode(node, context);\r\n        }\r\n        if (i < nodes.length - 1) {\r\n            if (multilines) {\r\n                comma && push(',');\r\n                newline();\r\n            }\r\n            else {\r\n                comma && push(', ');\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction genNode(node, context) {\r\n    if (shared.isString(node)) {\r\n        context.push(node);\r\n        return;\r\n    }\r\n    if (shared.isSymbol(node)) {\r\n        context.push(context.helper(node));\r\n        return;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n            assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\r\n                    `Apply appropriate transforms first.`);\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 2 /* TEXT */:\r\n            genText(node, context);\r\n            break;\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            genExpression(node, context);\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            genInterpolation(node, context);\r\n            break;\r\n        case 12 /* TEXT_CALL */:\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            genCompoundExpression(node, context);\r\n            break;\r\n        case 3 /* COMMENT */:\r\n            genComment(node, context);\r\n            break;\r\n        case 13 /* VNODE_CALL */:\r\n            genVNodeCall(node, context);\r\n            break;\r\n        case 14 /* JS_CALL_EXPRESSION */:\r\n            genCallExpression(node, context);\r\n            break;\r\n        case 15 /* JS_OBJECT_EXPRESSION */:\r\n            genObjectExpression(node, context);\r\n            break;\r\n        case 17 /* JS_ARRAY_EXPRESSION */:\r\n            genArrayExpression(node, context);\r\n            break;\r\n        case 18 /* JS_FUNCTION_EXPRESSION */:\r\n            genFunctionExpression(node, context);\r\n            break;\r\n        case 19 /* JS_CONDITIONAL_EXPRESSION */:\r\n            genConditionalExpression(node, context);\r\n            break;\r\n        case 20 /* JS_CACHE_EXPRESSION */:\r\n            genCacheExpression(node, context);\r\n            break;\r\n        case 21 /* JS_BLOCK_STATEMENT */:\r\n            genNodeList(node.body, context, true, false);\r\n            break;\r\n        // SSR only types\r\n        case 22 /* JS_TEMPLATE_LITERAL */:\r\n            genTemplateLiteral(node, context);\r\n            break;\r\n        case 23 /* JS_IF_STATEMENT */:\r\n            genIfStatement(node, context);\r\n            break;\r\n        case 24 /* JS_ASSIGNMENT_EXPRESSION */:\r\n            genAssignmentExpression(node, context);\r\n            break;\r\n        case 25 /* JS_SEQUENCE_EXPRESSION */:\r\n            genSequenceExpression(node, context);\r\n            break;\r\n        case 26 /* JS_RETURN_STATEMENT */:\r\n            genReturnStatement(node, context);\r\n            break;\r\n        /* istanbul ignore next */\r\n        case 10 /* IF_BRANCH */:\r\n            // noop\r\n            break;\r\n        default:\r\n            {\r\n                assert(false, `unhandled codegen node type: ${node.type}`);\r\n                // make sure we exhaust all possible types\r\n                const exhaustiveCheck = node;\r\n                return exhaustiveCheck;\r\n            }\r\n    }\r\n}\r\nfunction genText(node, context) {\r\n    context.push(JSON.stringify(node.content), node);\r\n}\r\nfunction genExpression(node, context) {\r\n    const { content, isStatic } = node;\r\n    context.push(isStatic ? JSON.stringify(content) : content, node);\r\n}\r\nfunction genInterpolation(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure)\r\n        push(PURE_ANNOTATION);\r\n    push(`${helper(TO_DISPLAY_STRING)}(`);\r\n    genNode(node.content, context);\r\n    push(`)`);\r\n}\r\nfunction genCompoundExpression(node, context) {\r\n    for (let i = 0; i < node.children.length; i++) {\r\n        const child = node.children[i];\r\n        if (shared.isString(child)) {\r\n            context.push(child);\r\n        }\r\n        else {\r\n            genNode(child, context);\r\n        }\r\n    }\r\n}\r\nfunction genExpressionAsPropertyKey(node, context) {\r\n    const { push } = context;\r\n    if (node.type === 8 /* COMPOUND_EXPRESSION */) {\r\n        push(`[`);\r\n        genCompoundExpression(node, context);\r\n        push(`]`);\r\n    }\r\n    else if (node.isStatic) {\r\n        // only quote keys if necessary\r\n        const text = isSimpleIdentifier(node.content)\r\n            ? node.content\r\n            : JSON.stringify(node.content);\r\n        push(text, node);\r\n    }\r\n    else {\r\n        push(`[${node.content}]`, node);\r\n    }\r\n}\r\nfunction genComment(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\r\n}\r\nfunction genVNodeCall(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\r\n    if (directives) {\r\n        push(helper(WITH_DIRECTIVES) + `(`);\r\n    }\r\n    if (isBlock) {\r\n        push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\r\n    }\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    const callHelper = isBlock\r\n        ? getVNodeBlockHelper(context.inSSR, isComponent)\r\n        : getVNodeHelper(context.inSSR, isComponent);\r\n    push(helper(callHelper) + `(`, node);\r\n    genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\r\n    push(`)`);\r\n    if (isBlock) {\r\n        push(`)`);\r\n    }\r\n    if (directives) {\r\n        push(`, `);\r\n        genNode(directives, context);\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genNullableArgs(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i] != null)\r\n            break;\r\n    }\r\n    return args.slice(0, i + 1).map(arg => arg || `null`);\r\n}\r\n// JavaScript\r\nfunction genCallExpression(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const callee = shared.isString(node.callee) ? node.callee : helper(node.callee);\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(callee + `(`, node);\r\n    genNodeList(node.arguments, context);\r\n    push(`)`);\r\n}\r\nfunction genObjectExpression(node, context) {\r\n    const { push, indent, deindent, newline } = context;\r\n    const { properties } = node;\r\n    if (!properties.length) {\r\n        push(`{}`, node);\r\n        return;\r\n    }\r\n    const multilines = properties.length > 1 ||\r\n        (properties.some(p => p.value.type !== 4 /* SIMPLE_EXPRESSION */));\r\n    push(multilines ? `{` : `{ `);\r\n    multilines && indent();\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const { key, value } = properties[i];\r\n        // key\r\n        genExpressionAsPropertyKey(key, context);\r\n        push(`: `);\r\n        // value\r\n        genNode(value, context);\r\n        if (i < properties.length - 1) {\r\n            // will only reach this if it's multilines\r\n            push(`,`);\r\n            newline();\r\n        }\r\n    }\r\n    multilines && deindent();\r\n    push(multilines ? `}` : ` }`);\r\n}\r\nfunction genArrayExpression(node, context) {\r\n    genNodeListAsArray(node.elements, context);\r\n}\r\nfunction genFunctionExpression(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    const { params, returns, body, newline, isSlot } = node;\r\n    if (isSlot) {\r\n        // wrap slot functions with owner context\r\n        push(`_${helperNameMap[WITH_CTX]}(`);\r\n    }\r\n    push(`(`, node);\r\n    if (shared.isArray(params)) {\r\n        genNodeList(params, context);\r\n    }\r\n    else if (params) {\r\n        genNode(params, context);\r\n    }\r\n    push(`) => `);\r\n    if (newline || body) {\r\n        push(`{`);\r\n        indent();\r\n    }\r\n    if (returns) {\r\n        if (newline) {\r\n            push(`return `);\r\n        }\r\n        if (shared.isArray(returns)) {\r\n            genNodeListAsArray(returns, context);\r\n        }\r\n        else {\r\n            genNode(returns, context);\r\n        }\r\n    }\r\n    else if (body) {\r\n        genNode(body, context);\r\n    }\r\n    if (newline || body) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    if (isSlot) {\r\n        if (node.isNonScopedSlot) {\r\n            push(`, undefined, true`);\r\n        }\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genConditionalExpression(node, context) {\r\n    const { test, consequent, alternate, newline: needNewline } = node;\r\n    const { push, indent, deindent, newline } = context;\r\n    if (test.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        const needsParens = !isSimpleIdentifier(test.content);\r\n        needsParens && push(`(`);\r\n        genExpression(test, context);\r\n        needsParens && push(`)`);\r\n    }\r\n    else {\r\n        push(`(`);\r\n        genNode(test, context);\r\n        push(`)`);\r\n    }\r\n    needNewline && indent();\r\n    context.indentLevel++;\r\n    needNewline || push(` `);\r\n    push(`? `);\r\n    genNode(consequent, context);\r\n    context.indentLevel--;\r\n    needNewline && newline();\r\n    needNewline || push(` `);\r\n    push(`: `);\r\n    const isNested = alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */;\r\n    if (!isNested) {\r\n        context.indentLevel++;\r\n    }\r\n    genNode(alternate, context);\r\n    if (!isNested) {\r\n        context.indentLevel--;\r\n    }\r\n    needNewline && deindent(true /* without newline */);\r\n}\r\nfunction genCacheExpression(node, context) {\r\n    const { push, helper, indent, deindent, newline } = context;\r\n    push(`_cache[${node.index}] || (`);\r\n    if (node.isVNode) {\r\n        indent();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\r\n        newline();\r\n    }\r\n    push(`_cache[${node.index}] = `);\r\n    genNode(node.value, context);\r\n    if (node.isVNode) {\r\n        push(`,`);\r\n        newline();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(1),`);\r\n        newline();\r\n        push(`_cache[${node.index}]`);\r\n        deindent();\r\n    }\r\n    push(`)`);\r\n}\r\nfunction genTemplateLiteral(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    push('`');\r\n    const l = node.elements.length;\r\n    const multilines = l > 3;\r\n    for (let i = 0; i < l; i++) {\r\n        const e = node.elements[i];\r\n        if (shared.isString(e)) {\r\n            push(e.replace(/(`|\\$|\\\\)/g, '\\\\$1'));\r\n        }\r\n        else {\r\n            push('${');\r\n            if (multilines)\r\n                indent();\r\n            genNode(e, context);\r\n            if (multilines)\r\n                deindent();\r\n            push('}');\r\n        }\r\n    }\r\n    push('`');\r\n}\r\nfunction genIfStatement(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    const { test, consequent, alternate } = node;\r\n    push(`if (`);\r\n    genNode(test, context);\r\n    push(`) {`);\r\n    indent();\r\n    genNode(consequent, context);\r\n    deindent();\r\n    push(`}`);\r\n    if (alternate) {\r\n        push(` else `);\r\n        if (alternate.type === 23 /* JS_IF_STATEMENT */) {\r\n            genIfStatement(alternate, context);\r\n        }\r\n        else {\r\n            push(`{`);\r\n            indent();\r\n            genNode(alternate, context);\r\n            deindent();\r\n            push(`}`);\r\n        }\r\n    }\r\n}\r\nfunction genAssignmentExpression(node, context) {\r\n    genNode(node.left, context);\r\n    context.push(` = `);\r\n    genNode(node.right, context);\r\n}\r\nfunction genSequenceExpression(node, context) {\r\n    context.push(`(`);\r\n    genNodeList(node.expressions, context);\r\n    context.push(`)`);\r\n}\r\nfunction genReturnStatement({ returns }, context) {\r\n    context.push(`return `);\r\n    if (shared.isArray(returns)) {\r\n        genNodeListAsArray(returns, context);\r\n    }\r\n    else {\r\n        genNode(returns, context);\r\n    }\r\n}\n\nconst isLiteralWhitelisted = /*#__PURE__*/ shared.makeMap('true,false,null,this');\r\nconst transformExpression = (node, context) => {\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        node.content = processExpression(node.content, context);\r\n    }\r\n    else if (node.type === 1 /* ELEMENT */) {\r\n        // handle directives on element\r\n        for (let i = 0; i < node.props.length; i++) {\r\n            const dir = node.props[i];\r\n            // do not process for v-on & v-for since they are special handled\r\n            if (dir.type === 7 /* DIRECTIVE */ && dir.name !== 'for') {\r\n                const exp = dir.exp;\r\n                const arg = dir.arg;\r\n                // do not process exp if this is v-on:arg - we need special handling\r\n                // for wrapping inline statements.\r\n                if (exp &&\r\n                    exp.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                    !(dir.name === 'on' && arg)) {\r\n                    dir.exp = processExpression(exp, context, \r\n                    // slot args must be processed as function params\r\n                    dir.name === 'slot');\r\n                }\r\n                if (arg && arg.type === 4 /* SIMPLE_EXPRESSION */ && !arg.isStatic) {\r\n                    dir.arg = processExpression(arg, context);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n// Important: since this function uses Node.js only dependencies, it should\r\n// always be used with a leading !false check so that it can be\r\n// tree-shaken from the browser build.\r\nfunction processExpression(node, context, \r\n// some expressions like v-slot props & v-for aliases should be parsed as\r\n// function params\r\nasParams = false, \r\n// v-on handler values may contain multiple statements\r\nasRawStatements = false) {\r\n    if (!context.prefixIdentifiers || !node.content.trim()) {\r\n        return node;\r\n    }\r\n    const { inline, bindingMetadata } = context;\r\n    const rewriteIdentifier = (raw, parent, id) => {\r\n        const type = shared.hasOwn(bindingMetadata, raw) && bindingMetadata[raw];\r\n        if (inline) {\r\n            // x = y\r\n            const isAssignmentLVal = parent && parent.type === 'AssignmentExpression' && parent.left === id;\r\n            // x++\r\n            const isUpdateArg = parent && parent.type === 'UpdateExpression' && parent.argument === id;\r\n            // ({ x } = y)\r\n            const isDestructureAssignment = parent && isInDestructureAssignment(parent, parentStack);\r\n            if (type === \"setup-const\" /* SETUP_CONST */) {\r\n                return raw;\r\n            }\r\n            else if (type === \"setup-ref\" /* SETUP_REF */) {\r\n                return `${raw}.value`;\r\n            }\r\n            else if (type === \"setup-maybe-ref\" /* SETUP_MAYBE_REF */) {\r\n                // const binding that may or may not be ref\r\n                // if it's not a ref, then assignments don't make sense -\r\n                // so we ignore the non-ref assignment case and generate code\r\n                // that assumes the value to be a ref for more efficiency\r\n                return isAssignmentLVal || isUpdateArg || isDestructureAssignment\r\n                    ? `${raw}.value`\r\n                    : `${context.helperString(UNREF)}(${raw})`;\r\n            }\r\n            else if (type === \"setup-let\" /* SETUP_LET */) {\r\n                if (isAssignmentLVal) {\r\n                    // let binding.\r\n                    // this is a bit more tricky as we need to cover the case where\r\n                    // let is a local non-ref value, and we need to replicate the\r\n                    // right hand side value.\r\n                    // x = y --> isRef(x) ? x.value = y : x = y\r\n                    const { right: rVal, operator } = parent;\r\n                    const rExp = rawExp.slice(rVal.start - 1, rVal.end - 1);\r\n                    const rExpString = stringifyExpression(processExpression(createSimpleExpression(rExp, false), context));\r\n                    return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\\n` : ``} ? ${raw}.value ${operator} ${rExpString} : ${raw}`;\r\n                }\r\n                else if (isUpdateArg) {\r\n                    // make id replace parent in the code range so the raw update operator\r\n                    // is removed\r\n                    id.start = parent.start;\r\n                    id.end = parent.end;\r\n                    const { prefix: isPrefix, operator } = parent;\r\n                    const prefix = isPrefix ? operator : ``;\r\n                    const postfix = isPrefix ? `` : operator;\r\n                    // let binding.\r\n                    // x++ --> isRef(a) ? a.value++ : a++\r\n                    return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\\n` : ``} ? ${prefix}${raw}.value${postfix} : ${prefix}${raw}${postfix}`;\r\n                }\r\n                else if (isDestructureAssignment) {\r\n                    // TODO\r\n                    // let binding in a destructure assignment - it's very tricky to\r\n                    // handle both possible cases here without altering the original\r\n                    // structure of the code, so we just assume it's not a ref here\r\n                    // for now\r\n                    return raw;\r\n                }\r\n                else {\r\n                    return `${context.helperString(UNREF)}(${raw})`;\r\n                }\r\n            }\r\n            else if (type === \"props\" /* PROPS */) {\r\n                // use __props which is generated by compileScript so in ts mode\r\n                // it gets correct type\r\n                return `__props.${raw}`;\r\n            }\r\n        }\r\n        else {\r\n            if (type && type.startsWith('setup')) {\r\n                // setup bindings in non-inline mode\r\n                return `$setup.${raw}`;\r\n            }\r\n            else if (type) {\r\n                return `$${type}.${raw}`;\r\n            }\r\n        }\r\n        // fallback to ctx\r\n        return `_ctx.${raw}`;\r\n    };\r\n    // fast path if expression is a simple identifier.\r\n    const rawExp = node.content;\r\n    // bail constant on parens (function invocation) and dot (member access)\r\n    const bailConstant = rawExp.indexOf(`(`) > -1 || rawExp.indexOf('.') > 0;\r\n    if (isSimpleIdentifier(rawExp)) {\r\n        const isScopeVarReference = context.identifiers[rawExp];\r\n        const isAllowedGlobal = shared.isGloballyWhitelisted(rawExp);\r\n        const isLiteral = isLiteralWhitelisted(rawExp);\r\n        if (!asParams && !isScopeVarReference && !isAllowedGlobal && !isLiteral) {\r\n            // const bindings exposed from setup can be skipped for patching but\r\n            // cannot be hoisted to module scope\r\n            if (bindingMetadata[node.content] === \"setup-const\" /* SETUP_CONST */) {\r\n                node.constType = 1 /* CAN_SKIP_PATCH */;\r\n            }\r\n            node.content = rewriteIdentifier(rawExp);\r\n        }\r\n        else if (!isScopeVarReference) {\r\n            if (isLiteral) {\r\n                node.constType = 3 /* CAN_STRINGIFY */;\r\n            }\r\n            else {\r\n                node.constType = 2 /* CAN_HOIST */;\r\n            }\r\n        }\r\n        return node;\r\n    }\r\n    let ast;\r\n    // exp needs to be parsed differently:\r\n    // 1. Multiple inline statements (v-on, with presence of `;`): parse as raw\r\n    //    exp, but make sure to pad with spaces for consistent ranges\r\n    // 2. Expressions: wrap with parens (for e.g. object expressions)\r\n    // 3. Function arguments (v-for, v-slot): place in a function argument position\r\n    const source = asRawStatements\r\n        ? ` ${rawExp} `\r\n        : `(${rawExp})${asParams ? `=>{}` : ``}`;\r\n    try {\r\n        ast = parser.parse(source, {\r\n            plugins: [...context.expressionPlugins, ...shared.babelParserDefaultPlugins]\r\n        }).program;\r\n    }\r\n    catch (e) {\r\n        context.onError(createCompilerError(43 /* X_INVALID_EXPRESSION */, node.loc, undefined, e.message));\r\n        return node;\r\n    }\r\n    const ids = [];\r\n    const knownIds = Object.create(context.identifiers);\r\n    const isDuplicate = (node) => ids.some(id => id.start === node.start);\r\n    const parentStack = [];\r\n    estreeWalker.walk(ast, {\r\n        enter(node, parent) {\r\n            parent && parentStack.push(parent);\r\n            if (node.type === 'Identifier') {\r\n                if (!isDuplicate(node)) {\r\n                    // v2 wrapped filter call\r\n                    if (node.name.startsWith('_filter_')) {\r\n                        return;\r\n                    }\r\n                    const needPrefix = shouldPrefix(node, parent, parentStack);\r\n                    if (!knownIds[node.name] && needPrefix) {\r\n                        if (isStaticProperty(parent) && parent.shorthand) {\r\n                            // property shorthand like { foo }, we need to add the key since\r\n                            // we rewrite the value\r\n                            node.prefix = `${node.name}: `;\r\n                        }\r\n                        node.name = rewriteIdentifier(node.name, parent, node);\r\n                        ids.push(node);\r\n                    }\r\n                    else if (!isStaticPropertyKey(node, parent)) {\r\n                        // The identifier is considered constant unless it's pointing to a\r\n                        // scope variable (a v-for alias, or a v-slot prop)\r\n                        if (!(needPrefix && knownIds[node.name]) && !bailConstant) {\r\n                            node.isConstant = true;\r\n                        }\r\n                        // also generate sub-expressions for other identifiers for better\r\n                        // source map support. (except for property keys which are static)\r\n                        ids.push(node);\r\n                    }\r\n                }\r\n            }\r\n            else if (isFunction(node)) {\r\n                // walk function expressions and add its arguments to known identifiers\r\n                // so that we don't prefix them\r\n                node.params.forEach(p => estreeWalker.walk(p, {\r\n                    enter(child, parent) {\r\n                        if (child.type === 'Identifier' &&\r\n                            // do not record as scope variable if is a destructured key\r\n                            !isStaticPropertyKey(child, parent) &&\r\n                            // do not record if this is a default value\r\n                            // assignment of a destructured variable\r\n                            !(parent &&\r\n                                parent.type === 'AssignmentPattern' &&\r\n                                parent.right === child)) {\r\n                            const { name } = child;\r\n                            if (node.scopeIds && node.scopeIds.has(name)) {\r\n                                return;\r\n                            }\r\n                            if (name in knownIds) {\r\n                                knownIds[name]++;\r\n                            }\r\n                            else {\r\n                                knownIds[name] = 1;\r\n                            }\r\n                            (node.scopeIds || (node.scopeIds = new Set())).add(name);\r\n                        }\r\n                    }\r\n                }));\r\n            }\r\n        },\r\n        leave(node, parent) {\r\n            parent && parentStack.pop();\r\n            if (node !== ast.body[0].expression && node.scopeIds) {\r\n                node.scopeIds.forEach((id) => {\r\n                    knownIds[id]--;\r\n                    if (knownIds[id] === 0) {\r\n                        delete knownIds[id];\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    });\r\n    // We break up the compound expression into an array of strings and sub\r\n    // expressions (for identifiers that have been prefixed). In codegen, if\r\n    // an ExpressionNode has the `.children` property, it will be used instead of\r\n    // `.content`.\r\n    const children = [];\r\n    ids.sort((a, b) => a.start - b.start);\r\n    ids.forEach((id, i) => {\r\n        // range is offset by -1 due to the wrapping parens when parsed\r\n        const start = id.start - 1;\r\n        const end = id.end - 1;\r\n        const last = ids[i - 1];\r\n        const leadingText = rawExp.slice(last ? last.end - 1 : 0, start);\r\n        if (leadingText.length || id.prefix) {\r\n            children.push(leadingText + (id.prefix || ``));\r\n        }\r\n        const source = rawExp.slice(start, end);\r\n        children.push(createSimpleExpression(id.name, false, {\r\n            source,\r\n            start: advancePositionWithClone(node.loc.start, source, start),\r\n            end: advancePositionWithClone(node.loc.start, source, end)\r\n        }, id.isConstant ? 3 /* CAN_STRINGIFY */ : 0 /* NOT_CONSTANT */));\r\n        if (i === ids.length - 1 && end < rawExp.length) {\r\n            children.push(rawExp.slice(end));\r\n        }\r\n    });\r\n    let ret;\r\n    if (children.length) {\r\n        ret = createCompoundExpression(children, node.loc);\r\n    }\r\n    else {\r\n        ret = node;\r\n        ret.constType = bailConstant\r\n            ? 0 /* NOT_CONSTANT */\r\n            : 3 /* CAN_STRINGIFY */;\r\n    }\r\n    ret.identifiers = Object.keys(knownIds);\r\n    return ret;\r\n}\r\nconst isFunction = (node) => {\r\n    return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\r\n};\r\nconst isStaticProperty = (node) => node &&\r\n    (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&\r\n    !node.computed;\r\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\r\nfunction shouldPrefix(id, parent, parentStack) {\r\n    // declaration id\r\n    if ((parent.type === 'VariableDeclarator' ||\r\n        parent.type === 'ClassDeclaration') &&\r\n        parent.id === id) {\r\n        return false;\r\n    }\r\n    if (isFunction(parent)) {\r\n        // function decalration/expression id\r\n        if (parent.id === id) {\r\n            return false;\r\n        }\r\n        // params list\r\n        if (parent.params.includes(id)) {\r\n            return false;\r\n        }\r\n    }\r\n    // property key\r\n    // this also covers object destructure pattern\r\n    if (isStaticPropertyKey(id, parent)) {\r\n        return false;\r\n    }\r\n    // non-assignment array destructure pattern\r\n    if (parent.type === 'ArrayPattern' &&\r\n        !isInDestructureAssignment(parent, parentStack)) {\r\n        return false;\r\n    }\r\n    // member expression property\r\n    if ((parent.type === 'MemberExpression' ||\r\n        parent.type === 'OptionalMemberExpression') &&\r\n        parent.property === id &&\r\n        !parent.computed) {\r\n        return false;\r\n    }\r\n    // is a special keyword but parsed as identifier\r\n    if (id.name === 'arguments') {\r\n        return false;\r\n    }\r\n    // skip whitelisted globals\r\n    if (shared.isGloballyWhitelisted(id.name)) {\r\n        return false;\r\n    }\r\n    // special case for webpack compilation\r\n    if (id.name === 'require') {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction isInDestructureAssignment(parent, parentStack) {\r\n    if (parent &&\r\n        (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {\r\n        let i = parentStack.length;\r\n        while (i--) {\r\n            const p = parentStack[i];\r\n            if (p.type === 'AssignmentExpression') {\r\n                return true;\r\n            }\r\n            else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction stringifyExpression(exp) {\r\n    if (shared.isString(exp)) {\r\n        return exp;\r\n    }\r\n    else if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        return exp.content;\r\n    }\r\n    else {\r\n        return exp.children\r\n            .map(stringifyExpression)\r\n            .join('');\r\n    }\r\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\r\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\r\n        // #1587: We need to dynamically increment the key based on the current\r\n        // node's sibling nodes, since chained v-if/else branches are\r\n        // rendered at the same depth\r\n        const siblings = context.parent.children;\r\n        let i = siblings.indexOf(ifNode);\r\n        let key = 0;\r\n        while (i-- >= 0) {\r\n            const sibling = siblings[i];\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                key += sibling.branches.length;\r\n            }\r\n        }\r\n        // Exit callback. Complete the codegenNode when all children have been\r\n        // transformed.\r\n        return () => {\r\n            if (isRoot) {\r\n                ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\r\n            }\r\n            else {\r\n                // attach this branch's codegen node to the v-if root.\r\n                const parentCondition = getParentCondition(ifNode.codegenNode);\r\n                parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processIf(node, dir, context, processCodegen) {\r\n    if (dir.name !== 'else' &&\r\n        (!dir.exp || !dir.exp.content.trim())) {\r\n        const loc = dir.exp ? dir.exp.loc : node.loc;\r\n        context.onError(createCompilerError(27 /* X_V_IF_NO_EXPRESSION */, dir.loc));\r\n        dir.exp = createSimpleExpression(`true`, false, loc);\r\n    }\r\n    if (context.prefixIdentifiers && dir.exp) {\r\n        // dir.exp can only be simple expression because vIf transform is applied\r\n        // before expression transform.\r\n        dir.exp = processExpression(dir.exp, context);\r\n    }\r\n    if (dir.name === 'if') {\r\n        const branch = createIfBranch(node, dir);\r\n        const ifNode = {\r\n            type: 9 /* IF */,\r\n            loc: node.loc,\r\n            branches: [branch]\r\n        };\r\n        context.replaceNode(ifNode);\r\n        if (processCodegen) {\r\n            return processCodegen(ifNode, branch, true);\r\n        }\r\n    }\r\n    else {\r\n        // locate the adjacent v-if\r\n        const siblings = context.parent.children;\r\n        const comments = [];\r\n        let i = siblings.indexOf(node);\r\n        while (i-- >= -1) {\r\n            const sibling = siblings[i];\r\n            if (sibling && sibling.type === 3 /* COMMENT */) {\r\n                context.removeNode(sibling);\r\n                comments.unshift(sibling);\r\n                continue;\r\n            }\r\n            if (sibling &&\r\n                sibling.type === 2 /* TEXT */ &&\r\n                !sibling.content.trim().length) {\r\n                context.removeNode(sibling);\r\n                continue;\r\n            }\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                // move the node to the if node's branches\r\n                context.removeNode();\r\n                const branch = createIfBranch(node, dir);\r\n                if (comments.length &&\r\n                    // #3619 ignore comments if the v-if is direct child of <transition>\r\n                    !(context.parent &&\r\n                        context.parent.type === 1 /* ELEMENT */ &&\r\n                        isBuiltInType(context.parent.tag, 'transition'))) {\r\n                    branch.children = [...comments, ...branch.children];\r\n                }\r\n                // check if user is forcing same key on different branches\r\n                {\r\n                    const key = branch.userKey;\r\n                    if (key) {\r\n                        sibling.branches.forEach(({ userKey }) => {\r\n                            if (isSameKey(userKey, key)) {\r\n                                context.onError(createCompilerError(28 /* X_V_IF_SAME_KEY */, branch.userKey.loc));\r\n                            }\r\n                        });\r\n                    }\r\n                }\r\n                sibling.branches.push(branch);\r\n                const onExit = processCodegen && processCodegen(sibling, branch, false);\r\n                // since the branch was removed, it will not be traversed.\r\n                // make sure to traverse here.\r\n                traverseNode(branch, context);\r\n                // call on exit\r\n                if (onExit)\r\n                    onExit();\r\n                // make sure to reset currentNode after traversal to indicate this\r\n                // node has been removed.\r\n                context.currentNode = null;\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));\r\n            }\r\n            break;\r\n        }\r\n    }\r\n}\r\nfunction createIfBranch(node, dir) {\r\n    return {\r\n        type: 10 /* IF_BRANCH */,\r\n        loc: node.loc,\r\n        condition: dir.name === 'else' ? undefined : dir.exp,\r\n        children: node.tagType === 3 /* TEMPLATE */ && !findDir(node, 'for')\r\n            ? node.children\r\n            : [node],\r\n        userKey: findProp(node, `key`)\r\n    };\r\n}\r\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\r\n    if (branch.condition) {\r\n        return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \r\n        // make sure to pass in asBlock: true so that the comment node call\r\n        // closes the current block.\r\n        createCallExpression(context.helper(CREATE_COMMENT), [\r\n            '\"v-if\"' ,\r\n            'true'\r\n        ]));\r\n    }\r\n    else {\r\n        return createChildrenCodegenNode(branch, keyIndex, context);\r\n    }\r\n}\r\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\r\n    const { helper } = context;\r\n    const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* CAN_HOIST */));\r\n    const { children } = branch;\r\n    const firstChild = children[0];\r\n    const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;\r\n    if (needFragmentWrapper) {\r\n        if (children.length === 1 && firstChild.type === 11 /* FOR */) {\r\n            // optimize away nested fragments when child is a ForNode\r\n            const vnodeCall = firstChild.codegenNode;\r\n            injectProp(vnodeCall, keyProperty, context);\r\n            return vnodeCall;\r\n        }\r\n        else {\r\n            let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n            let patchFlagText = shared.PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n            // check if the fragment actually contains a single valid child with\r\n            // the rest being comments\r\n            if (children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n                patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n                patchFlagText += `, ${shared.PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n            }\r\n            return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, false, false /* isComponent */, branch.loc);\r\n        }\r\n    }\r\n    else {\r\n        const ret = firstChild.codegenNode;\r\n        const vnodeCall = getMemoedVNodeCall(ret);\r\n        // Change createVNode to createBlock.\r\n        if (vnodeCall.type === 13 /* VNODE_CALL */) {\r\n            makeBlock(vnodeCall, context);\r\n        }\r\n        // inject branch key\r\n        injectProp(vnodeCall, keyProperty, context);\r\n        return ret;\r\n    }\r\n}\r\nfunction isSameKey(a, b) {\r\n    if (!a || a.type !== b.type) {\r\n        return false;\r\n    }\r\n    if (a.type === 6 /* ATTRIBUTE */) {\r\n        if (a.value.content !== b.value.content) {\r\n            return false;\r\n        }\r\n    }\r\n    else {\r\n        // directive\r\n        const exp = a.exp;\r\n        const branchExp = b.exp;\r\n        if (exp.type !== branchExp.type) {\r\n            return false;\r\n        }\r\n        if (exp.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n            exp.isStatic !== branchExp.isStatic ||\r\n            exp.content !== branchExp.content) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction getParentCondition(node) {\r\n    while (true) {\r\n        if (node.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n            if (node.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                node = node.alternate;\r\n            }\r\n            else {\r\n                return node;\r\n            }\r\n        }\r\n        else if (node.type === 20 /* JS_CACHE_EXPRESSION */) {\r\n            node = node.value;\r\n        }\r\n    }\r\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\r\n    const { helper, removeHelper } = context;\r\n    return processFor(node, dir, context, forNode => {\r\n        // create the loop render function expression now, and add the\r\n        // iterator on exit after all children have been traversed\r\n        const renderExp = createCallExpression(helper(RENDER_LIST), [\r\n            forNode.source\r\n        ]);\r\n        const memo = findDir(node, 'memo');\r\n        const keyProp = findProp(node, `key`);\r\n        const keyExp = keyProp &&\r\n            (keyProp.type === 6 /* ATTRIBUTE */\r\n                ? createSimpleExpression(keyProp.value.content, true)\r\n                : keyProp.exp);\r\n        const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\r\n        if (context.prefixIdentifiers && keyProperty) {\r\n            // #2085 process :key expression needs to be processed in order for it\r\n            // to behave consistently for <template v-for> and <div v-for>.\r\n            // In the case of `<template v-for>`, the node is discarded and never\r\n            // traversed so its key expression won't be processed by the normal\r\n            // transforms.\r\n            keyProperty.value = processExpression(keyProperty.value, context);\r\n        }\r\n        const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n            forNode.source.constType > 0 /* NOT_CONSTANT */;\r\n        const fragmentFlag = isStableFragment\r\n            ? 64 /* STABLE_FRAGMENT */\r\n            : keyProp\r\n                ? 128 /* KEYED_FRAGMENT */\r\n                : 256 /* UNKEYED_FRAGMENT */;\r\n        forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\r\n            (` /* ${shared.PatchFlagNames[fragmentFlag]} */` ), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\r\n        return () => {\r\n            // finish the codegen now that all children have been traversed\r\n            let childBlock;\r\n            const isTemplate = isTemplateNode(node);\r\n            const { children } = forNode;\r\n            // check <template v-for> key placement\r\n            if (isTemplate) {\r\n                node.children.some(c => {\r\n                    if (c.type === 1 /* ELEMENT */) {\r\n                        const key = findProp(c, 'key');\r\n                        if (key) {\r\n                            context.onError(createCompilerError(32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\r\n                            return true;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;\r\n            const slotOutlet = isSlotOutlet(node)\r\n                ? node\r\n                : isTemplate &&\r\n                    node.children.length === 1 &&\r\n                    isSlotOutlet(node.children[0])\r\n                    ? node.children[0] // api-extractor somehow fails to infer this\r\n                    : null;\r\n            if (slotOutlet) {\r\n                // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\r\n                childBlock = slotOutlet.codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    // <template v-for=\"...\" :key=\"...\"><slot/></template>\r\n                    // we need to inject the key to the renderSlot() call.\r\n                    // the props for renderSlot is passed as the 3rd argument.\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n            }\r\n            else if (needFragmentWrapper) {\r\n                // <template v-for=\"...\"> with text or multi-elements\r\n                // should generate a fragment block for each loop\r\n                childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* STABLE_FRAGMENT */ +\r\n                    (` /* ${shared.PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`\r\n                        ), undefined, undefined, true, undefined, false /* isComponent */);\r\n            }\r\n            else {\r\n                // Normal element v-for. Directly use the child's codegenNode\r\n                // but mark it as a block.\r\n                childBlock = children[0]\r\n                    .codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n                if (childBlock.isBlock !== !isStableFragment) {\r\n                    if (childBlock.isBlock) {\r\n                        // switch from block to vnode\r\n                        removeHelper(OPEN_BLOCK);\r\n                        removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                    else {\r\n                        // switch from vnode to block\r\n                        removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                }\r\n                childBlock.isBlock = !isStableFragment;\r\n                if (childBlock.isBlock) {\r\n                    helper(OPEN_BLOCK);\r\n                    helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n                else {\r\n                    helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n            }\r\n            if (memo) {\r\n                const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\r\n                    createSimpleExpression(`_cached`)\r\n                ]));\r\n                loop.body = createBlockStatement([\r\n                    createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\r\n                    createCompoundExpression([\r\n                        `if (_cached`,\r\n                        ...(keyExp ? [` && _cached.key === `, keyExp] : []),\r\n                        ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\r\n                    ]),\r\n                    createCompoundExpression([`const _item = `, childBlock]),\r\n                    createSimpleExpression(`_item.memo = _memo`),\r\n                    createSimpleExpression(`return _item`)\r\n                ]);\r\n                renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\r\n            }\r\n            else {\r\n                renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processFor(node, dir, context, processCodegen) {\r\n    if (!dir.exp) {\r\n        context.onError(createCompilerError(30 /* X_V_FOR_NO_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const parseResult = parseForExpression(\r\n    // can only be simple expression because vFor transform is applied\r\n    // before expression transform.\r\n    dir.exp, context);\r\n    if (!parseResult) {\r\n        context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const { addIdentifiers, removeIdentifiers, scopes } = context;\r\n    const { source, value, key, index } = parseResult;\r\n    const forNode = {\r\n        type: 11 /* FOR */,\r\n        loc: dir.loc,\r\n        source,\r\n        valueAlias: value,\r\n        keyAlias: key,\r\n        objectIndexAlias: index,\r\n        parseResult,\r\n        children: isTemplateNode(node) ? node.children : [node]\r\n    };\r\n    context.replaceNode(forNode);\r\n    // bookkeeping\r\n    scopes.vFor++;\r\n    if (context.prefixIdentifiers) {\r\n        // scope management\r\n        // inject identifiers to context\r\n        value && addIdentifiers(value);\r\n        key && addIdentifiers(key);\r\n        index && addIdentifiers(index);\r\n    }\r\n    const onExit = processCodegen && processCodegen(forNode);\r\n    return () => {\r\n        scopes.vFor--;\r\n        if (context.prefixIdentifiers) {\r\n            value && removeIdentifiers(value);\r\n            key && removeIdentifiers(key);\r\n            index && removeIdentifiers(index);\r\n        }\r\n        if (onExit)\r\n            onExit();\r\n    };\r\n}\r\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\r\n// This regex doesn't cover the case if key or index aliases have destructuring,\r\n// but those do not make sense in the first place, so this works in practice.\r\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\r\nconst stripParensRE = /^\\(|\\)$/g;\r\nfunction parseForExpression(input, context) {\r\n    const loc = input.loc;\r\n    const exp = input.content;\r\n    const inMatch = exp.match(forAliasRE);\r\n    if (!inMatch)\r\n        return;\r\n    const [, LHS, RHS] = inMatch;\r\n    const result = {\r\n        source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\r\n        value: undefined,\r\n        key: undefined,\r\n        index: undefined\r\n    };\r\n    if (context.prefixIdentifiers) {\r\n        result.source = processExpression(result.source, context);\r\n    }\r\n    let valueContent = LHS.trim().replace(stripParensRE, '').trim();\r\n    const trimmedOffset = LHS.indexOf(valueContent);\r\n    const iteratorMatch = valueContent.match(forIteratorRE);\r\n    if (iteratorMatch) {\r\n        valueContent = valueContent.replace(forIteratorRE, '').trim();\r\n        const keyContent = iteratorMatch[1].trim();\r\n        let keyOffset;\r\n        if (keyContent) {\r\n            keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\r\n            result.key = createAliasExpression(loc, keyContent, keyOffset);\r\n            if (context.prefixIdentifiers) {\r\n                result.key = processExpression(result.key, context, true);\r\n            }\r\n        }\r\n        if (iteratorMatch[2]) {\r\n            const indexContent = iteratorMatch[2].trim();\r\n            if (indexContent) {\r\n                result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\r\n                    ? keyOffset + keyContent.length\r\n                    : trimmedOffset + valueContent.length));\r\n                if (context.prefixIdentifiers) {\r\n                    result.index = processExpression(result.index, context, true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (valueContent) {\r\n        result.value = createAliasExpression(loc, valueContent, trimmedOffset);\r\n        if (context.prefixIdentifiers) {\r\n            result.value = processExpression(result.value, context, true);\r\n        }\r\n    }\r\n    return result;\r\n}\r\nfunction createAliasExpression(range, content, offset) {\r\n    return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\r\n}\r\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\r\n    return createParamsList([value, key, index, ...memoArgs]);\r\n}\r\nfunction createParamsList(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i])\r\n            break;\r\n    }\r\n    return args\r\n        .slice(0, i + 1)\r\n        .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\r\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\r\n// A NodeTransform that:\r\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\r\n//    by transformExpression. This is only applied in non-browser builds with\r\n//    { prefixIdentifiers: true }.\r\n// 2. Track v-slot depths so that we know a slot is inside another slot.\r\n//    Note the exit callback is executed before buildSlots() on the same node,\r\n//    so only nested slots see positive numbers.\r\nconst trackSlotScopes = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        (node.tagType === 1 /* COMPONENT */ ||\r\n            node.tagType === 3 /* TEMPLATE */)) {\r\n        // We are only checking non-empty v-slot here\r\n        // since we only care about slots that introduce scope variables.\r\n        const vSlot = findDir(node, 'slot');\r\n        if (vSlot) {\r\n            const slotProps = vSlot.exp;\r\n            if (context.prefixIdentifiers) {\r\n                slotProps && context.addIdentifiers(slotProps);\r\n            }\r\n            context.scopes.vSlot++;\r\n            return () => {\r\n                if (context.prefixIdentifiers) {\r\n                    slotProps && context.removeIdentifiers(slotProps);\r\n                }\r\n                context.scopes.vSlot--;\r\n            };\r\n        }\r\n    }\r\n};\r\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\r\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\r\nconst trackVForSlotScopes = (node, context) => {\r\n    let vFor;\r\n    if (isTemplateNode(node) &&\r\n        node.props.some(isVSlot) &&\r\n        (vFor = findDir(node, 'for'))) {\r\n        const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\r\n        if (result) {\r\n            const { value, key, index } = result;\r\n            const { addIdentifiers, removeIdentifiers } = context;\r\n            value && addIdentifiers(value);\r\n            key && addIdentifiers(key);\r\n            index && addIdentifiers(index);\r\n            return () => {\r\n                value && removeIdentifiers(value);\r\n                key && removeIdentifiers(key);\r\n                index && removeIdentifiers(index);\r\n            };\r\n        }\r\n    }\r\n};\r\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\r\n// Instead of being a DirectiveTransform, v-slot processing is called during\r\n// transformElement to build the slots object for a component.\r\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\r\n    context.helper(WITH_CTX);\r\n    const { children, loc } = node;\r\n    const slotsProperties = [];\r\n    const dynamicSlots = [];\r\n    // If the slot is inside a v-for or another v-slot, force it to be dynamic\r\n    // since it likely uses a scope variable.\r\n    let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\r\n    // with `prefixIdentifiers: true`, this can be further optimized to make\r\n    // it dynamic only when the slot actually uses the scope variables.\r\n    if (!context.ssr && context.prefixIdentifiers) {\r\n        hasDynamicSlots = hasScopeRef(node, context.identifiers);\r\n    }\r\n    // 1. Check for slot with slotProps on component itself.\r\n    //    <Comp v-slot=\"{ prop }\"/>\r\n    const onComponentSlot = findDir(node, 'slot', true);\r\n    if (onComponentSlot) {\r\n        const { arg, exp } = onComponentSlot;\r\n        if (arg && !isStaticExp(arg)) {\r\n            hasDynamicSlots = true;\r\n        }\r\n        slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\r\n    }\r\n    // 2. Iterate through children and check for template slots\r\n    //    <template v-slot:foo=\"{ prop }\">\r\n    let hasTemplateSlots = false;\r\n    let hasNamedDefaultSlot = false;\r\n    const implicitDefaultChildren = [];\r\n    const seenSlotNames = new Set();\r\n    for (let i = 0; i < children.length; i++) {\r\n        const slotElement = children[i];\r\n        let slotDir;\r\n        if (!isTemplateNode(slotElement) ||\r\n            !(slotDir = findDir(slotElement, 'slot', true))) {\r\n            // not a <template v-slot>, skip.\r\n            if (slotElement.type !== 3 /* COMMENT */) {\r\n                implicitDefaultChildren.push(slotElement);\r\n            }\r\n            continue;\r\n        }\r\n        if (onComponentSlot) {\r\n            // already has on-component slot - this is incorrect usage.\r\n            context.onError(createCompilerError(36 /* X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\r\n            break;\r\n        }\r\n        hasTemplateSlots = true;\r\n        const { children: slotChildren, loc: slotLoc } = slotElement;\r\n        const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\r\n        // check if name is dynamic.\r\n        let staticSlotName;\r\n        if (isStaticExp(slotName)) {\r\n            staticSlotName = slotName ? slotName.content : `default`;\r\n        }\r\n        else {\r\n            hasDynamicSlots = true;\r\n        }\r\n        const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\r\n        // check if this slot is conditional (v-if/v-for)\r\n        let vIf;\r\n        let vElse;\r\n        let vFor;\r\n        if ((vIf = findDir(slotElement, 'if'))) {\r\n            hasDynamicSlots = true;\r\n            dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback));\r\n        }\r\n        else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\r\n            // find adjacent v-if\r\n            let j = i;\r\n            let prev;\r\n            while (j--) {\r\n                prev = children[j];\r\n                if (prev.type !== 3 /* COMMENT */) {\r\n                    break;\r\n                }\r\n            }\r\n            if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\r\n                // remove node\r\n                children.splice(i, 1);\r\n                i--;\r\n                // attach this slot to previous conditional\r\n                let conditional = dynamicSlots[dynamicSlots.length - 1];\r\n                while (conditional.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                    conditional = conditional.alternate;\r\n                }\r\n                conditional.alternate = vElse.exp\r\n                    ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback)\r\n                    : buildDynamicSlot(slotName, slotFunction);\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\r\n            }\r\n        }\r\n        else if ((vFor = findDir(slotElement, 'for'))) {\r\n            hasDynamicSlots = true;\r\n            const parseResult = vFor.parseResult ||\r\n                parseForExpression(vFor.exp, context);\r\n            if (parseResult) {\r\n                // Render the dynamic slots as an array and add it to the createSlot()\r\n                // args. The runtime knows how to handle it appropriately.\r\n                dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\r\n                    parseResult.source,\r\n                    createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\r\n                ]));\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\r\n            }\r\n        }\r\n        else {\r\n            // check duplicate static names\r\n            if (staticSlotName) {\r\n                if (seenSlotNames.has(staticSlotName)) {\r\n                    context.onError(createCompilerError(37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\r\n                    continue;\r\n                }\r\n                seenSlotNames.add(staticSlotName);\r\n                if (staticSlotName === 'default') {\r\n                    hasNamedDefaultSlot = true;\r\n                }\r\n            }\r\n            slotsProperties.push(createObjectProperty(slotName, slotFunction));\r\n        }\r\n    }\r\n    if (!onComponentSlot) {\r\n        const buildDefaultSlotProperty = (props, children) => {\r\n            const fn = buildSlotFn(props, children, loc);\r\n            if (context.compatConfig) {\r\n                fn.isNonScopedSlot = true;\r\n            }\r\n            return createObjectProperty(`default`, fn);\r\n        };\r\n        if (!hasTemplateSlots) {\r\n            // implicit default slot (on component)\r\n            slotsProperties.push(buildDefaultSlotProperty(undefined, children));\r\n        }\r\n        else if (implicitDefaultChildren.length &&\r\n            // #3766\r\n            // with whitespace: 'preserve', whitespaces between slots will end up in\r\n            // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\r\n            implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\r\n            // implicit default slot (mixed with named slots)\r\n            if (hasNamedDefaultSlot) {\r\n                context.onError(createCompilerError(38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\r\n            }\r\n            else {\r\n                slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\r\n            }\r\n        }\r\n    }\r\n    const slotFlag = hasDynamicSlots\r\n        ? 2 /* DYNAMIC */\r\n        : hasForwardedSlots(node.children)\r\n            ? 3 /* FORWARDED */\r\n            : 1 /* STABLE */;\r\n    let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \r\n    // 2 = compiled but dynamic = can skip normalization, but must run diff\r\n    // 1 = compiled and static = can skip normalization AND diff as optimized\r\n    createSimpleExpression(slotFlag + (` /* ${shared.slotFlagsText[slotFlag]} */` ), false))), loc);\r\n    if (dynamicSlots.length) {\r\n        slots = createCallExpression(context.helper(CREATE_SLOTS), [\r\n            slots,\r\n            createArrayExpression(dynamicSlots)\r\n        ]);\r\n    }\r\n    return {\r\n        slots,\r\n        hasDynamicSlots\r\n    };\r\n}\r\nfunction buildDynamicSlot(name, fn) {\r\n    return createObjectExpression([\r\n        createObjectProperty(`name`, name),\r\n        createObjectProperty(`fn`, fn)\r\n    ]);\r\n}\r\nfunction hasForwardedSlots(children) {\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        switch (child.type) {\r\n            case 1 /* ELEMENT */:\r\n                if (child.tagType === 2 /* SLOT */ ||\r\n                    hasForwardedSlots(child.children)) {\r\n                    return true;\r\n                }\r\n                break;\r\n            case 9 /* IF */:\r\n                if (hasForwardedSlots(child.branches))\r\n                    return true;\r\n                break;\r\n            case 10 /* IF_BRANCH */:\r\n            case 11 /* FOR */:\r\n                if (hasForwardedSlots(child.children))\r\n                    return true;\r\n                break;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction isNonWhitespaceContent(node) {\r\n    if (node.type !== 2 /* TEXT */ && node.type !== 12 /* TEXT_CALL */)\r\n        return true;\r\n    return node.type === 2 /* TEXT */\r\n        ? !!node.content.trim()\r\n        : isNonWhitespaceContent(node.content);\r\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\r\n// import, which should be used instead of a resolveDirective call.\r\nconst directiveImportMap = new WeakMap();\r\n// generate a JavaScript AST for this element's codegen\r\nconst transformElement = (node, context) => {\r\n    // perform the work on exit, after all child expressions have been\r\n    // processed and merged.\r\n    return function postTransformElement() {\r\n        node = context.currentNode;\r\n        if (!(node.type === 1 /* ELEMENT */ &&\r\n            (node.tagType === 0 /* ELEMENT */ ||\r\n                node.tagType === 1 /* COMPONENT */))) {\r\n            return;\r\n        }\r\n        const { tag, props } = node;\r\n        const isComponent = node.tagType === 1 /* COMPONENT */;\r\n        // The goal of the transform is to create a codegenNode implementing the\r\n        // VNodeCall interface.\r\n        let vnodeTag = isComponent\r\n            ? resolveComponentType(node, context)\r\n            : `\"${tag}\"`;\r\n        const isDynamicComponent = shared.isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\r\n        let vnodeProps;\r\n        let vnodeChildren;\r\n        let vnodePatchFlag;\r\n        let patchFlag = 0;\r\n        let vnodeDynamicProps;\r\n        let dynamicPropNames;\r\n        let vnodeDirectives;\r\n        let shouldUseBlock = \r\n        // dynamic component may resolve to plain elements\r\n        isDynamicComponent ||\r\n            vnodeTag === TELEPORT ||\r\n            vnodeTag === SUSPENSE ||\r\n            (!isComponent &&\r\n                // <svg> and <foreignObject> must be forced into blocks so that block\r\n                // updates inside get proper isSVG flag at runtime. (#639, #643)\r\n                // This is technically web-specific, but splitting the logic out of core\r\n                // leads to too much unnecessary complexity.\r\n                (tag === 'svg' ||\r\n                    tag === 'foreignObject' ||\r\n                    // #938: elements with dynamic keys should be forced into blocks\r\n                    findProp(node, 'key', true)));\r\n        // props\r\n        if (props.length > 0) {\r\n            const propsBuildResult = buildProps(node, context);\r\n            vnodeProps = propsBuildResult.props;\r\n            patchFlag = propsBuildResult.patchFlag;\r\n            dynamicPropNames = propsBuildResult.dynamicPropNames;\r\n            const directives = propsBuildResult.directives;\r\n            vnodeDirectives =\r\n                directives && directives.length\r\n                    ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\r\n                    : undefined;\r\n        }\r\n        // children\r\n        if (node.children.length > 0) {\r\n            if (vnodeTag === KEEP_ALIVE) {\r\n                // Although a built-in component, we compile KeepAlive with raw children\r\n                // instead of slot functions so that it can be used inside Transition\r\n                // or other Transition-wrapping HOCs.\r\n                // To ensure correct updates with block optimizations, we need to:\r\n                // 1. Force keep-alive into a block. This avoids its children being\r\n                //    collected by a parent block.\r\n                shouldUseBlock = true;\r\n                // 2. Force keep-alive to always be updated, since it uses raw children.\r\n                patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                if (node.children.length > 1) {\r\n                    context.onError(createCompilerError(44 /* X_KEEP_ALIVE_INVALID_CHILDREN */, {\r\n                        start: node.children[0].loc.start,\r\n                        end: node.children[node.children.length - 1].loc.end,\r\n                        source: ''\r\n                    }));\r\n                }\r\n            }\r\n            const shouldBuildAsSlots = isComponent &&\r\n                // Teleport is not a real component and has dedicated runtime handling\r\n                vnodeTag !== TELEPORT &&\r\n                // explained above.\r\n                vnodeTag !== KEEP_ALIVE;\r\n            if (shouldBuildAsSlots) {\r\n                const { slots, hasDynamicSlots } = buildSlots(node, context);\r\n                vnodeChildren = slots;\r\n                if (hasDynamicSlots) {\r\n                    patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                }\r\n            }\r\n            else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\r\n                const child = node.children[0];\r\n                const type = child.type;\r\n                // check for dynamic text children\r\n                const hasDynamicTextChild = type === 5 /* INTERPOLATION */ ||\r\n                    type === 8 /* COMPOUND_EXPRESSION */;\r\n                if (hasDynamicTextChild &&\r\n                    getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                    patchFlag |= 1 /* TEXT */;\r\n                }\r\n                // pass directly if the only child is a text node\r\n                // (plain / interpolation / expression)\r\n                if (hasDynamicTextChild || type === 2 /* TEXT */) {\r\n                    vnodeChildren = child;\r\n                }\r\n                else {\r\n                    vnodeChildren = node.children;\r\n                }\r\n            }\r\n            else {\r\n                vnodeChildren = node.children;\r\n            }\r\n        }\r\n        // patchFlag & dynamicPropNames\r\n        if (patchFlag !== 0) {\r\n            {\r\n                if (patchFlag < 0) {\r\n                    // special flags (negative and mutually exclusive)\r\n                    vnodePatchFlag = patchFlag + ` /* ${shared.PatchFlagNames[patchFlag]} */`;\r\n                }\r\n                else {\r\n                    // bitwise flags\r\n                    const flagNames = Object.keys(shared.PatchFlagNames)\r\n                        .map(Number)\r\n                        .filter(n => n > 0 && patchFlag & n)\r\n                        .map(n => shared.PatchFlagNames[n])\r\n                        .join(`, `);\r\n                    vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\r\n                }\r\n            }\r\n            if (dynamicPropNames && dynamicPropNames.length) {\r\n                vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\r\n            }\r\n        }\r\n        node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\r\n    };\r\n};\r\nfunction resolveComponentType(node, context, ssr = false) {\r\n    let { tag } = node;\r\n    // 1. dynamic component\r\n    const isExplicitDynamic = isComponentTag(tag);\r\n    const isProp = findProp(node, 'is');\r\n    if (isProp) {\r\n        if (isExplicitDynamic ||\r\n            (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))) {\r\n            const exp = isProp.type === 6 /* ATTRIBUTE */\r\n                ? isProp.value && createSimpleExpression(isProp.value.content, true)\r\n                : isProp.exp;\r\n            if (exp) {\r\n                return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n                    exp\r\n                ]);\r\n            }\r\n        }\r\n        else if (isProp.type === 6 /* ATTRIBUTE */ &&\r\n            isProp.value.content.startsWith('vue:')) {\r\n            // <button is=\"vue:xxx\">\r\n            // if not <component>, only is value that starts with \"vue:\" will be\r\n            // treated as component by the parse phase and reach here, unless it's\r\n            // compat mode where all is values are considered components\r\n            tag = isProp.value.content.slice(4);\r\n        }\r\n    }\r\n    // 1.5 v-is (TODO: Deprecate)\r\n    const isDir = !isExplicitDynamic && findDir(node, 'is');\r\n    if (isDir && isDir.exp) {\r\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n            isDir.exp\r\n        ]);\r\n    }\r\n    // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\r\n    const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\r\n    if (builtIn) {\r\n        // built-ins are simply fallthroughs / have special handling during ssr\r\n        // so we don't need to import their runtime equivalents\r\n        if (!ssr)\r\n            context.helper(builtIn);\r\n        return builtIn;\r\n    }\r\n    // 3. user component (from setup bindings)\r\n    // this is skipped in browser build since browser builds do not perform\r\n    // binding analysis.\r\n    {\r\n        const fromSetup = resolveSetupReference(tag, context);\r\n        if (fromSetup) {\r\n            return fromSetup;\r\n        }\r\n        const dotIndex = tag.indexOf('.');\r\n        if (dotIndex > 0) {\r\n            const ns = resolveSetupReference(tag.slice(0, dotIndex), context);\r\n            if (ns) {\r\n                return ns + tag.slice(dotIndex);\r\n            }\r\n        }\r\n    }\r\n    // 4. Self referencing component (inferred from filename)\r\n    if (context.selfName &&\r\n        shared.capitalize(shared.camelize(tag)) === context.selfName) {\r\n        context.helper(RESOLVE_COMPONENT);\r\n        // codegen.ts has special check for __self postfix when generating\r\n        // component imports, which will pass additional `maybeSelfReference` flag\r\n        // to `resolveComponent`.\r\n        context.components.add(tag + `__self`);\r\n        return toValidAssetId(tag, `component`);\r\n    }\r\n    // 5. user component (resolve)\r\n    context.helper(RESOLVE_COMPONENT);\r\n    context.components.add(tag);\r\n    return toValidAssetId(tag, `component`);\r\n}\r\nfunction resolveSetupReference(name, context) {\r\n    const bindings = context.bindingMetadata;\r\n    if (!bindings || bindings.__isScriptSetup === false) {\r\n        return;\r\n    }\r\n    const camelName = shared.camelize(name);\r\n    const PascalName = shared.capitalize(camelName);\r\n    const checkType = (type) => {\r\n        if (bindings[name] === type) {\r\n            return name;\r\n        }\r\n        if (bindings[camelName] === type) {\r\n            return camelName;\r\n        }\r\n        if (bindings[PascalName] === type) {\r\n            return PascalName;\r\n        }\r\n    };\r\n    const fromConst = checkType(\"setup-const\" /* SETUP_CONST */);\r\n    if (fromConst) {\r\n        return context.inline\r\n            ? // in inline mode, const setup bindings (e.g. imports) can be used as-is\r\n                fromConst\r\n            : `$setup[${JSON.stringify(fromConst)}]`;\r\n    }\r\n    const fromMaybeRef = checkType(\"setup-let\" /* SETUP_LET */) ||\r\n        checkType(\"setup-ref\" /* SETUP_REF */) ||\r\n        checkType(\"setup-maybe-ref\" /* SETUP_MAYBE_REF */);\r\n    if (fromMaybeRef) {\r\n        return context.inline\r\n            ? // setup scope bindings that may be refs need to be unrefed\r\n                `${context.helperString(UNREF)}(${fromMaybeRef})`\r\n            : `$setup[${JSON.stringify(fromMaybeRef)}]`;\r\n    }\r\n}\r\nfunction buildProps(node, context, props = node.props, ssr = false) {\r\n    const { tag, loc: elementLoc } = node;\r\n    const isComponent = node.tagType === 1 /* COMPONENT */;\r\n    let properties = [];\r\n    const mergeArgs = [];\r\n    const runtimeDirectives = [];\r\n    // patchFlag analysis\r\n    let patchFlag = 0;\r\n    let hasRef = false;\r\n    let hasClassBinding = false;\r\n    let hasStyleBinding = false;\r\n    let hasHydrationEventBinding = false;\r\n    let hasDynamicKeys = false;\r\n    let hasVnodeHook = false;\r\n    const dynamicPropNames = [];\r\n    const analyzePatchFlag = ({ key, value }) => {\r\n        if (isStaticExp(key)) {\r\n            const name = key.content;\r\n            const isEventHandler = shared.isOn(name);\r\n            if (!isComponent &&\r\n                isEventHandler &&\r\n                // omit the flag for click handlers because hydration gives click\r\n                // dedicated fast path.\r\n                name.toLowerCase() !== 'onclick' &&\r\n                // omit v-model handlers\r\n                name !== 'onUpdate:modelValue' &&\r\n                // omit onVnodeXXX hooks\r\n                !shared.isReservedProp(name)) {\r\n                hasHydrationEventBinding = true;\r\n            }\r\n            if (isEventHandler && shared.isReservedProp(name)) {\r\n                hasVnodeHook = true;\r\n            }\r\n            if (value.type === 20 /* JS_CACHE_EXPRESSION */ ||\r\n                ((value.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n                    value.type === 8 /* COMPOUND_EXPRESSION */) &&\r\n                    getConstantType(value, context) > 0)) {\r\n                // skip if the prop is a cached handler or has constant value\r\n                return;\r\n            }\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n            }\r\n            else if (name === 'class') {\r\n                hasClassBinding = true;\r\n            }\r\n            else if (name === 'style') {\r\n                hasStyleBinding = true;\r\n            }\r\n            else if (name !== 'key' && !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n            // treat the dynamic class and style binding of the component as dynamic props\r\n            if (isComponent &&\r\n                (name === 'class' || name === 'style') &&\r\n                !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n        }\r\n        else {\r\n            hasDynamicKeys = true;\r\n        }\r\n    };\r\n    for (let i = 0; i < props.length; i++) {\r\n        // static attribute\r\n        const prop = props[i];\r\n        if (prop.type === 6 /* ATTRIBUTE */) {\r\n            const { loc, name, value } = prop;\r\n            let isStatic = true;\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n                // in inline mode there is no setupState object, so we can't use string\r\n                // keys to set the ref. Instead, we need to transform it to pass the\r\n                // acrtual ref instead.\r\n                if (context.inline) {\r\n                    isStatic = false;\r\n                }\r\n            }\r\n            // skip is on <component>, or is=\"vue:xxx\"\r\n            if (name === 'is' &&\r\n                (isComponentTag(tag) ||\r\n                    (value && value.content.startsWith('vue:')) ||\r\n                    (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context)))) {\r\n                continue;\r\n            }\r\n            properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\r\n        }\r\n        else {\r\n            // directives\r\n            const { name, arg, exp, loc } = prop;\r\n            const isVBind = name === 'bind';\r\n            const isVOn = name === 'on';\r\n            // skip v-slot - it is handled by its dedicated transform.\r\n            if (name === 'slot') {\r\n                if (!isComponent) {\r\n                    context.onError(createCompilerError(39 /* X_V_SLOT_MISPLACED */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            // skip v-once/v-memo - they are handled by dedicated transforms.\r\n            if (name === 'once' || name === 'memo') {\r\n                continue;\r\n            }\r\n            // skip v-is and :is on <component>\r\n            if (name === 'is' ||\r\n                (isVBind &&\r\n                    isBindKey(arg, 'is') &&\r\n                    (isComponentTag(tag) ||\r\n                        (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))))) {\r\n                continue;\r\n            }\r\n            // skip v-on in SSR compilation\r\n            if (isVOn && ssr) {\r\n                continue;\r\n            }\r\n            // special case for v-bind and v-on with no argument\r\n            if (!arg && (isVBind || isVOn)) {\r\n                hasDynamicKeys = true;\r\n                if (exp) {\r\n                    if (properties.length) {\r\n                        mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n                        properties = [];\r\n                    }\r\n                    if (isVBind) {\r\n                        {\r\n                            // 2.x v-bind object order compat\r\n                            {\r\n                                const hasOverridableKeys = mergeArgs.some(arg => {\r\n                                    if (arg.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n                                        return arg.properties.some(({ key }) => {\r\n                                            if (key.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n                                                !key.isStatic) {\r\n                                                return true;\r\n                                            }\r\n                                            return (key.content !== 'class' &&\r\n                                                key.content !== 'style' &&\r\n                                                !shared.isOn(key.content));\r\n                                        });\r\n                                    }\r\n                                    else {\r\n                                        // dynamic expression\r\n                                        return true;\r\n                                    }\r\n                                });\r\n                                if (hasOverridableKeys) {\r\n                                    checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\r\n                                }\r\n                            }\r\n                            if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context)) {\r\n                                mergeArgs.unshift(exp);\r\n                                continue;\r\n                            }\r\n                        }\r\n                        mergeArgs.push(exp);\r\n                    }\r\n                    else {\r\n                        // v-on=\"obj\" -> toHandlers(obj)\r\n                        mergeArgs.push({\r\n                            type: 14 /* JS_CALL_EXPRESSION */,\r\n                            loc,\r\n                            callee: context.helper(TO_HANDLERS),\r\n                            arguments: [exp]\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    context.onError(createCompilerError(isVBind\r\n                        ? 33 /* X_V_BIND_NO_EXPRESSION */\r\n                        : 34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            const directiveTransform = context.directiveTransforms[name];\r\n            if (directiveTransform) {\r\n                // has built-in directive transform.\r\n                const { props, needRuntime } = directiveTransform(prop, node, context);\r\n                !ssr && props.forEach(analyzePatchFlag);\r\n                properties.push(...props);\r\n                if (needRuntime) {\r\n                    runtimeDirectives.push(prop);\r\n                    if (shared.isSymbol(needRuntime)) {\r\n                        directiveImportMap.set(prop, needRuntime);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                // no built-in transform, this is a user custom directive.\r\n                runtimeDirectives.push(prop);\r\n            }\r\n        }\r\n        if (prop.type === 6 /* ATTRIBUTE */ &&\r\n            prop.name === 'ref' &&\r\n            context.scopes.vFor > 0 &&\r\n            checkCompatEnabled(\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */, context, prop.loc)) {\r\n            properties.push(createObjectProperty(createSimpleExpression('refInFor', true), createSimpleExpression('true', false)));\r\n        }\r\n    }\r\n    let propsExpression = undefined;\r\n    // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\r\n    if (mergeArgs.length) {\r\n        if (properties.length) {\r\n            mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n        }\r\n        if (mergeArgs.length > 1) {\r\n            propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\r\n        }\r\n        else {\r\n            // single v-bind with nothing else - no need for a mergeProps call\r\n            propsExpression = mergeArgs[0];\r\n        }\r\n    }\r\n    else if (properties.length) {\r\n        propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\r\n    }\r\n    // patchFlag analysis\r\n    if (hasDynamicKeys) {\r\n        patchFlag |= 16 /* FULL_PROPS */;\r\n    }\r\n    else {\r\n        if (hasClassBinding && !isComponent) {\r\n            patchFlag |= 2 /* CLASS */;\r\n        }\r\n        if (hasStyleBinding && !isComponent) {\r\n            patchFlag |= 4 /* STYLE */;\r\n        }\r\n        if (dynamicPropNames.length) {\r\n            patchFlag |= 8 /* PROPS */;\r\n        }\r\n        if (hasHydrationEventBinding) {\r\n            patchFlag |= 32 /* HYDRATE_EVENTS */;\r\n        }\r\n    }\r\n    if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */) &&\r\n        (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\r\n        patchFlag |= 512 /* NEED_PATCH */;\r\n    }\r\n    // pre-normalize props, SSR is skipped for now\r\n    if (!context.inSSR && propsExpression) {\r\n        switch (propsExpression.type) {\r\n            case 15 /* JS_OBJECT_EXPRESSION */:\r\n                // means that there is no v-bind,\r\n                // but still need to deal with dynamic key binding\r\n                let classKeyIndex = -1;\r\n                let styleKeyIndex = -1;\r\n                let hasDynamicKey = false;\r\n                for (let i = 0; i < propsExpression.properties.length; i++) {\r\n                    const key = propsExpression.properties[i].key;\r\n                    if (isStaticExp(key)) {\r\n                        if (key.content === 'class') {\r\n                            classKeyIndex = i;\r\n                        }\r\n                        else if (key.content === 'style') {\r\n                            styleKeyIndex = i;\r\n                        }\r\n                    }\r\n                    else if (!key.isHandlerKey) {\r\n                        hasDynamicKey = true;\r\n                    }\r\n                }\r\n                const classProp = propsExpression.properties[classKeyIndex];\r\n                const styleProp = propsExpression.properties[styleKeyIndex];\r\n                // no dynamic key\r\n                if (!hasDynamicKey) {\r\n                    if (classProp && !isStaticExp(classProp.value)) {\r\n                        classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\r\n                    }\r\n                    if (styleProp &&\r\n                        !isStaticExp(styleProp.value) &&\r\n                        // the static style is compiled into an object,\r\n                        // so use `hasStyleBinding` to ensure that it is a dynamic style binding\r\n                        hasStyleBinding) {\r\n                        styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\r\n                    }\r\n                }\r\n                else {\r\n                    // dynamic key binding, wrap with `normalizeProps`\r\n                    propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\r\n                }\r\n                break;\r\n            case 14 /* JS_CALL_EXPRESSION */:\r\n                // mergeProps call, do nothing\r\n                break;\r\n            default:\r\n                // single v-bind\r\n                propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\r\n                    createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\r\n                        propsExpression\r\n                    ])\r\n                ]);\r\n                break;\r\n        }\r\n    }\r\n    return {\r\n        props: propsExpression,\r\n        directives: runtimeDirectives,\r\n        patchFlag,\r\n        dynamicPropNames\r\n    };\r\n}\r\n// Dedupe props in an object literal.\r\n// Literal duplicated attributes would have been warned during the parse phase,\r\n// however, it's possible to encounter duplicated `onXXX` handlers with different\r\n// modifiers. We also need to merge static and dynamic class / style attributes.\r\n// - onXXX handlers / style: merge into array\r\n// - class: merge into single expression with concatenation\r\nfunction dedupeProperties(properties) {\r\n    const knownProps = new Map();\r\n    const deduped = [];\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const prop = properties[i];\r\n        // dynamic keys are always allowed\r\n        if (prop.key.type === 8 /* COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\r\n            deduped.push(prop);\r\n            continue;\r\n        }\r\n        const name = prop.key.content;\r\n        const existing = knownProps.get(name);\r\n        if (existing) {\r\n            if (name === 'style' || name === 'class' || name.startsWith('on')) {\r\n                mergeAsArray(existing, prop);\r\n            }\r\n            // unexpected duplicate, should have emitted error during parse\r\n        }\r\n        else {\r\n            knownProps.set(name, prop);\r\n            deduped.push(prop);\r\n        }\r\n    }\r\n    return deduped;\r\n}\r\nfunction mergeAsArray(existing, incoming) {\r\n    if (existing.value.type === 17 /* JS_ARRAY_EXPRESSION */) {\r\n        existing.value.elements.push(incoming.value);\r\n    }\r\n    else {\r\n        existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\r\n    }\r\n}\r\nfunction buildDirectiveArgs(dir, context) {\r\n    const dirArgs = [];\r\n    const runtime = directiveImportMap.get(dir);\r\n    if (runtime) {\r\n        // built-in directive with runtime\r\n        dirArgs.push(context.helperString(runtime));\r\n    }\r\n    else {\r\n        // user directive.\r\n        // see if we have directives exposed via <script setup>\r\n        const fromSetup = resolveSetupReference('v-' + dir.name, context);\r\n        if (fromSetup) {\r\n            dirArgs.push(fromSetup);\r\n        }\r\n        else {\r\n            // inject statement for resolving directive\r\n            context.helper(RESOLVE_DIRECTIVE);\r\n            context.directives.add(dir.name);\r\n            dirArgs.push(toValidAssetId(dir.name, `directive`));\r\n        }\r\n    }\r\n    const { loc } = dir;\r\n    if (dir.exp)\r\n        dirArgs.push(dir.exp);\r\n    if (dir.arg) {\r\n        if (!dir.exp) {\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        dirArgs.push(dir.arg);\r\n    }\r\n    if (Object.keys(dir.modifiers).length) {\r\n        if (!dir.arg) {\r\n            if (!dir.exp) {\r\n                dirArgs.push(`void 0`);\r\n            }\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        const trueExpression = createSimpleExpression(`true`, false, loc);\r\n        dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\r\n    }\r\n    return createArrayExpression(dirArgs, dir.loc);\r\n}\r\nfunction stringifyDynamicPropNames(props) {\r\n    let propsNamesString = `[`;\r\n    for (let i = 0, l = props.length; i < l; i++) {\r\n        propsNamesString += JSON.stringify(props[i]);\r\n        if (i < l - 1)\r\n            propsNamesString += ', ';\r\n    }\r\n    return propsNamesString + `]`;\r\n}\r\nfunction isComponentTag(tag) {\r\n    return tag[0].toLowerCase() + tag.slice(1) === 'component';\r\n}\n\nObject.freeze({})\r\n    ;\r\nObject.freeze([]) ;\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\n\nconst transformSlotOutlet = (node, context) => {\r\n    if (isSlotOutlet(node)) {\r\n        const { children, loc } = node;\r\n        const { slotName, slotProps } = processSlotOutlet(node, context);\r\n        const slotArgs = [\r\n            context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\r\n            slotName\r\n        ];\r\n        if (slotProps) {\r\n            slotArgs.push(slotProps);\r\n        }\r\n        if (children.length) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            slotArgs.push(createFunctionExpression([], children, false, false, loc));\r\n        }\r\n        if (context.scopeId && !context.slotted) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            if (!children.length) {\r\n                slotArgs.push(`undefined`);\r\n            }\r\n            slotArgs.push(`true`);\r\n        }\r\n        node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\r\n    }\r\n};\r\nfunction processSlotOutlet(node, context) {\r\n    let slotName = `\"default\"`;\r\n    let slotProps = undefined;\r\n    const nonNameProps = [];\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.value) {\r\n                if (p.name === 'name') {\r\n                    slotName = JSON.stringify(p.value.content);\r\n                }\r\n                else {\r\n                    p.name = camelize(p.name);\r\n                    nonNameProps.push(p);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            if (p.name === 'bind' && isBindKey(p.arg, 'name')) {\r\n                if (p.exp)\r\n                    slotName = p.exp;\r\n            }\r\n            else {\r\n                if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\r\n                    p.arg.content = camelize(p.arg.content);\r\n                }\r\n                nonNameProps.push(p);\r\n            }\r\n        }\r\n    }\r\n    if (nonNameProps.length > 0) {\r\n        const { props, directives } = buildProps(node, context, nonNameProps);\r\n        slotProps = props;\r\n        if (directives.length) {\r\n            context.onError(createCompilerError(35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\r\n        }\r\n    }\r\n    return {\r\n        slotName,\r\n        slotProps\r\n    };\r\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^\\s*function(?:\\s+[\\w$]+)?\\s*\\(/;\r\nconst transformOn = (dir, node, context, augmentor) => {\r\n    const { loc, modifiers, arg } = dir;\r\n    if (!dir.exp && !modifiers.length) {\r\n        context.onError(createCompilerError(34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n    }\r\n    let eventName;\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            const rawName = arg.content;\r\n            // for all event listeners, auto convert it to camelCase. See issue #2249\r\n            eventName = createSimpleExpression(shared.toHandlerKey(shared.camelize(rawName)), true, arg.loc);\r\n        }\r\n        else {\r\n            // #2388\r\n            eventName = createCompoundExpression([\r\n                `${context.helperString(TO_HANDLER_KEY)}(`,\r\n                arg,\r\n                `)`\r\n            ]);\r\n        }\r\n    }\r\n    else {\r\n        // already a compound expression.\r\n        eventName = arg;\r\n        eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\r\n        eventName.children.push(`)`);\r\n    }\r\n    // handler processing\r\n    let exp = dir.exp;\r\n    if (exp && !exp.content.trim()) {\r\n        exp = undefined;\r\n    }\r\n    let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\r\n    if (exp) {\r\n        const isMemberExp = isMemberExpression(exp.content);\r\n        const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\r\n        const hasMultipleStatements = exp.content.includes(`;`);\r\n        // process the expression since it's been skipped\r\n        if (context.prefixIdentifiers) {\r\n            isInlineStatement && context.addIdentifiers(`$event`);\r\n            exp = dir.exp = processExpression(exp, context, false, hasMultipleStatements);\r\n            isInlineStatement && context.removeIdentifiers(`$event`);\r\n            // with scope analysis, the function is hoistable if it has no reference\r\n            // to scope variables.\r\n            shouldCache =\r\n                context.cacheHandlers &&\r\n                    // unnecessary to cache inside v-once\r\n                    !context.inVOnce &&\r\n                    // runtime constants don't need to be cached\r\n                    // (this is analyzed by compileScript in SFC <script setup>)\r\n                    !(exp.type === 4 /* SIMPLE_EXPRESSION */ && exp.constType > 0) &&\r\n                    // #1541 bail if this is a member exp handler passed to a component -\r\n                    // we need to use the original function to preserve arity,\r\n                    // e.g. <transition> relies on checking cb.length to determine\r\n                    // transition end handling. Inline function is ok since its arity\r\n                    // is preserved even when cached.\r\n                    !(isMemberExp && node.tagType === 1 /* COMPONENT */) &&\r\n                    // bail if the function references closure variables (v-for, v-slot)\r\n                    // it must be passed fresh to avoid stale values.\r\n                    !hasScopeRef(exp, context.identifiers);\r\n            // If the expression is optimizable and is a member expression pointing\r\n            // to a function, turn it into invocation (and wrap in an arrow function\r\n            // below) so that it always accesses the latest value when called - thus\r\n            // avoiding the need to be patched.\r\n            if (shouldCache && isMemberExp) {\r\n                if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                    exp.content = `${exp.content} && ${exp.content}(...args)`;\r\n                }\r\n                else {\r\n                    exp.children = [...exp.children, ` && `, ...exp.children, `(...args)`];\r\n                }\r\n            }\r\n        }\r\n        if (isInlineStatement || (shouldCache && isMemberExp)) {\r\n            // wrap inline statement in a function expression\r\n            exp = createCompoundExpression([\r\n                `${isInlineStatement\r\n                    ? context.isTS\r\n                        ? `($event: any)`\r\n                        : `$event`\r\n                    : `${context.isTS ? `\\n//@ts-ignore\\n` : ``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\r\n                exp,\r\n                hasMultipleStatements ? `}` : `)`\r\n            ]);\r\n        }\r\n    }\r\n    let ret = {\r\n        props: [\r\n            createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\r\n        ]\r\n    };\r\n    // apply extended compiler augmentor\r\n    if (augmentor) {\r\n        ret = augmentor(ret);\r\n    }\r\n    if (shouldCache) {\r\n        // cache handlers so that it's always the same handler being passed down.\r\n        // this avoids unnecessary re-renders when users use inline handlers on\r\n        // components.\r\n        ret.props[0].value = context.cache(ret.props[0].value);\r\n    }\r\n    // mark the key as handler for props normalization check\r\n    ret.props.forEach(p => (p.key.isHandlerKey = true));\r\n    return ret;\r\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\r\n// codegen for the entire props object. This transform here is only for v-bind\r\n// *with* args.\r\nconst transformBind = (dir, _node, context) => {\r\n    const { exp, modifiers, loc } = dir;\r\n    const arg = dir.arg;\r\n    if (arg.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n        arg.children.unshift(`(`);\r\n        arg.children.push(`) || \"\"`);\r\n    }\r\n    else if (!arg.isStatic) {\r\n        arg.content = `${arg.content} || \"\"`;\r\n    }\r\n    // .sync is replaced by v-model:arg\r\n    if (modifiers.includes('camel')) {\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            if (arg.isStatic) {\r\n                arg.content = shared.camelize(arg.content);\r\n            }\r\n            else {\r\n                arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\r\n            }\r\n        }\r\n        else {\r\n            arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\r\n            arg.children.push(`)`);\r\n        }\r\n    }\r\n    if (!context.inSSR) {\r\n        if (modifiers.includes('prop')) {\r\n            injectPrefix(arg, '.');\r\n        }\r\n        if (modifiers.includes('attr')) {\r\n            injectPrefix(arg, '^');\r\n        }\r\n    }\r\n    if (!exp ||\r\n        (exp.type === 4 /* SIMPLE_EXPRESSION */ && !exp.content.trim())) {\r\n        context.onError(createCompilerError(33 /* X_V_BIND_NO_EXPRESSION */, loc));\r\n        return {\r\n            props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\r\n        };\r\n    }\r\n    return {\r\n        props: [createObjectProperty(arg, exp)]\r\n    };\r\n};\r\nconst injectPrefix = (arg, prefix) => {\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            arg.content = prefix + arg.content;\r\n        }\r\n        else {\r\n            arg.content = `\\`${prefix}\\${${arg.content}}\\``;\r\n        }\r\n    }\r\n    else {\r\n        arg.children.unshift(`'${prefix}' + (`);\r\n        arg.children.push(`)`);\r\n    }\r\n};\n\n// Merge adjacent text nodes and expressions into a single expression\r\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\r\nconst transformText = (node, context) => {\r\n    if (node.type === 0 /* ROOT */ ||\r\n        node.type === 1 /* ELEMENT */ ||\r\n        node.type === 11 /* FOR */ ||\r\n        node.type === 10 /* IF_BRANCH */) {\r\n        // perform the transform on node exit so that all expressions have already\r\n        // been processed.\r\n        return () => {\r\n            const children = node.children;\r\n            let currentContainer = undefined;\r\n            let hasText = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child)) {\r\n                    hasText = true;\r\n                    for (let j = i + 1; j < children.length; j++) {\r\n                        const next = children[j];\r\n                        if (isText(next)) {\r\n                            if (!currentContainer) {\r\n                                currentContainer = children[i] = {\r\n                                    type: 8 /* COMPOUND_EXPRESSION */,\r\n                                    loc: child.loc,\r\n                                    children: [child]\r\n                                };\r\n                            }\r\n                            // merge adjacent text node into current\r\n                            currentContainer.children.push(` + `, next);\r\n                            children.splice(j, 1);\r\n                            j--;\r\n                        }\r\n                        else {\r\n                            currentContainer = undefined;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (!hasText ||\r\n                // if this is a plain element with a single text child, leave it\r\n                // as-is since the runtime has dedicated fast path for this by directly\r\n                // setting textContent of the element.\r\n                // for component root it's always normalized anyway.\r\n                (children.length === 1 &&\r\n                    (node.type === 0 /* ROOT */ ||\r\n                        (node.type === 1 /* ELEMENT */ &&\r\n                            node.tagType === 0 /* ELEMENT */ &&\r\n                            // #3756\r\n                            // custom directives can potentially add DOM elements arbitrarily,\r\n                            // we need to avoid setting textContent of the element at runtime\r\n                            // to avoid accidentally overwriting the DOM elements added\r\n                            // by the user through custom directives.\r\n                            !node.props.find(p => p.type === 7 /* DIRECTIVE */ &&\r\n                                !context.directiveTransforms[p.name]) &&\r\n                            // in compat mode, <template> tags with no special directives\r\n                            // will be rendered as a fragment so its children must be\r\n                            // converted into vnodes.\r\n                            !(node.tag === 'template'))))) {\r\n                return;\r\n            }\r\n            // pre-convert text nodes into createTextVNode(text) calls to avoid\r\n            // runtime normalization.\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child) || child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                    const callArgs = [];\r\n                    // createTextVNode defaults to single whitespace, so if it is a\r\n                    // single space the code could be an empty call to save bytes.\r\n                    if (child.type !== 2 /* TEXT */ || child.content !== ' ') {\r\n                        callArgs.push(child);\r\n                    }\r\n                    // mark dynamic text with flag so it gets patched inside a block\r\n                    if (!context.ssr &&\r\n                        getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                        callArgs.push(1 /* TEXT */ +\r\n                            (` /* ${shared.PatchFlagNames[1 /* TEXT */]} */` ));\r\n                    }\r\n                    children[i] = {\r\n                        type: 12 /* TEXT_CALL */,\r\n                        content: child,\r\n                        loc: child.loc,\r\n                        codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\r\n                    };\r\n                }\r\n            }\r\n        };\r\n    }\r\n};\n\nconst seen = new WeakSet();\r\nconst transformOnce = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ && findDir(node, 'once', true)) {\r\n        if (seen.has(node) || context.inVOnce) {\r\n            return;\r\n        }\r\n        seen.add(node);\r\n        context.inVOnce = true;\r\n        context.helper(SET_BLOCK_TRACKING);\r\n        return () => {\r\n            context.inVOnce = false;\r\n            const cur = context.currentNode;\r\n            if (cur.codegenNode) {\r\n                cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\r\n            }\r\n        };\r\n    }\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n    const { exp, arg } = dir;\r\n    if (!exp) {\r\n        context.onError(createCompilerError(40 /* X_V_MODEL_NO_EXPRESSION */, dir.loc));\r\n        return createTransformProps();\r\n    }\r\n    const rawExp = exp.loc.source;\r\n    const expString = exp.type === 4 /* SIMPLE_EXPRESSION */ ? exp.content : rawExp;\r\n    // im SFC <script setup> inline mode, the exp may have been transformed into\r\n    // _unref(exp)\r\n    const bindingType = context.bindingMetadata[rawExp];\r\n    const maybeRef = context.inline &&\r\n        bindingType &&\r\n        bindingType !== \"setup-const\" /* SETUP_CONST */;\r\n    if (!expString.trim() || (!isMemberExpression(expString) && !maybeRef)) {\r\n        context.onError(createCompilerError(41 /* X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\r\n        return createTransformProps();\r\n    }\r\n    if (context.prefixIdentifiers &&\r\n        isSimpleIdentifier(expString) &&\r\n        context.identifiers[expString]) {\r\n        context.onError(createCompilerError(42 /* X_V_MODEL_ON_SCOPE_VARIABLE */, exp.loc));\r\n        return createTransformProps();\r\n    }\r\n    const propName = arg ? arg : createSimpleExpression('modelValue', true);\r\n    const eventName = arg\r\n        ? isStaticExp(arg)\r\n            ? `onUpdate:${arg.content}`\r\n            : createCompoundExpression(['\"onUpdate:\" + ', arg])\r\n        : `onUpdate:modelValue`;\r\n    let assignmentExp;\r\n    const eventArg = context.isTS ? `($event: any)` : `$event`;\r\n    if (maybeRef) {\r\n        if (bindingType === \"setup-ref\" /* SETUP_REF */) {\r\n            // v-model used on known ref.\r\n            assignmentExp = createCompoundExpression([\r\n                `${eventArg} => (`,\r\n                createSimpleExpression(rawExp, false, exp.loc),\r\n                `.value = $event)`\r\n            ]);\r\n        }\r\n        else {\r\n            // v-model used on a potentially ref binding in <script setup> inline mode.\r\n            // the assignment needs to check whether the binding is actually a ref.\r\n            const altAssignment = bindingType === \"setup-let\" /* SETUP_LET */ ? `${rawExp} = $event` : `null`;\r\n            assignmentExp = createCompoundExpression([\r\n                `${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? `,\r\n                createSimpleExpression(rawExp, false, exp.loc),\r\n                `.value = $event : ${altAssignment})`\r\n            ]);\r\n        }\r\n    }\r\n    else {\r\n        assignmentExp = createCompoundExpression([\r\n            `${eventArg} => (`,\r\n            exp,\r\n            ` = $event)`\r\n        ]);\r\n    }\r\n    const props = [\r\n        // modelValue: foo\r\n        createObjectProperty(propName, dir.exp),\r\n        // \"onUpdate:modelValue\": $event => (foo = $event)\r\n        createObjectProperty(eventName, assignmentExp)\r\n    ];\r\n    // cache v-model handler if applicable (when it doesn't refer any scope vars)\r\n    if (context.prefixIdentifiers &&\r\n        !context.inVOnce &&\r\n        context.cacheHandlers &&\r\n        !hasScopeRef(exp, context.identifiers)) {\r\n        props[1].value = context.cache(props[1].value);\r\n    }\r\n    // modelModifiers: { foo: true, \"bar-baz\": true }\r\n    if (dir.modifiers.length && node.tagType === 1 /* COMPONENT */) {\r\n        const modifiers = dir.modifiers\r\n            .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\r\n            .join(`, `);\r\n        const modifiersKey = arg\r\n            ? isStaticExp(arg)\r\n                ? `${arg.content}Modifiers`\r\n                : createCompoundExpression([arg, ' + \"Modifiers\"'])\r\n            : `modelModifiers`;\r\n        props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* CAN_HOIST */)));\r\n    }\r\n    return createTransformProps(props);\r\n};\r\nfunction createTransformProps(props = []) {\r\n    return { props };\r\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\r\nconst transformFilter = (node, context) => {\r\n    if (!isCompatEnabled(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context)) {\r\n        return;\r\n    }\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        // filter rewrite is applied before expression transform so only\r\n        // simple expressions are possible at this stage\r\n        rewriteFilter(node.content, context);\r\n    }\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        node.props.forEach((prop) => {\r\n            if (prop.type === 7 /* DIRECTIVE */ &&\r\n                prop.name !== 'for' &&\r\n                prop.exp) {\r\n                rewriteFilter(prop.exp, context);\r\n            }\r\n        });\r\n    }\r\n};\r\nfunction rewriteFilter(node, context) {\r\n    if (node.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        parseFilter(node, context);\r\n    }\r\n    else {\r\n        for (let i = 0; i < node.children.length; i++) {\r\n            const child = node.children[i];\r\n            if (typeof child !== 'object')\r\n                continue;\r\n            if (child.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                parseFilter(child, context);\r\n            }\r\n            else if (child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                rewriteFilter(node, context);\r\n            }\r\n            else if (child.type === 5 /* INTERPOLATION */) {\r\n                rewriteFilter(child.content, context);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseFilter(node, context) {\r\n    const exp = node.content;\r\n    let inSingle = false;\r\n    let inDouble = false;\r\n    let inTemplateString = false;\r\n    let inRegex = false;\r\n    let curly = 0;\r\n    let square = 0;\r\n    let paren = 0;\r\n    let lastFilterIndex = 0;\r\n    let c, prev, i, expression, filters = [];\r\n    for (i = 0; i < exp.length; i++) {\r\n        prev = c;\r\n        c = exp.charCodeAt(i);\r\n        if (inSingle) {\r\n            if (c === 0x27 && prev !== 0x5c)\r\n                inSingle = false;\r\n        }\r\n        else if (inDouble) {\r\n            if (c === 0x22 && prev !== 0x5c)\r\n                inDouble = false;\r\n        }\r\n        else if (inTemplateString) {\r\n            if (c === 0x60 && prev !== 0x5c)\r\n                inTemplateString = false;\r\n        }\r\n        else if (inRegex) {\r\n            if (c === 0x2f && prev !== 0x5c)\r\n                inRegex = false;\r\n        }\r\n        else if (c === 0x7c && // pipe\r\n            exp.charCodeAt(i + 1) !== 0x7c &&\r\n            exp.charCodeAt(i - 1) !== 0x7c &&\r\n            !curly &&\r\n            !square &&\r\n            !paren) {\r\n            if (expression === undefined) {\r\n                // first filter, end of expression\r\n                lastFilterIndex = i + 1;\r\n                expression = exp.slice(0, i).trim();\r\n            }\r\n            else {\r\n                pushFilter();\r\n            }\r\n        }\r\n        else {\r\n            switch (c) {\r\n                case 0x22:\r\n                    inDouble = true;\r\n                    break; // \"\r\n                case 0x27:\r\n                    inSingle = true;\r\n                    break; // '\r\n                case 0x60:\r\n                    inTemplateString = true;\r\n                    break; // `\r\n                case 0x28:\r\n                    paren++;\r\n                    break; // (\r\n                case 0x29:\r\n                    paren--;\r\n                    break; // )\r\n                case 0x5b:\r\n                    square++;\r\n                    break; // [\r\n                case 0x5d:\r\n                    square--;\r\n                    break; // ]\r\n                case 0x7b:\r\n                    curly++;\r\n                    break; // {\r\n                case 0x7d:\r\n                    curly--;\r\n                    break; // }\r\n            }\r\n            if (c === 0x2f) {\r\n                // /\r\n                let j = i - 1;\r\n                let p;\r\n                // find first non-whitespace prev char\r\n                for (; j >= 0; j--) {\r\n                    p = exp.charAt(j);\r\n                    if (p !== ' ')\r\n                        break;\r\n                }\r\n                if (!p || !validDivisionCharRE.test(p)) {\r\n                    inRegex = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (expression === undefined) {\r\n        expression = exp.slice(0, i).trim();\r\n    }\r\n    else if (lastFilterIndex !== 0) {\r\n        pushFilter();\r\n    }\r\n    function pushFilter() {\r\n        filters.push(exp.slice(lastFilterIndex, i).trim());\r\n        lastFilterIndex = i + 1;\r\n    }\r\n    if (filters.length) {\r\n        warnDeprecation(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context, node.loc);\r\n        for (i = 0; i < filters.length; i++) {\r\n            expression = wrapFilter(expression, filters[i], context);\r\n        }\r\n        node.content = expression;\r\n    }\r\n}\r\nfunction wrapFilter(exp, filter, context) {\r\n    context.helper(RESOLVE_FILTER);\r\n    const i = filter.indexOf('(');\r\n    if (i < 0) {\r\n        context.filters.add(filter);\r\n        return `${toValidAssetId(filter, 'filter')}(${exp})`;\r\n    }\r\n    else {\r\n        const name = filter.slice(0, i);\r\n        const args = filter.slice(i + 1);\r\n        context.filters.add(name);\r\n        return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\r\n    }\r\n}\n\nconst seen$1 = new WeakSet();\r\nconst transformMemo = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        const dir = findDir(node, 'memo');\r\n        if (!dir || seen$1.has(node)) {\r\n            return;\r\n        }\r\n        seen$1.add(node);\r\n        return () => {\r\n            const codegenNode = node.codegenNode ||\r\n                context.currentNode.codegenNode;\r\n            if (codegenNode && codegenNode.type === 13 /* VNODE_CALL */) {\r\n                // non-component sub tree should be turned into a block\r\n                if (node.tagType !== 1 /* COMPONENT */) {\r\n                    makeBlock(codegenNode, context);\r\n                }\r\n                node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\r\n                    dir.exp,\r\n                    createFunctionExpression(undefined, codegenNode),\r\n                    `_cache`,\r\n                    String(context.cached++)\r\n                ]);\r\n            }\r\n        };\r\n    }\r\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\r\n    return [\r\n        [\r\n            transformOnce,\r\n            transformIf,\r\n            transformMemo,\r\n            transformFor,\r\n            ...([transformFilter] ),\r\n            ...(prefixIdentifiers\r\n                ? [\r\n                    // order is important\r\n                    trackVForSlotScopes,\r\n                    transformExpression\r\n                ]\r\n                : []),\r\n            transformSlotOutlet,\r\n            transformElement,\r\n            trackSlotScopes,\r\n            transformText\r\n        ],\r\n        {\r\n            on: transformOn,\r\n            bind: transformBind,\r\n            model: transformModel\r\n        }\r\n    ];\r\n}\r\n// we name it `baseCompile` so that higher order compilers like\r\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\r\nfunction baseCompile(template, options = {}) {\r\n    const onError = options.onError || defaultOnError;\r\n    const isModuleMode = options.mode === 'module';\r\n    const prefixIdentifiers = (options.prefixIdentifiers === true || isModuleMode);\r\n    if (!prefixIdentifiers && options.cacheHandlers) {\r\n        onError(createCompilerError(47 /* X_CACHE_HANDLER_NOT_SUPPORTED */));\r\n    }\r\n    if (options.scopeId && !isModuleMode) {\r\n        onError(createCompilerError(48 /* X_SCOPE_ID_NOT_SUPPORTED */));\r\n    }\r\n    const ast = shared.isString(template) ? baseParse(template, options) : template;\r\n    const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers);\r\n    transform(ast, shared.extend({}, options, {\r\n        prefixIdentifiers,\r\n        nodeTransforms: [\r\n            ...nodeTransforms,\r\n            ...(options.nodeTransforms || []) // user transforms\r\n        ],\r\n        directiveTransforms: shared.extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\r\n        )\r\n    }));\r\n    return generate(ast, shared.extend({}, options, {\r\n        prefixIdentifiers\r\n    }));\r\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexports.generateCodeFrame = shared.generateCodeFrame;\nexports.BASE_TRANSITION = BASE_TRANSITION;\nexports.CAMELIZE = CAMELIZE;\nexports.CAPITALIZE = CAPITALIZE;\nexports.CREATE_BLOCK = CREATE_BLOCK;\nexports.CREATE_COMMENT = CREATE_COMMENT;\nexports.CREATE_ELEMENT_BLOCK = CREATE_ELEMENT_BLOCK;\nexports.CREATE_ELEMENT_VNODE = CREATE_ELEMENT_VNODE;\nexports.CREATE_SLOTS = CREATE_SLOTS;\nexports.CREATE_STATIC = CREATE_STATIC;\nexports.CREATE_TEXT = CREATE_TEXT;\nexports.CREATE_VNODE = CREATE_VNODE;\nexports.FRAGMENT = FRAGMENT;\nexports.GUARD_REACTIVE_PROPS = GUARD_REACTIVE_PROPS;\nexports.IS_MEMO_SAME = IS_MEMO_SAME;\nexports.IS_REF = IS_REF;\nexports.KEEP_ALIVE = KEEP_ALIVE;\nexports.MERGE_PROPS = MERGE_PROPS;\nexports.NORMALIZE_CLASS = NORMALIZE_CLASS;\nexports.NORMALIZE_PROPS = NORMALIZE_PROPS;\nexports.NORMALIZE_STYLE = NORMALIZE_STYLE;\nexports.OPEN_BLOCK = OPEN_BLOCK;\nexports.POP_SCOPE_ID = POP_SCOPE_ID;\nexports.PUSH_SCOPE_ID = PUSH_SCOPE_ID;\nexports.RENDER_LIST = RENDER_LIST;\nexports.RENDER_SLOT = RENDER_SLOT;\nexports.RESOLVE_COMPONENT = RESOLVE_COMPONENT;\nexports.RESOLVE_DIRECTIVE = RESOLVE_DIRECTIVE;\nexports.RESOLVE_DYNAMIC_COMPONENT = RESOLVE_DYNAMIC_COMPONENT;\nexports.RESOLVE_FILTER = RESOLVE_FILTER;\nexports.SET_BLOCK_TRACKING = SET_BLOCK_TRACKING;\nexports.SUSPENSE = SUSPENSE;\nexports.TELEPORT = TELEPORT;\nexports.TO_DISPLAY_STRING = TO_DISPLAY_STRING;\nexports.TO_HANDLERS = TO_HANDLERS;\nexports.TO_HANDLER_KEY = TO_HANDLER_KEY;\nexports.UNREF = UNREF;\nexports.WITH_CTX = WITH_CTX;\nexports.WITH_DIRECTIVES = WITH_DIRECTIVES;\nexports.WITH_MEMO = WITH_MEMO;\nexports.WITH_SCOPE_ID = WITH_SCOPE_ID;\nexports.advancePositionWithClone = advancePositionWithClone;\nexports.advancePositionWithMutation = advancePositionWithMutation;\nexports.assert = assert;\nexports.baseCompile = baseCompile;\nexports.baseParse = baseParse;\nexports.buildProps = buildProps;\nexports.buildSlots = buildSlots;\nexports.checkCompatEnabled = checkCompatEnabled;\nexports.createArrayExpression = createArrayExpression;\nexports.createAssignmentExpression = createAssignmentExpression;\nexports.createBlockStatement = createBlockStatement;\nexports.createCacheExpression = createCacheExpression;\nexports.createCallExpression = createCallExpression;\nexports.createCompilerError = createCompilerError;\nexports.createCompoundExpression = createCompoundExpression;\nexports.createConditionalExpression = createConditionalExpression;\nexports.createForLoopParams = createForLoopParams;\nexports.createFunctionExpression = createFunctionExpression;\nexports.createIfStatement = createIfStatement;\nexports.createInterpolation = createInterpolation;\nexports.createObjectExpression = createObjectExpression;\nexports.createObjectProperty = createObjectProperty;\nexports.createReturnStatement = createReturnStatement;\nexports.createRoot = createRoot;\nexports.createSequenceExpression = createSequenceExpression;\nexports.createSimpleExpression = createSimpleExpression;\nexports.createStructuralDirectiveTransform = createStructuralDirectiveTransform;\nexports.createTemplateLiteral = createTemplateLiteral;\nexports.createTransformContext = createTransformContext;\nexports.createVNodeCall = createVNodeCall;\nexports.findDir = findDir;\nexports.findProp = findProp;\nexports.generate = generate;\nexports.getBaseTransformPreset = getBaseTransformPreset;\nexports.getInnerRange = getInnerRange;\nexports.getMemoedVNodeCall = getMemoedVNodeCall;\nexports.getVNodeBlockHelper = getVNodeBlockHelper;\nexports.getVNodeHelper = getVNodeHelper;\nexports.hasDynamicKeyVBind = hasDynamicKeyVBind;\nexports.hasScopeRef = hasScopeRef;\nexports.helperNameMap = helperNameMap;\nexports.injectProp = injectProp;\nexports.isBindKey = isBindKey;\nexports.isBuiltInType = isBuiltInType;\nexports.isCoreComponent = isCoreComponent;\nexports.isMemberExpression = isMemberExpression;\nexports.isSimpleIdentifier = isSimpleIdentifier;\nexports.isSlotOutlet = isSlotOutlet;\nexports.isStaticExp = isStaticExp;\nexports.isTemplateNode = isTemplateNode;\nexports.isText = isText;\nexports.isVSlot = isVSlot;\nexports.locStub = locStub;\nexports.makeBlock = makeBlock;\nexports.noopDirectiveTransform = noopDirectiveTransform;\nexports.processExpression = processExpression;\nexports.processFor = processFor;\nexports.processIf = processIf;\nexports.processSlotOutlet = processSlotOutlet;\nexports.registerRuntimeHelpers = registerRuntimeHelpers;\nexports.resolveComponentType = resolveComponentType;\nexports.toValidAssetId = toValidAssetId;\nexports.trackSlotScopes = trackSlotScopes;\nexports.trackVForSlotScopes = trackVForSlotScopes;\nexports.transform = transform;\nexports.transformBind = transformBind;\nexports.transformElement = transformElement;\nexports.transformExpression = transformExpression;\nexports.transformModel = transformModel;\nexports.transformOn = transformOn;\nexports.traverseNode = traverseNode;\nexports.warnDeprecation = warnDeprecation;\n", "import { isString, hyphenate, extend, isObject, NO, isArray, makeMap, isSymbol, NOOP, EMPTY_OBJ, capitalize, camelize as camelize$1, PatchFlagNames, slotFlagsText, isOn, isReservedProp, toHandlerKey } from '@vue/shared';\nexport { generateCodeFrame } from '@vue/shared';\n\nfunction defaultOnError(error) {\r\n    throw error;\r\n}\r\nfunction defaultOnWarn(msg) {\r\n    (process.env.NODE_ENV !== 'production') && console.warn(`[Vue warn] ${msg.message}`);\r\n}\r\nfunction createCompilerError(code, loc, messages, additionalMessage) {\r\n    const msg = (process.env.NODE_ENV !== 'production') || !true\r\n        ? (messages || errorMessages)[code] + (additionalMessage || ``)\r\n        : code;\r\n    const error = new SyntaxError(String(msg));\r\n    error.code = code;\r\n    error.loc = loc;\r\n    return error;\r\n}\r\nconst errorMessages = {\r\n    // parse errors\r\n    [0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\r\n    [1 /* CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\r\n    [2 /* DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\r\n    [3 /* END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\r\n    [4 /* END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\r\n    [5 /* EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\r\n    [6 /* EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\r\n    [7 /* EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\r\n    [8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\r\n    [9 /* EOF_IN_TAG */]: 'Unexpected EOF in tag.',\r\n    [10 /* INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\r\n    [11 /* INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\r\n    [12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\r\n    [13 /* MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\r\n    [14 /* MISSING_END_TAG_NAME */]: 'End tag name was expected.',\r\n    [15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\r\n    [16 /* NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\r\n    [17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\r\n    [18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\r\n    [19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\r\n    [21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\r\n    [20 /* UNEXPECTED_NULL_CHARACTER */]: `Unexpected null cahracter.`,\r\n    [22 /* UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\r\n    // Vue-specific parse errors\r\n    [23 /* X_INVALID_END_TAG */]: 'Invalid end tag.',\r\n    [24 /* X_MISSING_END_TAG */]: 'Element is missing end tag.',\r\n    [25 /* X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\r\n    [26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\r\n        'Note that dynamic directive argument cannot contain spaces.',\r\n    // transform errors\r\n    [27 /* X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\r\n    [28 /* X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\r\n    [29 /* X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if.`,\r\n    [30 /* X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\r\n    [31 /* X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\r\n    [32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\r\n    [33 /* X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\r\n    [34 /* X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\r\n    [35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\r\n    [36 /* X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>.` +\r\n        `When there are multiple named slots, all slots should use <template> ` +\r\n        `syntax to avoid scope ambiguity.`,\r\n    [37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\r\n    [38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\r\n        `default slot. These children will be ignored.`,\r\n    [39 /* X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\r\n    [40 /* X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\r\n    [41 /* X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\r\n    [42 /* X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\r\n    [43 /* X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\r\n    [44 /* X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\r\n    // generic errors\r\n    [45 /* X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\r\n    [46 /* X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\r\n    [47 /* X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\r\n    [48 /* X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\r\n    // just to fullfill types\r\n    [49 /* __EXTEND_POINT__ */]: ``\r\n};\n\nconst FRAGMENT = Symbol((process.env.NODE_ENV !== 'production') ? `Fragment` : ``);\r\nconst TELEPORT = Symbol((process.env.NODE_ENV !== 'production') ? `Teleport` : ``);\r\nconst SUSPENSE = Symbol((process.env.NODE_ENV !== 'production') ? `Suspense` : ``);\r\nconst KEEP_ALIVE = Symbol((process.env.NODE_ENV !== 'production') ? `KeepAlive` : ``);\r\nconst BASE_TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `BaseTransition` : ``);\r\nconst OPEN_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `openBlock` : ``);\r\nconst CREATE_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createBlock` : ``);\r\nconst CREATE_ELEMENT_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createElementBlock` : ``);\r\nconst CREATE_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createVNode` : ``);\r\nconst CREATE_ELEMENT_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createElementVNode` : ``);\r\nconst CREATE_COMMENT = Symbol((process.env.NODE_ENV !== 'production') ? `createCommentVNode` : ``);\r\nconst CREATE_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `createTextVNode` : ``);\r\nconst CREATE_STATIC = Symbol((process.env.NODE_ENV !== 'production') ? `createStaticVNode` : ``);\r\nconst RESOLVE_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveComponent` : ``);\r\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDynamicComponent` : ``);\r\nconst RESOLVE_DIRECTIVE = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDirective` : ``);\r\nconst RESOLVE_FILTER = Symbol((process.env.NODE_ENV !== 'production') ? `resolveFilter` : ``);\r\nconst WITH_DIRECTIVES = Symbol((process.env.NODE_ENV !== 'production') ? `withDirectives` : ``);\r\nconst RENDER_LIST = Symbol((process.env.NODE_ENV !== 'production') ? `renderList` : ``);\r\nconst RENDER_SLOT = Symbol((process.env.NODE_ENV !== 'production') ? `renderSlot` : ``);\r\nconst CREATE_SLOTS = Symbol((process.env.NODE_ENV !== 'production') ? `createSlots` : ``);\r\nconst TO_DISPLAY_STRING = Symbol((process.env.NODE_ENV !== 'production') ? `toDisplayString` : ``);\r\nconst MERGE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `mergeProps` : ``);\r\nconst NORMALIZE_CLASS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeClass` : ``);\r\nconst NORMALIZE_STYLE = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeStyle` : ``);\r\nconst NORMALIZE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeProps` : ``);\r\nconst GUARD_REACTIVE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `guardReactiveProps` : ``);\r\nconst TO_HANDLERS = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlers` : ``);\r\nconst CAMELIZE = Symbol((process.env.NODE_ENV !== 'production') ? `camelize` : ``);\r\nconst CAPITALIZE = Symbol((process.env.NODE_ENV !== 'production') ? `capitalize` : ``);\r\nconst TO_HANDLER_KEY = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlerKey` : ``);\r\nconst SET_BLOCK_TRACKING = Symbol((process.env.NODE_ENV !== 'production') ? `setBlockTracking` : ``);\r\nconst PUSH_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `pushScopeId` : ``);\r\nconst POP_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `popScopeId` : ``);\r\nconst WITH_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `withScopeId` : ``);\r\nconst WITH_CTX = Symbol((process.env.NODE_ENV !== 'production') ? `withCtx` : ``);\r\nconst UNREF = Symbol((process.env.NODE_ENV !== 'production') ? `unref` : ``);\r\nconst IS_REF = Symbol((process.env.NODE_ENV !== 'production') ? `isRef` : ``);\r\nconst WITH_MEMO = Symbol((process.env.NODE_ENV !== 'production') ? `withMemo` : ``);\r\nconst IS_MEMO_SAME = Symbol((process.env.NODE_ENV !== 'production') ? `isMemoSame` : ``);\r\n// Name mapping for runtime helpers that need to be imported from 'vue' in\r\n// generated code. Make sure these are correctly exported in the runtime!\r\n// Using `any` here because TS doesn't allow symbols as index type.\r\nconst helperNameMap = {\r\n    [FRAGMENT]: `Fragment`,\r\n    [TELEPORT]: `Teleport`,\r\n    [SUSPENSE]: `Suspense`,\r\n    [KEEP_ALIVE]: `KeepAlive`,\r\n    [BASE_TRANSITION]: `BaseTransition`,\r\n    [OPEN_BLOCK]: `openBlock`,\r\n    [CREATE_BLOCK]: `createBlock`,\r\n    [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\r\n    [CREATE_VNODE]: `createVNode`,\r\n    [CREATE_ELEMENT_VNODE]: `createElementVNode`,\r\n    [CREATE_COMMENT]: `createCommentVNode`,\r\n    [CREATE_TEXT]: `createTextVNode`,\r\n    [CREATE_STATIC]: `createStaticVNode`,\r\n    [RESOLVE_COMPONENT]: `resolveComponent`,\r\n    [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\r\n    [RESOLVE_DIRECTIVE]: `resolveDirective`,\r\n    [RESOLVE_FILTER]: `resolveFilter`,\r\n    [WITH_DIRECTIVES]: `withDirectives`,\r\n    [RENDER_LIST]: `renderList`,\r\n    [RENDER_SLOT]: `renderSlot`,\r\n    [CREATE_SLOTS]: `createSlots`,\r\n    [TO_DISPLAY_STRING]: `toDisplayString`,\r\n    [MERGE_PROPS]: `mergeProps`,\r\n    [NORMALIZE_CLASS]: `normalizeClass`,\r\n    [NORMALIZE_STYLE]: `normalizeStyle`,\r\n    [NORMALIZE_PROPS]: `normalizeProps`,\r\n    [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\r\n    [TO_HANDLERS]: `toHandlers`,\r\n    [CAMELIZE]: `camelize`,\r\n    [CAPITALIZE]: `capitalize`,\r\n    [TO_HANDLER_KEY]: `toHandlerKey`,\r\n    [SET_BLOCK_TRACKING]: `setBlockTracking`,\r\n    [PUSH_SCOPE_ID]: `pushScopeId`,\r\n    [POP_SCOPE_ID]: `popScopeId`,\r\n    [WITH_SCOPE_ID]: `withScopeId`,\r\n    [WITH_CTX]: `withCtx`,\r\n    [UNREF]: `unref`,\r\n    [IS_REF]: `isRef`,\r\n    [WITH_MEMO]: `withMemo`,\r\n    [IS_MEMO_SAME]: `isMemoSame`\r\n};\r\nfunction registerRuntimeHelpers(helpers) {\r\n    Object.getOwnPropertySymbols(helpers).forEach(s => {\r\n        helperNameMap[s] = helpers[s];\r\n    });\r\n}\n\n// AST Utilities ---------------------------------------------------------------\r\n// Some expressions, e.g. sequence and conditional expressions, are never\r\n// associated with template nodes, so their source locations are just a stub.\r\n// Container types like CompoundExpression also don't need a real location.\r\nconst locStub = {\r\n    source: '',\r\n    start: { line: 1, column: 1, offset: 0 },\r\n    end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createRoot(children, loc = locStub) {\r\n    return {\r\n        type: 0 /* ROOT */,\r\n        children,\r\n        helpers: [],\r\n        components: [],\r\n        directives: [],\r\n        hoists: [],\r\n        imports: [],\r\n        cached: 0,\r\n        temps: 0,\r\n        codegenNode: undefined,\r\n        loc\r\n    };\r\n}\r\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\r\n    if (context) {\r\n        if (isBlock) {\r\n            context.helper(OPEN_BLOCK);\r\n            context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\r\n        }\r\n        else {\r\n            context.helper(getVNodeHelper(context.inSSR, isComponent));\r\n        }\r\n        if (directives) {\r\n            context.helper(WITH_DIRECTIVES);\r\n        }\r\n    }\r\n    return {\r\n        type: 13 /* VNODE_CALL */,\r\n        tag,\r\n        props,\r\n        children,\r\n        patchFlag,\r\n        dynamicProps,\r\n        directives,\r\n        isBlock,\r\n        disableTracking,\r\n        isComponent,\r\n        loc\r\n    };\r\n}\r\nfunction createArrayExpression(elements, loc = locStub) {\r\n    return {\r\n        type: 17 /* JS_ARRAY_EXPRESSION */,\r\n        loc,\r\n        elements\r\n    };\r\n}\r\nfunction createObjectExpression(properties, loc = locStub) {\r\n    return {\r\n        type: 15 /* JS_OBJECT_EXPRESSION */,\r\n        loc,\r\n        properties\r\n    };\r\n}\r\nfunction createObjectProperty(key, value) {\r\n    return {\r\n        type: 16 /* JS_PROPERTY */,\r\n        loc: locStub,\r\n        key: isString(key) ? createSimpleExpression(key, true) : key,\r\n        value\r\n    };\r\n}\r\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* NOT_CONSTANT */) {\r\n    return {\r\n        type: 4 /* SIMPLE_EXPRESSION */,\r\n        loc,\r\n        content,\r\n        isStatic,\r\n        constType: isStatic ? 3 /* CAN_STRINGIFY */ : constType\r\n    };\r\n}\r\nfunction createInterpolation(content, loc) {\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        loc,\r\n        content: isString(content)\r\n            ? createSimpleExpression(content, false, loc)\r\n            : content\r\n    };\r\n}\r\nfunction createCompoundExpression(children, loc = locStub) {\r\n    return {\r\n        type: 8 /* COMPOUND_EXPRESSION */,\r\n        loc,\r\n        children\r\n    };\r\n}\r\nfunction createCallExpression(callee, args = [], loc = locStub) {\r\n    return {\r\n        type: 14 /* JS_CALL_EXPRESSION */,\r\n        loc,\r\n        callee,\r\n        arguments: args\r\n    };\r\n}\r\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\r\n    return {\r\n        type: 18 /* JS_FUNCTION_EXPRESSION */,\r\n        params,\r\n        returns,\r\n        newline,\r\n        isSlot,\r\n        loc\r\n    };\r\n}\r\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\r\n    return {\r\n        type: 19 /* JS_CONDITIONAL_EXPRESSION */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        newline,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createCacheExpression(index, value, isVNode = false) {\r\n    return {\r\n        type: 20 /* JS_CACHE_EXPRESSION */,\r\n        index,\r\n        value,\r\n        isVNode,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createBlockStatement(body) {\r\n    return {\r\n        type: 21 /* JS_BLOCK_STATEMENT */,\r\n        body,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createTemplateLiteral(elements) {\r\n    return {\r\n        type: 22 /* JS_TEMPLATE_LITERAL */,\r\n        elements,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createIfStatement(test, consequent, alternate) {\r\n    return {\r\n        type: 23 /* JS_IF_STATEMENT */,\r\n        test,\r\n        consequent,\r\n        alternate,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createAssignmentExpression(left, right) {\r\n    return {\r\n        type: 24 /* JS_ASSIGNMENT_EXPRESSION */,\r\n        left,\r\n        right,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createSequenceExpression(expressions) {\r\n    return {\r\n        type: 25 /* JS_SEQUENCE_EXPRESSION */,\r\n        expressions,\r\n        loc: locStub\r\n    };\r\n}\r\nfunction createReturnStatement(returns) {\r\n    return {\r\n        type: 26 /* JS_RETURN_STATEMENT */,\r\n        returns,\r\n        loc: locStub\r\n    };\r\n}\n\nconst isStaticExp = (p) => p.type === 4 /* SIMPLE_EXPRESSION */ && p.isStatic;\r\nconst isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);\r\nfunction isCoreComponent(tag) {\r\n    if (isBuiltInType(tag, 'Teleport')) {\r\n        return TELEPORT;\r\n    }\r\n    else if (isBuiltInType(tag, 'Suspense')) {\r\n        return SUSPENSE;\r\n    }\r\n    else if (isBuiltInType(tag, 'KeepAlive')) {\r\n        return KEEP_ALIVE;\r\n    }\r\n    else if (isBuiltInType(tag, 'BaseTransition')) {\r\n        return BASE_TRANSITION;\r\n    }\r\n}\r\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\r\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\r\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\r\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\r\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\r\n/**\r\n * Simple lexer to check if an expression is a member expression. This is\r\n * lax and only checks validity at the root level (i.e. does not validate exps\r\n * inside square brackets), but it's ok since these are only used on template\r\n * expressions and false positives are invalid expressions in the first place.\r\n */\r\nconst isMemberExpression = (path) => {\r\n    // remove whitespaces around . or [ first\r\n    path = path.trim().replace(whitespaceRE, s => s.trim());\r\n    let state = 0 /* inMemberExp */;\r\n    let stateStack = [];\r\n    let currentOpenBracketCount = 0;\r\n    let currentOpenParensCount = 0;\r\n    let currentStringType = null;\r\n    for (let i = 0; i < path.length; i++) {\r\n        const char = path.charAt(i);\r\n        switch (state) {\r\n            case 0 /* inMemberExp */:\r\n                if (char === '[') {\r\n                    stateStack.push(state);\r\n                    state = 1 /* inBrackets */;\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === '(') {\r\n                    stateStack.push(state);\r\n                    state = 2 /* inParens */;\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\r\n                    return false;\r\n                }\r\n                break;\r\n            case 1 /* inBrackets */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `[`) {\r\n                    currentOpenBracketCount++;\r\n                }\r\n                else if (char === `]`) {\r\n                    if (!--currentOpenBracketCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 2 /* inParens */:\r\n                if (char === `'` || char === `\"` || char === '`') {\r\n                    stateStack.push(state);\r\n                    state = 3 /* inString */;\r\n                    currentStringType = char;\r\n                }\r\n                else if (char === `(`) {\r\n                    currentOpenParensCount++;\r\n                }\r\n                else if (char === `)`) {\r\n                    // if the exp ends as a call then it should not be considered valid\r\n                    if (i === path.length - 1) {\r\n                        return false;\r\n                    }\r\n                    if (!--currentOpenParensCount) {\r\n                        state = stateStack.pop();\r\n                    }\r\n                }\r\n                break;\r\n            case 3 /* inString */:\r\n                if (char === currentStringType) {\r\n                    state = stateStack.pop();\r\n                    currentStringType = null;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    return !currentOpenBracketCount && !currentOpenParensCount;\r\n};\r\nfunction getInnerRange(loc, offset, length) {\r\n    const source = loc.source.substr(offset, length);\r\n    const newLoc = {\r\n        source,\r\n        start: advancePositionWithClone(loc.start, loc.source, offset),\r\n        end: loc.end\r\n    };\r\n    if (length != null) {\r\n        newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\r\n    }\r\n    return newLoc;\r\n}\r\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\r\n    return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);\r\n}\r\n// advance by mutation without cloning (for performance reasons), since this\r\n// gets called a lot in the parser\r\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\r\n    let linesCount = 0;\r\n    let lastNewLinePos = -1;\r\n    for (let i = 0; i < numberOfCharacters; i++) {\r\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\r\n            linesCount++;\r\n            lastNewLinePos = i;\r\n        }\r\n    }\r\n    pos.offset += numberOfCharacters;\r\n    pos.line += linesCount;\r\n    pos.column =\r\n        lastNewLinePos === -1\r\n            ? pos.column + numberOfCharacters\r\n            : numberOfCharacters - lastNewLinePos;\r\n    return pos;\r\n}\r\nfunction assert(condition, msg) {\r\n    /* istanbul ignore if */\r\n    if (!condition) {\r\n        throw new Error(msg || `unexpected compiler condition`);\r\n    }\r\n}\r\nfunction findDir(node, name, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 7 /* DIRECTIVE */ &&\r\n            (allowEmpty || p.exp) &&\r\n            (isString(name) ? p.name === name : name.test(p.name))) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (dynamicOnly)\r\n                continue;\r\n            if (p.name === name && (p.value || allowEmpty)) {\r\n                return p;\r\n            }\r\n        }\r\n        else if (p.name === 'bind' &&\r\n            (p.exp || allowEmpty) &&\r\n            isBindKey(p.arg, name)) {\r\n            return p;\r\n        }\r\n    }\r\n}\r\nfunction isBindKey(arg, name) {\r\n    return !!(arg && isStaticExp(arg) && arg.content === name);\r\n}\r\nfunction hasDynamicKeyVBind(node) {\r\n    return node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n        p.name === 'bind' &&\r\n        (!p.arg || // v-bind=\"obj\"\r\n            p.arg.type !== 4 /* SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\r\n            !p.arg.isStatic) // v-bind:[foo]\r\n    );\r\n}\r\nfunction isText(node) {\r\n    return node.type === 5 /* INTERPOLATION */ || node.type === 2 /* TEXT */;\r\n}\r\nfunction isVSlot(p) {\r\n    return p.type === 7 /* DIRECTIVE */ && p.name === 'slot';\r\n}\r\nfunction isTemplateNode(node) {\r\n    return (node.type === 1 /* ELEMENT */ && node.tagType === 3 /* TEMPLATE */);\r\n}\r\nfunction isSlotOutlet(node) {\r\n    return node.type === 1 /* ELEMENT */ && node.tagType === 2 /* SLOT */;\r\n}\r\nfunction getVNodeHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\r\n}\r\nfunction getVNodeBlockHelper(ssr, isComponent) {\r\n    return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\r\n}\r\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\r\nfunction getUnnormalizedProps(props, callPath = []) {\r\n    if (props &&\r\n        !isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const callee = props.callee;\r\n        if (!isString(callee) && propsHelperSet.has(callee)) {\r\n            return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\r\n        }\r\n    }\r\n    return [props, callPath];\r\n}\r\nfunction injectProp(node, prop, context) {\r\n    let propsWithInjection;\r\n    const originalProps = node.type === 13 /* VNODE_CALL */ ? node.props : node.arguments[2];\r\n    /**\r\n     * 1. mergeProps(...)\r\n     * 2. toHandlers(...)\r\n     * 3. normalizeProps(...)\r\n     * 4. normalizeProps(guardReactiveProps(...))\r\n     *\r\n     * we need to get the real props before normalization\r\n     */\r\n    let props = originalProps;\r\n    let callPath = [];\r\n    let parentCall;\r\n    if (props &&\r\n        !isString(props) &&\r\n        props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        const ret = getUnnormalizedProps(props);\r\n        props = ret[0];\r\n        callPath = ret[1];\r\n        parentCall = callPath[callPath.length - 1];\r\n    }\r\n    if (props == null || isString(props)) {\r\n        propsWithInjection = createObjectExpression([prop]);\r\n    }\r\n    else if (props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n        // merged props... add ours\r\n        // only inject key to object literal if it's the first argument so that\r\n        // if doesn't override user provided keys\r\n        const first = props.arguments[0];\r\n        if (!isString(first) && first.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n            first.properties.unshift(prop);\r\n        }\r\n        else {\r\n            if (props.callee === TO_HANDLERS) {\r\n                // #2366\r\n                propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n                    createObjectExpression([prop]),\r\n                    props\r\n                ]);\r\n            }\r\n            else {\r\n                props.arguments.unshift(createObjectExpression([prop]));\r\n            }\r\n        }\r\n        !propsWithInjection && (propsWithInjection = props);\r\n    }\r\n    else if (props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        let alreadyExists = false;\r\n        // check existing key to avoid overriding user provided keys\r\n        if (prop.key.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            const propKeyName = prop.key.content;\r\n            alreadyExists = props.properties.some(p => p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                p.key.content === propKeyName);\r\n        }\r\n        if (!alreadyExists) {\r\n            props.properties.unshift(prop);\r\n        }\r\n        propsWithInjection = props;\r\n    }\r\n    else {\r\n        // single v-bind with expression, return a merged replacement\r\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n            createObjectExpression([prop]),\r\n            props\r\n        ]);\r\n        // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\r\n        // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\r\n        // the `guardReactiveProps` will no longer be needed\r\n        if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\r\n            parentCall = callPath[callPath.length - 2];\r\n        }\r\n    }\r\n    if (node.type === 13 /* VNODE_CALL */) {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.props = propsWithInjection;\r\n        }\r\n    }\r\n    else {\r\n        if (parentCall) {\r\n            parentCall.arguments[0] = propsWithInjection;\r\n        }\r\n        else {\r\n            node.arguments[2] = propsWithInjection;\r\n        }\r\n    }\r\n}\r\nfunction toValidAssetId(name, type) {\r\n    return `_${type}_${name.replace(/[^\\w]/g, '_')}`;\r\n}\r\n// Check if a node contains expressions that reference current context scope ids\r\nfunction hasScopeRef(node, ids) {\r\n    if (!node || Object.keys(ids).length === 0) {\r\n        return false;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            for (let i = 0; i < node.props.length; i++) {\r\n                const p = node.props[i];\r\n                if (p.type === 7 /* DIRECTIVE */ &&\r\n                    (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\r\n                    return true;\r\n                }\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 11 /* FOR */:\r\n            if (hasScopeRef(node.source, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 9 /* IF */:\r\n            return node.branches.some(b => hasScopeRef(b, ids));\r\n        case 10 /* IF_BRANCH */:\r\n            if (hasScopeRef(node.condition, ids)) {\r\n                return true;\r\n            }\r\n            return node.children.some(c => hasScopeRef(c, ids));\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return (!node.isStatic &&\r\n                isSimpleIdentifier(node.content) &&\r\n                !!ids[node.content]);\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            return node.children.some(c => isObject(c) && hasScopeRef(c, ids));\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return hasScopeRef(node.content, ids);\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return false;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) ;\r\n            return false;\r\n    }\r\n}\r\nfunction getMemoedVNodeCall(node) {\r\n    if (node.type === 14 /* JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\r\n        return node.arguments[1].returns;\r\n    }\r\n    else {\r\n        return node;\r\n    }\r\n}\r\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\r\n    if (!node.isBlock) {\r\n        node.isBlock = true;\r\n        removeHelper(getVNodeHelper(inSSR, node.isComponent));\r\n        helper(OPEN_BLOCK);\r\n        helper(getVNodeBlockHelper(inSSR, node.isComponent));\r\n    }\r\n}\n\nconst deprecationData = {\r\n    [\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */]: {\r\n        message: `Platform-native elements with \"is\" prop will no longer be ` +\r\n            `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\r\n            `prefixed with \"vue:\".`,\r\n        link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`\r\n    },\r\n    [\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */]: {\r\n        message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\r\n            `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\r\n            `\\`v-model:${key}\\`.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-model.html`\r\n    },\r\n    [\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */]: {\r\n        message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\r\n            `Vue 3 will automatically set a binding as DOM property when appropriate.`\r\n    },\r\n    [\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */]: {\r\n        message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\r\n            `object spread: it will now overwrite an existing non-mergeable attribute ` +\r\n            `that appears before v-bind in the case of conflict. ` +\r\n            `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\r\n            `You can also suppress this warning if the usage is intended.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-bind.html`\r\n    },\r\n    [\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */]: {\r\n        message: `.native modifier for v-on has been removed as is no longer necessary.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`\r\n    },\r\n    [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\r\n        message: `v-if / v-for precedence when used on the same element has changed ` +\r\n            `in Vue 3: v-if now takes higher precedence and will no longer have ` +\r\n            `access to v-for scope variables. It is best to avoid the ambiguity ` +\r\n            `with <template> tags or use a computed property that filters v-for ` +\r\n            `data source.`,\r\n        link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`\r\n    },\r\n    [\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */]: {\r\n        message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +\r\n            `Consider using function refs or refactor to avoid ref usage altogether.`,\r\n        link: `https://v3.vuejs.org/guide/migration/array-refs.html`\r\n    },\r\n    [\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */]: {\r\n        message: `<template> with no special directives will render as a native template ` +\r\n            `element instead of its inner content in Vue 3.`\r\n    },\r\n    [\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */]: {\r\n        message: `\"inline-template\" has been removed in Vue 3.`,\r\n        link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`\r\n    },\r\n    [\"COMPILER_FILTER\" /* COMPILER_FILTERS */]: {\r\n        message: `filters have been removed in Vue 3. ` +\r\n            `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\r\n            `Use method calls or computed properties instead.`,\r\n        link: `https://v3.vuejs.org/guide/migration/filters.html`\r\n    }\r\n};\r\nfunction getCompatValue(key, context) {\r\n    const config = context.options\r\n        ? context.options.compatConfig\r\n        : context.compatConfig;\r\n    const value = config && config[key];\r\n    if (key === 'MODE') {\r\n        return value || 3; // compiler defaults to v3 behavior\r\n    }\r\n    else {\r\n        return value;\r\n    }\r\n}\r\nfunction isCompatEnabled(key, context) {\r\n    const mode = getCompatValue('MODE', context);\r\n    const value = getCompatValue(key, context);\r\n    // in v3 mode, only enable if explicitly set to true\r\n    // otherwise enable for any non-false value\r\n    return mode === 3 ? value === true : value !== false;\r\n}\r\nfunction checkCompatEnabled(key, context, loc, ...args) {\r\n    const enabled = isCompatEnabled(key, context);\r\n    if ((process.env.NODE_ENV !== 'production') && enabled) {\r\n        warnDeprecation(key, context, loc, ...args);\r\n    }\r\n    return enabled;\r\n}\r\nfunction warnDeprecation(key, context, loc, ...args) {\r\n    const val = getCompatValue(key, context);\r\n    if (val === 'suppress-warning') {\r\n        return;\r\n    }\r\n    const { message, link } = deprecationData[key];\r\n    const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\r\n    const err = new SyntaxError(msg);\r\n    err.code = key;\r\n    if (loc)\r\n        err.loc = loc;\r\n    context.onWarn(err);\r\n}\n\n// The default decoder only provides escapes for characters reserved as part of\r\n// the template syntax, and is only used if the custom renderer did not provide\r\n// a platform-specific decoder.\r\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\r\nconst decodeMap = {\r\n    gt: '>',\r\n    lt: '<',\r\n    amp: '&',\r\n    apos: \"'\",\r\n    quot: '\"'\r\n};\r\nconst defaultParserOptions = {\r\n    delimiters: [`{{`, `}}`],\r\n    getNamespace: () => 0 /* HTML */,\r\n    getTextMode: () => 0 /* DATA */,\r\n    isVoidTag: NO,\r\n    isPreTag: NO,\r\n    isCustomElement: NO,\r\n    decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\r\n    onError: defaultOnError,\r\n    onWarn: defaultOnWarn,\r\n    comments: (process.env.NODE_ENV !== 'production')\r\n};\r\nfunction baseParse(content, options = {}) {\r\n    const context = createParserContext(content, options);\r\n    const start = getCursor(context);\r\n    return createRoot(parseChildren(context, 0 /* DATA */, []), getSelection(context, start));\r\n}\r\nfunction createParserContext(content, rawOptions) {\r\n    const options = extend({}, defaultParserOptions);\r\n    let key;\r\n    for (key in rawOptions) {\r\n        // @ts-ignore\r\n        options[key] =\r\n            rawOptions[key] === undefined\r\n                ? defaultParserOptions[key]\r\n                : rawOptions[key];\r\n    }\r\n    return {\r\n        options,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        originalSource: content,\r\n        source: content,\r\n        inPre: false,\r\n        inVPre: false,\r\n        onWarn: options.onWarn\r\n    };\r\n}\r\nfunction parseChildren(context, mode, ancestors) {\r\n    const parent = last(ancestors);\r\n    const ns = parent ? parent.ns : 0 /* HTML */;\r\n    const nodes = [];\r\n    while (!isEnd(context, mode, ancestors)) {\r\n        const s = context.source;\r\n        let node = undefined;\r\n        if (mode === 0 /* DATA */ || mode === 1 /* RCDATA */) {\r\n            if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\r\n                // '{{'\r\n                node = parseInterpolation(context, mode);\r\n            }\r\n            else if (mode === 0 /* DATA */ && s[0] === '<') {\r\n                // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\r\n                if (s.length === 1) {\r\n                    emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 1);\r\n                }\r\n                else if (s[1] === '!') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\r\n                    if (startsWith(s, '<!--')) {\r\n                        node = parseComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<!DOCTYPE')) {\r\n                        // Ignore DOCTYPE by a limitation.\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                    else if (startsWith(s, '<![CDATA[')) {\r\n                        if (ns !== 0 /* HTML */) {\r\n                            node = parseCDATA(context, ancestors);\r\n                        }\r\n                        else {\r\n                            emitError(context, 1 /* CDATA_IN_HTML_CONTENT */);\r\n                            node = parseBogusComment(context);\r\n                        }\r\n                    }\r\n                    else {\r\n                        emitError(context, 11 /* INCORRECTLY_OPENED_COMMENT */);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (s[1] === '/') {\r\n                    // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\r\n                    if (s.length === 2) {\r\n                        emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 2);\r\n                    }\r\n                    else if (s[2] === '>') {\r\n                        emitError(context, 14 /* MISSING_END_TAG_NAME */, 2);\r\n                        advanceBy(context, 3);\r\n                        continue;\r\n                    }\r\n                    else if (/[a-z]/i.test(s[2])) {\r\n                        emitError(context, 23 /* X_INVALID_END_TAG */);\r\n                        parseTag(context, 1 /* End */, parent);\r\n                        continue;\r\n                    }\r\n                    else {\r\n                        emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\r\n                        node = parseBogusComment(context);\r\n                    }\r\n                }\r\n                else if (/[a-z]/i.test(s[1])) {\r\n                    node = parseElement(context, ancestors);\r\n                    // 2.x <template> with no directive compat\r\n                    if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context) &&\r\n                        node &&\r\n                        node.tag === 'template' &&\r\n                        !node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n                            isSpecialTemplateDirective(p.name))) {\r\n                        (process.env.NODE_ENV !== 'production') &&\r\n                            warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context, node.loc);\r\n                        node = node.children;\r\n                    }\r\n                }\r\n                else if (s[1] === '?') {\r\n                    emitError(context, 21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\r\n                    node = parseBogusComment(context);\r\n                }\r\n                else {\r\n                    emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\r\n                }\r\n            }\r\n        }\r\n        if (!node) {\r\n            node = parseText(context, mode);\r\n        }\r\n        if (isArray(node)) {\r\n            for (let i = 0; i < node.length; i++) {\r\n                pushNode(nodes, node[i]);\r\n            }\r\n        }\r\n        else {\r\n            pushNode(nodes, node);\r\n        }\r\n    }\r\n    // Whitespace handling strategy like v2\r\n    let removedWhitespace = false;\r\n    if (mode !== 2 /* RAWTEXT */ && mode !== 1 /* RCDATA */) {\r\n        const shouldCondense = context.options.whitespace !== 'preserve';\r\n        for (let i = 0; i < nodes.length; i++) {\r\n            const node = nodes[i];\r\n            if (!context.inPre && node.type === 2 /* TEXT */) {\r\n                if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\r\n                    const prev = nodes[i - 1];\r\n                    const next = nodes[i + 1];\r\n                    // Remove if:\r\n                    // - the whitespace is the first or last node, or:\r\n                    // - (condense mode) the whitespace is adjacent to a comment, or:\r\n                    // - (condense mode) the whitespace is between two elements AND contains newline\r\n                    if (!prev ||\r\n                        !next ||\r\n                        (shouldCondense &&\r\n                            (prev.type === 3 /* COMMENT */ ||\r\n                                next.type === 3 /* COMMENT */ ||\r\n                                (prev.type === 1 /* ELEMENT */ &&\r\n                                    next.type === 1 /* ELEMENT */ &&\r\n                                    /[\\r\\n]/.test(node.content))))) {\r\n                        removedWhitespace = true;\r\n                        nodes[i] = null;\r\n                    }\r\n                    else {\r\n                        // Otherwise, the whitespace is condensed into a single space\r\n                        node.content = ' ';\r\n                    }\r\n                }\r\n                else if (shouldCondense) {\r\n                    // in condense mode, consecutive whitespaces in text are condensed\r\n                    // down to a single space.\r\n                    node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\r\n                }\r\n            }\r\n            // Remove comment nodes if desired by configuration.\r\n            else if (node.type === 3 /* COMMENT */ && !context.options.comments) {\r\n                removedWhitespace = true;\r\n                nodes[i] = null;\r\n            }\r\n        }\r\n        if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\r\n            // remove leading newline per html spec\r\n            // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\r\n            const first = nodes[0];\r\n            if (first && first.type === 2 /* TEXT */) {\r\n                first.content = first.content.replace(/^\\r?\\n/, '');\r\n            }\r\n        }\r\n    }\r\n    return removedWhitespace ? nodes.filter(Boolean) : nodes;\r\n}\r\nfunction pushNode(nodes, node) {\r\n    if (node.type === 2 /* TEXT */) {\r\n        const prev = last(nodes);\r\n        // Merge if both this and the previous node are text and those are\r\n        // consecutive. This happens for cases like \"a < b\".\r\n        if (prev &&\r\n            prev.type === 2 /* TEXT */ &&\r\n            prev.loc.end.offset === node.loc.start.offset) {\r\n            prev.content += node.content;\r\n            prev.loc.end = node.loc.end;\r\n            prev.loc.source += node.loc.source;\r\n            return;\r\n        }\r\n    }\r\n    nodes.push(node);\r\n}\r\nfunction parseCDATA(context, ancestors) {\r\n    advanceBy(context, 9);\r\n    const nodes = parseChildren(context, 3 /* CDATA */, ancestors);\r\n    if (context.source.length === 0) {\r\n        emitError(context, 6 /* EOF_IN_CDATA */);\r\n    }\r\n    else {\r\n        advanceBy(context, 3);\r\n    }\r\n    return nodes;\r\n}\r\nfunction parseComment(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    // Regular comment.\r\n    const match = /--(\\!)?>/.exec(context.source);\r\n    if (!match) {\r\n        content = context.source.slice(4);\r\n        advanceBy(context, context.source.length);\r\n        emitError(context, 7 /* EOF_IN_COMMENT */);\r\n    }\r\n    else {\r\n        if (match.index <= 3) {\r\n            emitError(context, 0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\r\n        }\r\n        if (match[1]) {\r\n            emitError(context, 10 /* INCORRECTLY_CLOSED_COMMENT */);\r\n        }\r\n        content = context.source.slice(4, match.index);\r\n        // Advancing with reporting nested comments.\r\n        const s = context.source.slice(0, match.index);\r\n        let prevIndex = 1, nestedIndex = 0;\r\n        while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\r\n            advanceBy(context, nestedIndex - prevIndex + 1);\r\n            if (nestedIndex + 4 < s.length) {\r\n                emitError(context, 16 /* NESTED_COMMENT */);\r\n            }\r\n            prevIndex = nestedIndex + 1;\r\n        }\r\n        advanceBy(context, match.index + match[0].length - prevIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseBogusComment(context) {\r\n    const start = getCursor(context);\r\n    const contentStart = context.source[1] === '?' ? 1 : 2;\r\n    let content;\r\n    const closeIndex = context.source.indexOf('>');\r\n    if (closeIndex === -1) {\r\n        content = context.source.slice(contentStart);\r\n        advanceBy(context, context.source.length);\r\n    }\r\n    else {\r\n        content = context.source.slice(contentStart, closeIndex);\r\n        advanceBy(context, closeIndex + 1);\r\n    }\r\n    return {\r\n        type: 3 /* COMMENT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseElement(context, ancestors) {\r\n    // Start tag.\r\n    const wasInPre = context.inPre;\r\n    const wasInVPre = context.inVPre;\r\n    const parent = last(ancestors);\r\n    const element = parseTag(context, 0 /* Start */, parent);\r\n    const isPreBoundary = context.inPre && !wasInPre;\r\n    const isVPreBoundary = context.inVPre && !wasInVPre;\r\n    if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\r\n        // #4030 self-closing <pre> tag\r\n        if (isPreBoundary) {\r\n            context.inPre = false;\r\n        }\r\n        if (isVPreBoundary) {\r\n            context.inVPre = false;\r\n        }\r\n        return element;\r\n    }\r\n    // Children.\r\n    ancestors.push(element);\r\n    const mode = context.options.getTextMode(element, parent);\r\n    const children = parseChildren(context, mode, ancestors);\r\n    ancestors.pop();\r\n    // 2.x inline-template compat\r\n    {\r\n        const inlineTemplateProp = element.props.find(p => p.type === 6 /* ATTRIBUTE */ && p.name === 'inline-template');\r\n        if (inlineTemplateProp &&\r\n            checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\r\n            const loc = getSelection(context, element.loc.end);\r\n            inlineTemplateProp.value = {\r\n                type: 2 /* TEXT */,\r\n                content: loc.source,\r\n                loc\r\n            };\r\n        }\r\n    }\r\n    element.children = children;\r\n    // End tag.\r\n    if (startsWithEndTagOpen(context.source, element.tag)) {\r\n        parseTag(context, 1 /* End */, parent);\r\n    }\r\n    else {\r\n        emitError(context, 24 /* X_MISSING_END_TAG */, 0, element.loc.start);\r\n        if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\r\n            const first = children[0];\r\n            if (first && startsWith(first.loc.source, '<!--')) {\r\n                emitError(context, 8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\r\n            }\r\n        }\r\n    }\r\n    element.loc = getSelection(context, element.loc.start);\r\n    if (isPreBoundary) {\r\n        context.inPre = false;\r\n    }\r\n    if (isVPreBoundary) {\r\n        context.inVPre = false;\r\n    }\r\n    return element;\r\n}\r\nconst isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);\r\nfunction parseTag(context, type, parent) {\r\n    // Tag open.\r\n    const start = getCursor(context);\r\n    const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\r\n    const tag = match[1];\r\n    const ns = context.options.getNamespace(tag, parent);\r\n    advanceBy(context, match[0].length);\r\n    advanceSpaces(context);\r\n    // save current state in case we need to re-parse attributes with v-pre\r\n    const cursor = getCursor(context);\r\n    const currentSource = context.source;\r\n    // check <pre> tag\r\n    if (context.options.isPreTag(tag)) {\r\n        context.inPre = true;\r\n    }\r\n    // Attributes.\r\n    let props = parseAttributes(context, type);\r\n    // check v-pre\r\n    if (type === 0 /* Start */ &&\r\n        !context.inVPre &&\r\n        props.some(p => p.type === 7 /* DIRECTIVE */ && p.name === 'pre')) {\r\n        context.inVPre = true;\r\n        // reset context\r\n        extend(context, cursor);\r\n        context.source = currentSource;\r\n        // re-parse attrs and filter out v-pre itself\r\n        props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\r\n    }\r\n    // Tag close.\r\n    let isSelfClosing = false;\r\n    if (context.source.length === 0) {\r\n        emitError(context, 9 /* EOF_IN_TAG */);\r\n    }\r\n    else {\r\n        isSelfClosing = startsWith(context.source, '/>');\r\n        if (type === 1 /* End */ && isSelfClosing) {\r\n            emitError(context, 4 /* END_TAG_WITH_TRAILING_SOLIDUS */);\r\n        }\r\n        advanceBy(context, isSelfClosing ? 2 : 1);\r\n    }\r\n    if (type === 1 /* End */) {\r\n        return;\r\n    }\r\n    // 2.x deprecation checks\r\n    if ((process.env.NODE_ENV !== 'production') &&\r\n        isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\r\n        let hasIf = false;\r\n        let hasFor = false;\r\n        for (let i = 0; i < props.length; i++) {\r\n            const p = props[i];\r\n            if (p.type === 7 /* DIRECTIVE */) {\r\n                if (p.name === 'if') {\r\n                    hasIf = true;\r\n                }\r\n                else if (p.name === 'for') {\r\n                    hasFor = true;\r\n                }\r\n            }\r\n            if (hasIf && hasFor) {\r\n                warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\r\n            }\r\n        }\r\n    }\r\n    let tagType = 0 /* ELEMENT */;\r\n    if (!context.inVPre) {\r\n        if (tag === 'slot') {\r\n            tagType = 2 /* SLOT */;\r\n        }\r\n        else if (tag === 'template') {\r\n            if (props.some(p => p.type === 7 /* DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\r\n                tagType = 3 /* TEMPLATE */;\r\n            }\r\n        }\r\n        else if (isComponent(tag, props, context)) {\r\n            tagType = 1 /* COMPONENT */;\r\n        }\r\n    }\r\n    return {\r\n        type: 1 /* ELEMENT */,\r\n        ns,\r\n        tag,\r\n        tagType,\r\n        props,\r\n        isSelfClosing,\r\n        children: [],\r\n        loc: getSelection(context, start),\r\n        codegenNode: undefined // to be created during transform phase\r\n    };\r\n}\r\nfunction isComponent(tag, props, context) {\r\n    const options = context.options;\r\n    if (options.isCustomElement(tag)) {\r\n        return false;\r\n    }\r\n    if (tag === 'component' ||\r\n        /^[A-Z]/.test(tag) ||\r\n        isCoreComponent(tag) ||\r\n        (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\r\n        (options.isNativeTag && !options.isNativeTag(tag))) {\r\n        return true;\r\n    }\r\n    // at this point the tag should be a native tag, but check for potential \"is\"\r\n    // casting\r\n    for (let i = 0; i < props.length; i++) {\r\n        const p = props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.name === 'is' && p.value) {\r\n                if (p.value.content.startsWith('vue:')) {\r\n                    return true;\r\n                }\r\n                else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            // directive\r\n            // v-is (TODO Deprecate)\r\n            if (p.name === 'is') {\r\n                return true;\r\n            }\r\n            else if (\r\n            // :is on plain element - only treat as component in compat mode\r\n            p.name === 'bind' &&\r\n                isBindKey(p.arg, 'is') &&\r\n                true &&\r\n                checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseAttributes(context, type) {\r\n    const props = [];\r\n    const attributeNames = new Set();\r\n    while (context.source.length > 0 &&\r\n        !startsWith(context.source, '>') &&\r\n        !startsWith(context.source, '/>')) {\r\n        if (startsWith(context.source, '/')) {\r\n            emitError(context, 22 /* UNEXPECTED_SOLIDUS_IN_TAG */);\r\n            advanceBy(context, 1);\r\n            advanceSpaces(context);\r\n            continue;\r\n        }\r\n        if (type === 1 /* End */) {\r\n            emitError(context, 3 /* END_TAG_WITH_ATTRIBUTES */);\r\n        }\r\n        const attr = parseAttribute(context, attributeNames);\r\n        if (type === 0 /* Start */) {\r\n            props.push(attr);\r\n        }\r\n        if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\r\n            emitError(context, 15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\r\n        }\r\n        advanceSpaces(context);\r\n    }\r\n    return props;\r\n}\r\nfunction parseAttribute(context, nameSet) {\r\n    // Name.\r\n    const start = getCursor(context);\r\n    const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\r\n    const name = match[0];\r\n    if (nameSet.has(name)) {\r\n        emitError(context, 2 /* DUPLICATE_ATTRIBUTE */);\r\n    }\r\n    nameSet.add(name);\r\n    if (name[0] === '=') {\r\n        emitError(context, 19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\r\n    }\r\n    {\r\n        const pattern = /[\"'<]/g;\r\n        let m;\r\n        while ((m = pattern.exec(name))) {\r\n            emitError(context, 17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\r\n        }\r\n    }\r\n    advanceBy(context, name.length);\r\n    // Value\r\n    let value = undefined;\r\n    if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\r\n        advanceSpaces(context);\r\n        advanceBy(context, 1);\r\n        advanceSpaces(context);\r\n        value = parseAttributeValue(context);\r\n        if (!value) {\r\n            emitError(context, 13 /* MISSING_ATTRIBUTE_VALUE */);\r\n        }\r\n    }\r\n    const loc = getSelection(context, start);\r\n    if (!context.inVPre && /^(v-|:|\\.|@|#)/.test(name)) {\r\n        const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\r\n        let isPropShorthand = startsWith(name, '.');\r\n        let dirName = match[1] ||\r\n            (isPropShorthand || startsWith(name, ':')\r\n                ? 'bind'\r\n                : startsWith(name, '@')\r\n                    ? 'on'\r\n                    : 'slot');\r\n        let arg;\r\n        if (match[2]) {\r\n            const isSlot = dirName === 'slot';\r\n            const startOffset = name.lastIndexOf(match[2]);\r\n            const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\r\n            let content = match[2];\r\n            let isStatic = true;\r\n            if (content.startsWith('[')) {\r\n                isStatic = false;\r\n                if (!content.endsWith(']')) {\r\n                    emitError(context, 26 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\r\n                }\r\n                content = content.substr(1, content.length - 2);\r\n            }\r\n            else if (isSlot) {\r\n                // #1241 special case for v-slot: vuetify relies extensively on slot\r\n                // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\r\n                // supports such usage so we are keeping it consistent with 2.x.\r\n                content += match[3] || '';\r\n            }\r\n            arg = {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content,\r\n                isStatic,\r\n                constType: isStatic\r\n                    ? 3 /* CAN_STRINGIFY */\r\n                    : 0 /* NOT_CONSTANT */,\r\n                loc\r\n            };\r\n        }\r\n        if (value && value.isQuoted) {\r\n            const valueLoc = value.loc;\r\n            valueLoc.start.offset++;\r\n            valueLoc.start.column++;\r\n            valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\r\n            valueLoc.source = valueLoc.source.slice(1, -1);\r\n        }\r\n        const modifiers = match[3] ? match[3].substr(1).split('.') : [];\r\n        if (isPropShorthand)\r\n            modifiers.push('prop');\r\n        // 2.x compat v-bind:foo.sync -> v-model:foo\r\n        if (dirName === 'bind' && arg) {\r\n            if (modifiers.includes('sync') &&\r\n                checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\r\n                dirName = 'model';\r\n                modifiers.splice(modifiers.indexOf('sync'), 1);\r\n            }\r\n            if ((process.env.NODE_ENV !== 'production') && modifiers.includes('prop')) {\r\n                checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */, context, loc);\r\n            }\r\n        }\r\n        return {\r\n            type: 7 /* DIRECTIVE */,\r\n            name: dirName,\r\n            exp: value && {\r\n                type: 4 /* SIMPLE_EXPRESSION */,\r\n                content: value.content,\r\n                isStatic: false,\r\n                // Treat as non-constant by default. This can be potentially set to\r\n                // other values by `transformExpression` to make it eligible for hoisting.\r\n                constType: 0 /* NOT_CONSTANT */,\r\n                loc: value.loc\r\n            },\r\n            arg,\r\n            modifiers,\r\n            loc\r\n        };\r\n    }\r\n    return {\r\n        type: 6 /* ATTRIBUTE */,\r\n        name,\r\n        value: value && {\r\n            type: 2 /* TEXT */,\r\n            content: value.content,\r\n            loc: value.loc\r\n        },\r\n        loc\r\n    };\r\n}\r\nfunction parseAttributeValue(context) {\r\n    const start = getCursor(context);\r\n    let content;\r\n    const quote = context.source[0];\r\n    const isQuoted = quote === `\"` || quote === `'`;\r\n    if (isQuoted) {\r\n        // Quoted value.\r\n        advanceBy(context, 1);\r\n        const endIndex = context.source.indexOf(quote);\r\n        if (endIndex === -1) {\r\n            content = parseTextData(context, context.source.length, 4 /* ATTRIBUTE_VALUE */);\r\n        }\r\n        else {\r\n            content = parseTextData(context, endIndex, 4 /* ATTRIBUTE_VALUE */);\r\n            advanceBy(context, 1);\r\n        }\r\n    }\r\n    else {\r\n        // Unquoted\r\n        const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\r\n        if (!match) {\r\n            return undefined;\r\n        }\r\n        const unexpectedChars = /[\"'<=`]/g;\r\n        let m;\r\n        while ((m = unexpectedChars.exec(match[0]))) {\r\n            emitError(context, 18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\r\n        }\r\n        content = parseTextData(context, match[0].length, 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n    return { content, isQuoted, loc: getSelection(context, start) };\r\n}\r\nfunction parseInterpolation(context, mode) {\r\n    const [open, close] = context.options.delimiters;\r\n    const closeIndex = context.source.indexOf(close, open.length);\r\n    if (closeIndex === -1) {\r\n        emitError(context, 25 /* X_MISSING_INTERPOLATION_END */);\r\n        return undefined;\r\n    }\r\n    const start = getCursor(context);\r\n    advanceBy(context, open.length);\r\n    const innerStart = getCursor(context);\r\n    const innerEnd = getCursor(context);\r\n    const rawContentLength = closeIndex - open.length;\r\n    const rawContent = context.source.slice(0, rawContentLength);\r\n    const preTrimContent = parseTextData(context, rawContentLength, mode);\r\n    const content = preTrimContent.trim();\r\n    const startOffset = preTrimContent.indexOf(content);\r\n    if (startOffset > 0) {\r\n        advancePositionWithMutation(innerStart, rawContent, startOffset);\r\n    }\r\n    const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\r\n    advancePositionWithMutation(innerEnd, rawContent, endOffset);\r\n    advanceBy(context, close.length);\r\n    return {\r\n        type: 5 /* INTERPOLATION */,\r\n        content: {\r\n            type: 4 /* SIMPLE_EXPRESSION */,\r\n            isStatic: false,\r\n            // Set `isConstant` to false by default and will decide in transformExpression\r\n            constType: 0 /* NOT_CONSTANT */,\r\n            content,\r\n            loc: getSelection(context, innerStart, innerEnd)\r\n        },\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\nfunction parseText(context, mode) {\r\n    const endTokens = ['<', context.options.delimiters[0]];\r\n    if (mode === 3 /* CDATA */) {\r\n        endTokens.push(']]>');\r\n    }\r\n    let endIndex = context.source.length;\r\n    for (let i = 0; i < endTokens.length; i++) {\r\n        const index = context.source.indexOf(endTokens[i], 1);\r\n        if (index !== -1 && endIndex > index) {\r\n            endIndex = index;\r\n        }\r\n    }\r\n    const start = getCursor(context);\r\n    const content = parseTextData(context, endIndex, mode);\r\n    return {\r\n        type: 2 /* TEXT */,\r\n        content,\r\n        loc: getSelection(context, start)\r\n    };\r\n}\r\n/**\r\n * Get text data with a given length from the current location.\r\n * This translates HTML entities in the text data.\r\n */\r\nfunction parseTextData(context, length, mode) {\r\n    const rawText = context.source.slice(0, length);\r\n    advanceBy(context, length);\r\n    if (mode === 2 /* RAWTEXT */ ||\r\n        mode === 3 /* CDATA */ ||\r\n        rawText.indexOf('&') === -1) {\r\n        return rawText;\r\n    }\r\n    else {\r\n        // DATA or RCDATA containing \"&\"\". Entity decoding required.\r\n        return context.options.decodeEntities(rawText, mode === 4 /* ATTRIBUTE_VALUE */);\r\n    }\r\n}\r\nfunction getCursor(context) {\r\n    const { column, line, offset } = context;\r\n    return { column, line, offset };\r\n}\r\nfunction getSelection(context, start, end) {\r\n    end = end || getCursor(context);\r\n    return {\r\n        start,\r\n        end,\r\n        source: context.originalSource.slice(start.offset, end.offset)\r\n    };\r\n}\r\nfunction last(xs) {\r\n    return xs[xs.length - 1];\r\n}\r\nfunction startsWith(source, searchString) {\r\n    return source.startsWith(searchString);\r\n}\r\nfunction advanceBy(context, numberOfCharacters) {\r\n    const { source } = context;\r\n    advancePositionWithMutation(context, source, numberOfCharacters);\r\n    context.source = source.slice(numberOfCharacters);\r\n}\r\nfunction advanceSpaces(context) {\r\n    const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\r\n    if (match) {\r\n        advanceBy(context, match[0].length);\r\n    }\r\n}\r\nfunction getNewPosition(context, start, numberOfCharacters) {\r\n    return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\r\n}\r\nfunction emitError(context, code, offset, loc = getCursor(context)) {\r\n    if (offset) {\r\n        loc.offset += offset;\r\n        loc.column += offset;\r\n    }\r\n    context.options.onError(createCompilerError(code, {\r\n        start: loc,\r\n        end: loc,\r\n        source: ''\r\n    }));\r\n}\r\nfunction isEnd(context, mode, ancestors) {\r\n    const s = context.source;\r\n    switch (mode) {\r\n        case 0 /* DATA */:\r\n            if (startsWith(s, '</')) {\r\n                // TODO: probably bad performance\r\n                for (let i = ancestors.length - 1; i >= 0; --i) {\r\n                    if (startsWithEndTagOpen(s, ancestors[i].tag)) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        case 1 /* RCDATA */:\r\n        case 2 /* RAWTEXT */: {\r\n            const parent = last(ancestors);\r\n            if (parent && startsWithEndTagOpen(s, parent.tag)) {\r\n                return true;\r\n            }\r\n            break;\r\n        }\r\n        case 3 /* CDATA */:\r\n            if (startsWith(s, ']]>')) {\r\n                return true;\r\n            }\r\n            break;\r\n    }\r\n    return !s;\r\n}\r\nfunction startsWithEndTagOpen(source, tag) {\r\n    return (startsWith(source, '</') &&\r\n        source.substr(2, tag.length).toLowerCase() === tag.toLowerCase() &&\r\n        /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\r\n}\n\nfunction hoistStatic(root, context) {\r\n    walk(root, context, \r\n    // Root node is unfortunately non-hoistable due to potential parent\r\n    // fallthrough attributes.\r\n    isSingleElementRoot(root, root.children[0]));\r\n}\r\nfunction isSingleElementRoot(root, child) {\r\n    const { children } = root;\r\n    return (children.length === 1 &&\r\n        child.type === 1 /* ELEMENT */ &&\r\n        !isSlotOutlet(child));\r\n}\r\nfunction walk(node, context, doNotHoistNode = false) {\r\n    // Some transforms, e.g. transformAssetUrls from @vue/compiler-sfc, replaces\r\n    // static bindings with expressions. These expressions are guaranteed to be\r\n    // constant so they are still eligible for hoisting, but they are only\r\n    // available at runtime and therefore cannot be evaluated ahead of time.\r\n    // This is only a concern for pre-stringification (via transformHoist by\r\n    // @vue/compiler-dom), but doing it here allows us to perform only one full\r\n    // walk of the AST and allow `stringifyStatic` to stop walking as soon as its\r\n    // stringficiation threshold is met.\r\n    let canStringify = true;\r\n    const { children } = node;\r\n    const originalCount = children.length;\r\n    let hoistedCount = 0;\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        // only plain elements & text calls are eligible for hoisting.\r\n        if (child.type === 1 /* ELEMENT */ &&\r\n            child.tagType === 0 /* ELEMENT */) {\r\n            const constantType = doNotHoistNode\r\n                ? 0 /* NOT_CONSTANT */\r\n                : getConstantType(child, context);\r\n            if (constantType > 0 /* NOT_CONSTANT */) {\r\n                if (constantType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (constantType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode.patchFlag =\r\n                        -1 /* HOISTED */ + ((process.env.NODE_ENV !== 'production') ? ` /* HOISTED */` : ``);\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                    continue;\r\n                }\r\n            }\r\n            else {\r\n                // node may contain dynamic children, but its props may be eligible for\r\n                // hoisting.\r\n                const codegenNode = child.codegenNode;\r\n                if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                    const flag = getPatchFlag(codegenNode);\r\n                    if ((!flag ||\r\n                        flag === 512 /* NEED_PATCH */ ||\r\n                        flag === 1 /* TEXT */) &&\r\n                        getGeneratedPropsConstantType(child, context) >=\r\n                            2 /* CAN_HOIST */) {\r\n                        const props = getNodeProps(child);\r\n                        if (props) {\r\n                            codegenNode.props = context.hoist(props);\r\n                        }\r\n                    }\r\n                    if (codegenNode.dynamicProps) {\r\n                        codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else if (child.type === 12 /* TEXT_CALL */) {\r\n            const contentType = getConstantType(child.content, context);\r\n            if (contentType > 0) {\r\n                if (contentType < 3 /* CAN_STRINGIFY */) {\r\n                    canStringify = false;\r\n                }\r\n                if (contentType >= 2 /* CAN_HOIST */) {\r\n                    child.codegenNode = context.hoist(child.codegenNode);\r\n                    hoistedCount++;\r\n                }\r\n            }\r\n        }\r\n        // walk further\r\n        if (child.type === 1 /* ELEMENT */) {\r\n            const isComponent = child.tagType === 1 /* COMPONENT */;\r\n            if (isComponent) {\r\n                context.scopes.vSlot++;\r\n            }\r\n            walk(child, context);\r\n            if (isComponent) {\r\n                context.scopes.vSlot--;\r\n            }\r\n        }\r\n        else if (child.type === 11 /* FOR */) {\r\n            // Do not hoist v-for single child because it has to be a block\r\n            walk(child, context, child.children.length === 1);\r\n        }\r\n        else if (child.type === 9 /* IF */) {\r\n            for (let i = 0; i < child.branches.length; i++) {\r\n                // Do not hoist v-if single child because it has to be a block\r\n                walk(child.branches[i], context, child.branches[i].children.length === 1);\r\n            }\r\n        }\r\n    }\r\n    if (canStringify && hoistedCount && context.transformHoist) {\r\n        context.transformHoist(children, context, node);\r\n    }\r\n    // all children were hoisted - the entire children array is hoistable.\r\n    if (hoistedCount &&\r\n        hoistedCount === originalCount &&\r\n        node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 0 /* ELEMENT */ &&\r\n        node.codegenNode &&\r\n        node.codegenNode.type === 13 /* VNODE_CALL */ &&\r\n        isArray(node.codegenNode.children)) {\r\n        node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\r\n    }\r\n}\r\nfunction getConstantType(node, context) {\r\n    const { constantCache } = context;\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n            if (node.tagType !== 0 /* ELEMENT */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const cached = constantCache.get(node);\r\n            if (cached !== undefined) {\r\n                return cached;\r\n            }\r\n            const codegenNode = node.codegenNode;\r\n            if (codegenNode.type !== 13 /* VNODE_CALL */) {\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const flag = getPatchFlag(codegenNode);\r\n            if (!flag) {\r\n                let returnType = 3 /* CAN_STRINGIFY */;\r\n                // Element itself has no patch flag. However we still need to check:\r\n                // 1. Even for a node with no patch flag, it is possible for it to contain\r\n                // non-hoistable expressions that refers to scope variables, e.g. compiler\r\n                // injected keys or cached event handlers. Therefore we need to always\r\n                // check the codegenNode's props to be sure.\r\n                const generatedPropsType = getGeneratedPropsConstantType(node, context);\r\n                if (generatedPropsType === 0 /* NOT_CONSTANT */) {\r\n                    constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                if (generatedPropsType < returnType) {\r\n                    returnType = generatedPropsType;\r\n                }\r\n                // 2. its children.\r\n                for (let i = 0; i < node.children.length; i++) {\r\n                    const childType = getConstantType(node.children[i], context);\r\n                    if (childType === 0 /* NOT_CONSTANT */) {\r\n                        constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                        return 0 /* NOT_CONSTANT */;\r\n                    }\r\n                    if (childType < returnType) {\r\n                        returnType = childType;\r\n                    }\r\n                }\r\n                // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\r\n                // type, check if any of the props can cause the type to be lowered\r\n                // we can skip can_patch because it's guaranteed by the absence of a\r\n                // patchFlag.\r\n                if (returnType > 1 /* CAN_SKIP_PATCH */) {\r\n                    for (let i = 0; i < node.props.length; i++) {\r\n                        const p = node.props[i];\r\n                        if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind' && p.exp) {\r\n                            const expType = getConstantType(p.exp, context);\r\n                            if (expType === 0 /* NOT_CONSTANT */) {\r\n                                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                                return 0 /* NOT_CONSTANT */;\r\n                            }\r\n                            if (expType < returnType) {\r\n                                returnType = expType;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                // only svg/foreignObject could be block here, however if they are\r\n                // static then they don't need to be blocks since there will be no\r\n                // nested updates.\r\n                if (codegenNode.isBlock) {\r\n                    context.removeHelper(OPEN_BLOCK);\r\n                    context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\r\n                    codegenNode.isBlock = false;\r\n                    context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\r\n                }\r\n                constantCache.set(node, returnType);\r\n                return returnType;\r\n            }\r\n            else {\r\n                constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n        case 2 /* TEXT */:\r\n        case 3 /* COMMENT */:\r\n            return 3 /* CAN_STRINGIFY */;\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n        case 10 /* IF_BRANCH */:\r\n            return 0 /* NOT_CONSTANT */;\r\n        case 5 /* INTERPOLATION */:\r\n        case 12 /* TEXT_CALL */:\r\n            return getConstantType(node.content, context);\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            return node.constType;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            let returnType = 3 /* CAN_STRINGIFY */;\r\n            for (let i = 0; i < node.children.length; i++) {\r\n                const child = node.children[i];\r\n                if (isString(child) || isSymbol(child)) {\r\n                    continue;\r\n                }\r\n                const childType = getConstantType(child, context);\r\n                if (childType === 0 /* NOT_CONSTANT */) {\r\n                    return 0 /* NOT_CONSTANT */;\r\n                }\r\n                else if (childType < returnType) {\r\n                    returnType = childType;\r\n                }\r\n            }\r\n            return returnType;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) ;\r\n            return 0 /* NOT_CONSTANT */;\r\n    }\r\n}\r\nconst allowHoistedHelperSet = new Set([\r\n    NORMALIZE_CLASS,\r\n    NORMALIZE_STYLE,\r\n    NORMALIZE_PROPS,\r\n    GUARD_REACTIVE_PROPS\r\n]);\r\nfunction getConstantTypeOfHelperCall(value, context) {\r\n    if (value.type === 14 /* JS_CALL_EXPRESSION */ &&\r\n        !isString(value.callee) &&\r\n        allowHoistedHelperSet.has(value.callee)) {\r\n        const arg = value.arguments[0];\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            return getConstantType(arg, context);\r\n        }\r\n        else if (arg.type === 14 /* JS_CALL_EXPRESSION */) {\r\n            // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\r\n            return getConstantTypeOfHelperCall(arg, context);\r\n        }\r\n    }\r\n    return 0 /* NOT_CONSTANT */;\r\n}\r\nfunction getGeneratedPropsConstantType(node, context) {\r\n    let returnType = 3 /* CAN_STRINGIFY */;\r\n    const props = getNodeProps(node);\r\n    if (props && props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n        const { properties } = props;\r\n        for (let i = 0; i < properties.length; i++) {\r\n            const { key, value } = properties[i];\r\n            const keyType = getConstantType(key, context);\r\n            if (keyType === 0 /* NOT_CONSTANT */) {\r\n                return keyType;\r\n            }\r\n            if (keyType < returnType) {\r\n                returnType = keyType;\r\n            }\r\n            if (value.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n                // some helper calls can be hoisted,\r\n                // such as the `normalizeProps` generated by the compiler for pre-normalize class,\r\n                // in this case we need to respect the ConstanType of the helper's argments\r\n                if (value.type === 14 /* JS_CALL_EXPRESSION */) {\r\n                    return getConstantTypeOfHelperCall(value, context);\r\n                }\r\n                return 0 /* NOT_CONSTANT */;\r\n            }\r\n            const valueType = getConstantType(value, context);\r\n            if (valueType === 0 /* NOT_CONSTANT */) {\r\n                return valueType;\r\n            }\r\n            if (valueType < returnType) {\r\n                returnType = valueType;\r\n            }\r\n        }\r\n    }\r\n    return returnType;\r\n}\r\nfunction getNodeProps(node) {\r\n    const codegenNode = node.codegenNode;\r\n    if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n        return codegenNode.props;\r\n    }\r\n}\r\nfunction getPatchFlag(node) {\r\n    const flag = node.patchFlag;\r\n    return flag ? parseInt(flag, 10) : undefined;\r\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\r\n    const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\r\n    const context = {\r\n        // options\r\n        selfName: nameMatch && capitalize(camelize$1(nameMatch[1])),\r\n        prefixIdentifiers,\r\n        hoistStatic,\r\n        cacheHandlers,\r\n        nodeTransforms,\r\n        directiveTransforms,\r\n        transformHoist,\r\n        isBuiltInComponent,\r\n        isCustomElement,\r\n        expressionPlugins,\r\n        scopeId,\r\n        slotted,\r\n        ssr,\r\n        inSSR,\r\n        ssrCssVars,\r\n        bindingMetadata,\r\n        inline,\r\n        isTS,\r\n        onError,\r\n        onWarn,\r\n        compatConfig,\r\n        // state\r\n        root,\r\n        helpers: new Map(),\r\n        components: new Set(),\r\n        directives: new Set(),\r\n        hoists: [],\r\n        imports: [],\r\n        constantCache: new Map(),\r\n        temps: 0,\r\n        cached: 0,\r\n        identifiers: Object.create(null),\r\n        scopes: {\r\n            vFor: 0,\r\n            vSlot: 0,\r\n            vPre: 0,\r\n            vOnce: 0\r\n        },\r\n        parent: null,\r\n        currentNode: root,\r\n        childIndex: 0,\r\n        inVOnce: false,\r\n        // methods\r\n        helper(name) {\r\n            const count = context.helpers.get(name) || 0;\r\n            context.helpers.set(name, count + 1);\r\n            return name;\r\n        },\r\n        removeHelper(name) {\r\n            const count = context.helpers.get(name);\r\n            if (count) {\r\n                const currentCount = count - 1;\r\n                if (!currentCount) {\r\n                    context.helpers.delete(name);\r\n                }\r\n                else {\r\n                    context.helpers.set(name, currentCount);\r\n                }\r\n            }\r\n        },\r\n        helperString(name) {\r\n            return `_${helperNameMap[context.helper(name)]}`;\r\n        },\r\n        replaceNode(node) {\r\n            /* istanbul ignore if */\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                if (!context.currentNode) {\r\n                    throw new Error(`Node being replaced is already removed.`);\r\n                }\r\n                if (!context.parent) {\r\n                    throw new Error(`Cannot replace root node.`);\r\n                }\r\n            }\r\n            context.parent.children[context.childIndex] = context.currentNode = node;\r\n        },\r\n        removeNode(node) {\r\n            if ((process.env.NODE_ENV !== 'production') && !context.parent) {\r\n                throw new Error(`Cannot remove root node.`);\r\n            }\r\n            const list = context.parent.children;\r\n            const removalIndex = node\r\n                ? list.indexOf(node)\r\n                : context.currentNode\r\n                    ? context.childIndex\r\n                    : -1;\r\n            /* istanbul ignore if */\r\n            if ((process.env.NODE_ENV !== 'production') && removalIndex < 0) {\r\n                throw new Error(`node being removed is not a child of current parent`);\r\n            }\r\n            if (!node || node === context.currentNode) {\r\n                // current node removed\r\n                context.currentNode = null;\r\n                context.onNodeRemoved();\r\n            }\r\n            else {\r\n                // sibling node removed\r\n                if (context.childIndex > removalIndex) {\r\n                    context.childIndex--;\r\n                    context.onNodeRemoved();\r\n                }\r\n            }\r\n            context.parent.children.splice(removalIndex, 1);\r\n        },\r\n        onNodeRemoved: () => { },\r\n        addIdentifiers(exp) {\r\n        },\r\n        removeIdentifiers(exp) {\r\n        },\r\n        hoist(exp) {\r\n            if (isString(exp))\r\n                exp = createSimpleExpression(exp);\r\n            context.hoists.push(exp);\r\n            const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* CAN_HOIST */);\r\n            identifier.hoisted = exp;\r\n            return identifier;\r\n        },\r\n        cache(exp, isVNode = false) {\r\n            return createCacheExpression(context.cached++, exp, isVNode);\r\n        }\r\n    };\r\n    {\r\n        context.filters = new Set();\r\n    }\r\n    return context;\r\n}\r\nfunction transform(root, options) {\r\n    const context = createTransformContext(root, options);\r\n    traverseNode(root, context);\r\n    if (options.hoistStatic) {\r\n        hoistStatic(root, context);\r\n    }\r\n    if (!options.ssr) {\r\n        createRootCodegen(root, context);\r\n    }\r\n    // finalize meta information\r\n    root.helpers = [...context.helpers.keys()];\r\n    root.components = [...context.components];\r\n    root.directives = [...context.directives];\r\n    root.imports = context.imports;\r\n    root.hoists = context.hoists;\r\n    root.temps = context.temps;\r\n    root.cached = context.cached;\r\n    {\r\n        root.filters = [...context.filters];\r\n    }\r\n}\r\nfunction createRootCodegen(root, context) {\r\n    const { helper } = context;\r\n    const { children } = root;\r\n    if (children.length === 1) {\r\n        const child = children[0];\r\n        // if the single child is an element, turn it into a block.\r\n        if (isSingleElementRoot(root, child) && child.codegenNode) {\r\n            // single element root is never hoisted so codegenNode will never be\r\n            // SimpleExpressionNode\r\n            const codegenNode = child.codegenNode;\r\n            if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n                makeBlock(codegenNode, context);\r\n            }\r\n            root.codegenNode = codegenNode;\r\n        }\r\n        else {\r\n            // - single <slot/>, IfNode, ForNode: already blocks.\r\n            // - single text node: always patched.\r\n            // root codegen falls through via genNode()\r\n            root.codegenNode = child;\r\n        }\r\n    }\r\n    else if (children.length > 1) {\r\n        // root has multiple nodes - return a fragment block.\r\n        let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n        let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n        // check if the fragment actually contains a single valid child with\r\n        // the rest being comments\r\n        if ((process.env.NODE_ENV !== 'production') &&\r\n            children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n            patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n            patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n        }\r\n        root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, undefined, false /* isComponent */);\r\n    }\r\n    else ;\r\n}\r\nfunction traverseChildren(parent, context) {\r\n    let i = 0;\r\n    const nodeRemoved = () => {\r\n        i--;\r\n    };\r\n    for (; i < parent.children.length; i++) {\r\n        const child = parent.children[i];\r\n        if (isString(child))\r\n            continue;\r\n        context.parent = parent;\r\n        context.childIndex = i;\r\n        context.onNodeRemoved = nodeRemoved;\r\n        traverseNode(child, context);\r\n    }\r\n}\r\nfunction traverseNode(node, context) {\r\n    context.currentNode = node;\r\n    // apply transform plugins\r\n    const { nodeTransforms } = context;\r\n    const exitFns = [];\r\n    for (let i = 0; i < nodeTransforms.length; i++) {\r\n        const onExit = nodeTransforms[i](node, context);\r\n        if (onExit) {\r\n            if (isArray(onExit)) {\r\n                exitFns.push(...onExit);\r\n            }\r\n            else {\r\n                exitFns.push(onExit);\r\n            }\r\n        }\r\n        if (!context.currentNode) {\r\n            // node was removed\r\n            return;\r\n        }\r\n        else {\r\n            // node may have been replaced\r\n            node = context.currentNode;\r\n        }\r\n    }\r\n    switch (node.type) {\r\n        case 3 /* COMMENT */:\r\n            if (!context.ssr) {\r\n                // inject import for the Comment symbol, which is needed for creating\r\n                // comment nodes with `createVNode`\r\n                context.helper(CREATE_COMMENT);\r\n            }\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            // no need to traverse, but we need to inject toString helper\r\n            if (!context.ssr) {\r\n                context.helper(TO_DISPLAY_STRING);\r\n            }\r\n            break;\r\n        // for container types, further traverse downwards\r\n        case 9 /* IF */:\r\n            for (let i = 0; i < node.branches.length; i++) {\r\n                traverseNode(node.branches[i], context);\r\n            }\r\n            break;\r\n        case 10 /* IF_BRANCH */:\r\n        case 11 /* FOR */:\r\n        case 1 /* ELEMENT */:\r\n        case 0 /* ROOT */:\r\n            traverseChildren(node, context);\r\n            break;\r\n    }\r\n    // exit transforms\r\n    context.currentNode = node;\r\n    let i = exitFns.length;\r\n    while (i--) {\r\n        exitFns[i]();\r\n    }\r\n}\r\nfunction createStructuralDirectiveTransform(name, fn) {\r\n    const matches = isString(name)\r\n        ? (n) => n === name\r\n        : (n) => name.test(n);\r\n    return (node, context) => {\r\n        if (node.type === 1 /* ELEMENT */) {\r\n            const { props } = node;\r\n            // structural directive transforms are not concerned with slots\r\n            // as they are handled separately in vSlot.ts\r\n            if (node.tagType === 3 /* TEMPLATE */ && props.some(isVSlot)) {\r\n                return;\r\n            }\r\n            const exitFns = [];\r\n            for (let i = 0; i < props.length; i++) {\r\n                const prop = props[i];\r\n                if (prop.type === 7 /* DIRECTIVE */ && matches(prop.name)) {\r\n                    // structural directives are removed to avoid infinite recursion\r\n                    // also we remove them *before* applying so that it can further\r\n                    // traverse itself in case it moves the node around\r\n                    props.splice(i, 1);\r\n                    i--;\r\n                    const onExit = fn(node, prop, context);\r\n                    if (onExit)\r\n                        exitFns.push(onExit);\r\n                }\r\n            }\r\n            return exitFns;\r\n        }\r\n    };\r\n}\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\r\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssr = false, isTS = false, inSSR = false }) {\r\n    const context = {\r\n        mode,\r\n        prefixIdentifiers,\r\n        sourceMap,\r\n        filename,\r\n        scopeId,\r\n        optimizeImports,\r\n        runtimeGlobalName,\r\n        runtimeModuleName,\r\n        ssr,\r\n        isTS,\r\n        inSSR,\r\n        source: ast.loc.source,\r\n        code: ``,\r\n        column: 1,\r\n        line: 1,\r\n        offset: 0,\r\n        indentLevel: 0,\r\n        pure: false,\r\n        map: undefined,\r\n        helper(key) {\r\n            return `_${helperNameMap[key]}`;\r\n        },\r\n        push(code, node) {\r\n            context.code += code;\r\n        },\r\n        indent() {\r\n            newline(++context.indentLevel);\r\n        },\r\n        deindent(withoutNewLine = false) {\r\n            if (withoutNewLine) {\r\n                --context.indentLevel;\r\n            }\r\n            else {\r\n                newline(--context.indentLevel);\r\n            }\r\n        },\r\n        newline() {\r\n            newline(context.indentLevel);\r\n        }\r\n    };\r\n    function newline(n) {\r\n        context.push('\\n' + `  `.repeat(n));\r\n    }\r\n    return context;\r\n}\r\nfunction generate(ast, options = {}) {\r\n    const context = createCodegenContext(ast, options);\r\n    if (options.onContextCreated)\r\n        options.onContextCreated(context);\r\n    const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\r\n    const hasHelpers = ast.helpers.length > 0;\r\n    const useWithBlock = !prefixIdentifiers && mode !== 'module';\r\n    // preambles\r\n    // in setup() inline mode, the preamble is generated in a sub context\r\n    // and returned separately.\r\n    const preambleContext = context;\r\n    {\r\n        genFunctionPreamble(ast, preambleContext);\r\n    }\r\n    // enter render function\r\n    const functionName = ssr ? `ssrRender` : `render`;\r\n    const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\r\n    const signature = args.join(', ');\r\n    {\r\n        push(`function ${functionName}(${signature}) {`);\r\n    }\r\n    indent();\r\n    if (useWithBlock) {\r\n        push(`with (_ctx) {`);\r\n        indent();\r\n        // function mode const declarations should be inside with block\r\n        // also they should be renamed to avoid collision with user properties\r\n        if (hasHelpers) {\r\n            push(`const { ${ast.helpers\r\n                .map(s => `${helperNameMap[s]}: _${helperNameMap[s]}`)\r\n                .join(', ')} } = _Vue`);\r\n            push(`\\n`);\r\n            newline();\r\n        }\r\n    }\r\n    // generate asset resolution statements\r\n    if (ast.components.length) {\r\n        genAssets(ast.components, 'component', context);\r\n        if (ast.directives.length || ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.directives.length) {\r\n        genAssets(ast.directives, 'directive', context);\r\n        if (ast.temps > 0) {\r\n            newline();\r\n        }\r\n    }\r\n    if (ast.filters && ast.filters.length) {\r\n        newline();\r\n        genAssets(ast.filters, 'filter', context);\r\n        newline();\r\n    }\r\n    if (ast.temps > 0) {\r\n        push(`let `);\r\n        for (let i = 0; i < ast.temps; i++) {\r\n            push(`${i > 0 ? `, ` : ``}_temp${i}`);\r\n        }\r\n    }\r\n    if (ast.components.length || ast.directives.length || ast.temps) {\r\n        push(`\\n`);\r\n        newline();\r\n    }\r\n    // generate the VNode tree expression\r\n    if (!ssr) {\r\n        push(`return `);\r\n    }\r\n    if (ast.codegenNode) {\r\n        genNode(ast.codegenNode, context);\r\n    }\r\n    else {\r\n        push(`null`);\r\n    }\r\n    if (useWithBlock) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    deindent();\r\n    push(`}`);\r\n    return {\r\n        ast,\r\n        code: context.code,\r\n        preamble: ``,\r\n        // SourceMapGenerator does have toJSON() method but it's not in the types\r\n        map: context.map ? context.map.toJSON() : undefined\r\n    };\r\n}\r\nfunction genFunctionPreamble(ast, context) {\r\n    const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName } = context;\r\n    const VueBinding = runtimeGlobalName;\r\n    const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\r\n    // Generate const declaration for helpers\r\n    // In prefix mode, we place the const declaration at top so it's done\r\n    // only once; But if we not prefixing, we place the declaration inside the\r\n    // with block so it doesn't incur the `in` check cost for every helper access.\r\n    if (ast.helpers.length > 0) {\r\n        {\r\n            // \"with\" mode.\r\n            // save Vue in a separate variable to avoid collision\r\n            push(`const _Vue = ${VueBinding}\\n`);\r\n            // in \"with\" mode, helpers are declared inside the with block to avoid\r\n            // has check cost, but hoists are lifted out of the function - we need\r\n            // to provide the helper here.\r\n            if (ast.hoists.length) {\r\n                const staticHelpers = [\r\n                    CREATE_VNODE,\r\n                    CREATE_ELEMENT_VNODE,\r\n                    CREATE_COMMENT,\r\n                    CREATE_TEXT,\r\n                    CREATE_STATIC\r\n                ]\r\n                    .filter(helper => ast.helpers.includes(helper))\r\n                    .map(aliasHelper)\r\n                    .join(', ');\r\n                push(`const { ${staticHelpers} } = _Vue\\n`);\r\n            }\r\n        }\r\n    }\r\n    genHoists(ast.hoists, context);\r\n    newline();\r\n    push(`return `);\r\n}\r\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\r\n    const resolver = helper(type === 'filter'\r\n        ? RESOLVE_FILTER\r\n        : type === 'component'\r\n            ? RESOLVE_COMPONENT\r\n            : RESOLVE_DIRECTIVE);\r\n    for (let i = 0; i < assets.length; i++) {\r\n        let id = assets[i];\r\n        // potential component implicit self-reference inferred from SFC filename\r\n        const maybeSelfReference = id.endsWith('__self');\r\n        if (maybeSelfReference) {\r\n            id = id.slice(0, -6);\r\n        }\r\n        push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\r\n        if (i < assets.length - 1) {\r\n            newline();\r\n        }\r\n    }\r\n}\r\nfunction genHoists(hoists, context) {\r\n    if (!hoists.length) {\r\n        return;\r\n    }\r\n    context.pure = true;\r\n    const { push, newline, helper, scopeId, mode } = context;\r\n    newline();\r\n    hoists.forEach((exp, i) => {\r\n        if (exp) {\r\n            push(`const _hoisted_${i + 1} = `);\r\n            genNode(exp, context);\r\n            newline();\r\n        }\r\n    });\r\n    context.pure = false;\r\n}\r\nfunction isText$1(n) {\r\n    return (isString(n) ||\r\n        n.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n        n.type === 2 /* TEXT */ ||\r\n        n.type === 5 /* INTERPOLATION */ ||\r\n        n.type === 8 /* COMPOUND_EXPRESSION */);\r\n}\r\nfunction genNodeListAsArray(nodes, context) {\r\n    const multilines = nodes.length > 3 ||\r\n        (((process.env.NODE_ENV !== 'production')) && nodes.some(n => isArray(n) || !isText$1(n)));\r\n    context.push(`[`);\r\n    multilines && context.indent();\r\n    genNodeList(nodes, context, multilines);\r\n    multilines && context.deindent();\r\n    context.push(`]`);\r\n}\r\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\r\n    const { push, newline } = context;\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        const node = nodes[i];\r\n        if (isString(node)) {\r\n            push(node);\r\n        }\r\n        else if (isArray(node)) {\r\n            genNodeListAsArray(node, context);\r\n        }\r\n        else {\r\n            genNode(node, context);\r\n        }\r\n        if (i < nodes.length - 1) {\r\n            if (multilines) {\r\n                comma && push(',');\r\n                newline();\r\n            }\r\n            else {\r\n                comma && push(', ');\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction genNode(node, context) {\r\n    if (isString(node)) {\r\n        context.push(node);\r\n        return;\r\n    }\r\n    if (isSymbol(node)) {\r\n        context.push(context.helper(node));\r\n        return;\r\n    }\r\n    switch (node.type) {\r\n        case 1 /* ELEMENT */:\r\n        case 9 /* IF */:\r\n        case 11 /* FOR */:\r\n            (process.env.NODE_ENV !== 'production') &&\r\n                assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\r\n                    `Apply appropriate transforms first.`);\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 2 /* TEXT */:\r\n            genText(node, context);\r\n            break;\r\n        case 4 /* SIMPLE_EXPRESSION */:\r\n            genExpression(node, context);\r\n            break;\r\n        case 5 /* INTERPOLATION */:\r\n            genInterpolation(node, context);\r\n            break;\r\n        case 12 /* TEXT_CALL */:\r\n            genNode(node.codegenNode, context);\r\n            break;\r\n        case 8 /* COMPOUND_EXPRESSION */:\r\n            genCompoundExpression(node, context);\r\n            break;\r\n        case 3 /* COMMENT */:\r\n            genComment(node, context);\r\n            break;\r\n        case 13 /* VNODE_CALL */:\r\n            genVNodeCall(node, context);\r\n            break;\r\n        case 14 /* JS_CALL_EXPRESSION */:\r\n            genCallExpression(node, context);\r\n            break;\r\n        case 15 /* JS_OBJECT_EXPRESSION */:\r\n            genObjectExpression(node, context);\r\n            break;\r\n        case 17 /* JS_ARRAY_EXPRESSION */:\r\n            genArrayExpression(node, context);\r\n            break;\r\n        case 18 /* JS_FUNCTION_EXPRESSION */:\r\n            genFunctionExpression(node, context);\r\n            break;\r\n        case 19 /* JS_CONDITIONAL_EXPRESSION */:\r\n            genConditionalExpression(node, context);\r\n            break;\r\n        case 20 /* JS_CACHE_EXPRESSION */:\r\n            genCacheExpression(node, context);\r\n            break;\r\n        case 21 /* JS_BLOCK_STATEMENT */:\r\n            genNodeList(node.body, context, true, false);\r\n            break;\r\n        // SSR only types\r\n        case 22 /* JS_TEMPLATE_LITERAL */:\r\n            break;\r\n        case 23 /* JS_IF_STATEMENT */:\r\n            break;\r\n        case 24 /* JS_ASSIGNMENT_EXPRESSION */:\r\n            break;\r\n        case 25 /* JS_SEQUENCE_EXPRESSION */:\r\n            break;\r\n        case 26 /* JS_RETURN_STATEMENT */:\r\n            break;\r\n        /* istanbul ignore next */\r\n        case 10 /* IF_BRANCH */:\r\n            // noop\r\n            break;\r\n        default:\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                assert(false, `unhandled codegen node type: ${node.type}`);\r\n                // make sure we exhaust all possible types\r\n                const exhaustiveCheck = node;\r\n                return exhaustiveCheck;\r\n            }\r\n    }\r\n}\r\nfunction genText(node, context) {\r\n    context.push(JSON.stringify(node.content), node);\r\n}\r\nfunction genExpression(node, context) {\r\n    const { content, isStatic } = node;\r\n    context.push(isStatic ? JSON.stringify(content) : content, node);\r\n}\r\nfunction genInterpolation(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure)\r\n        push(PURE_ANNOTATION);\r\n    push(`${helper(TO_DISPLAY_STRING)}(`);\r\n    genNode(node.content, context);\r\n    push(`)`);\r\n}\r\nfunction genCompoundExpression(node, context) {\r\n    for (let i = 0; i < node.children.length; i++) {\r\n        const child = node.children[i];\r\n        if (isString(child)) {\r\n            context.push(child);\r\n        }\r\n        else {\r\n            genNode(child, context);\r\n        }\r\n    }\r\n}\r\nfunction genExpressionAsPropertyKey(node, context) {\r\n    const { push } = context;\r\n    if (node.type === 8 /* COMPOUND_EXPRESSION */) {\r\n        push(`[`);\r\n        genCompoundExpression(node, context);\r\n        push(`]`);\r\n    }\r\n    else if (node.isStatic) {\r\n        // only quote keys if necessary\r\n        const text = isSimpleIdentifier(node.content)\r\n            ? node.content\r\n            : JSON.stringify(node.content);\r\n        push(text, node);\r\n    }\r\n    else {\r\n        push(`[${node.content}]`, node);\r\n    }\r\n}\r\nfunction genComment(node, context) {\r\n    const { push, helper, pure } = context;\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\r\n}\r\nfunction genVNodeCall(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\r\n    if (directives) {\r\n        push(helper(WITH_DIRECTIVES) + `(`);\r\n    }\r\n    if (isBlock) {\r\n        push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\r\n    }\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    const callHelper = isBlock\r\n        ? getVNodeBlockHelper(context.inSSR, isComponent)\r\n        : getVNodeHelper(context.inSSR, isComponent);\r\n    push(helper(callHelper) + `(`, node);\r\n    genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\r\n    push(`)`);\r\n    if (isBlock) {\r\n        push(`)`);\r\n    }\r\n    if (directives) {\r\n        push(`, `);\r\n        genNode(directives, context);\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genNullableArgs(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i] != null)\r\n            break;\r\n    }\r\n    return args.slice(0, i + 1).map(arg => arg || `null`);\r\n}\r\n// JavaScript\r\nfunction genCallExpression(node, context) {\r\n    const { push, helper, pure } = context;\r\n    const callee = isString(node.callee) ? node.callee : helper(node.callee);\r\n    if (pure) {\r\n        push(PURE_ANNOTATION);\r\n    }\r\n    push(callee + `(`, node);\r\n    genNodeList(node.arguments, context);\r\n    push(`)`);\r\n}\r\nfunction genObjectExpression(node, context) {\r\n    const { push, indent, deindent, newline } = context;\r\n    const { properties } = node;\r\n    if (!properties.length) {\r\n        push(`{}`, node);\r\n        return;\r\n    }\r\n    const multilines = properties.length > 1 ||\r\n        (((process.env.NODE_ENV !== 'production')) &&\r\n            properties.some(p => p.value.type !== 4 /* SIMPLE_EXPRESSION */));\r\n    push(multilines ? `{` : `{ `);\r\n    multilines && indent();\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const { key, value } = properties[i];\r\n        // key\r\n        genExpressionAsPropertyKey(key, context);\r\n        push(`: `);\r\n        // value\r\n        genNode(value, context);\r\n        if (i < properties.length - 1) {\r\n            // will only reach this if it's multilines\r\n            push(`,`);\r\n            newline();\r\n        }\r\n    }\r\n    multilines && deindent();\r\n    push(multilines ? `}` : ` }`);\r\n}\r\nfunction genArrayExpression(node, context) {\r\n    genNodeListAsArray(node.elements, context);\r\n}\r\nfunction genFunctionExpression(node, context) {\r\n    const { push, indent, deindent } = context;\r\n    const { params, returns, body, newline, isSlot } = node;\r\n    if (isSlot) {\r\n        // wrap slot functions with owner context\r\n        push(`_${helperNameMap[WITH_CTX]}(`);\r\n    }\r\n    push(`(`, node);\r\n    if (isArray(params)) {\r\n        genNodeList(params, context);\r\n    }\r\n    else if (params) {\r\n        genNode(params, context);\r\n    }\r\n    push(`) => `);\r\n    if (newline || body) {\r\n        push(`{`);\r\n        indent();\r\n    }\r\n    if (returns) {\r\n        if (newline) {\r\n            push(`return `);\r\n        }\r\n        if (isArray(returns)) {\r\n            genNodeListAsArray(returns, context);\r\n        }\r\n        else {\r\n            genNode(returns, context);\r\n        }\r\n    }\r\n    else if (body) {\r\n        genNode(body, context);\r\n    }\r\n    if (newline || body) {\r\n        deindent();\r\n        push(`}`);\r\n    }\r\n    if (isSlot) {\r\n        if (node.isNonScopedSlot) {\r\n            push(`, undefined, true`);\r\n        }\r\n        push(`)`);\r\n    }\r\n}\r\nfunction genConditionalExpression(node, context) {\r\n    const { test, consequent, alternate, newline: needNewline } = node;\r\n    const { push, indent, deindent, newline } = context;\r\n    if (test.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        const needsParens = !isSimpleIdentifier(test.content);\r\n        needsParens && push(`(`);\r\n        genExpression(test, context);\r\n        needsParens && push(`)`);\r\n    }\r\n    else {\r\n        push(`(`);\r\n        genNode(test, context);\r\n        push(`)`);\r\n    }\r\n    needNewline && indent();\r\n    context.indentLevel++;\r\n    needNewline || push(` `);\r\n    push(`? `);\r\n    genNode(consequent, context);\r\n    context.indentLevel--;\r\n    needNewline && newline();\r\n    needNewline || push(` `);\r\n    push(`: `);\r\n    const isNested = alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */;\r\n    if (!isNested) {\r\n        context.indentLevel++;\r\n    }\r\n    genNode(alternate, context);\r\n    if (!isNested) {\r\n        context.indentLevel--;\r\n    }\r\n    needNewline && deindent(true /* without newline */);\r\n}\r\nfunction genCacheExpression(node, context) {\r\n    const { push, helper, indent, deindent, newline } = context;\r\n    push(`_cache[${node.index}] || (`);\r\n    if (node.isVNode) {\r\n        indent();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\r\n        newline();\r\n    }\r\n    push(`_cache[${node.index}] = `);\r\n    genNode(node.value, context);\r\n    if (node.isVNode) {\r\n        push(`,`);\r\n        newline();\r\n        push(`${helper(SET_BLOCK_TRACKING)}(1),`);\r\n        newline();\r\n        push(`_cache[${node.index}]`);\r\n        deindent();\r\n    }\r\n    push(`)`);\r\n}\n\n// these keywords should not appear inside expressions, but operators like\r\n// typeof, instanceof and in are allowed\r\nconst prohibitedKeywordRE = new RegExp('\\\\b' +\r\n    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n        'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n        'extends,finally,continue,debugger,function,arguments,typeof,void')\r\n        .split(',')\r\n        .join('\\\\b|\\\\b') +\r\n    '\\\\b');\r\n// strip strings in expressions\r\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\r\n/**\r\n * Validate a non-prefixed expression.\r\n * This is only called when using the in-browser runtime compiler since it\r\n * doesn't prefix expressions.\r\n */\r\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\r\n    const exp = node.content;\r\n    // empty expressions are validated per-directive since some directives\r\n    // do allow empty expressions.\r\n    if (!exp.trim()) {\r\n        return;\r\n    }\r\n    try {\r\n        new Function(asRawStatements\r\n            ? ` ${exp} `\r\n            : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`);\r\n    }\r\n    catch (e) {\r\n        let message = e.message;\r\n        const keywordMatch = exp\r\n            .replace(stripStringRE, '')\r\n            .match(prohibitedKeywordRE);\r\n        if (keywordMatch) {\r\n            message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\r\n        }\r\n        context.onError(createCompilerError(43 /* X_INVALID_EXPRESSION */, node.loc, undefined, message));\r\n    }\r\n}\n\nconst transformExpression = (node, context) => {\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        node.content = processExpression(node.content, context);\r\n    }\r\n    else if (node.type === 1 /* ELEMENT */) {\r\n        // handle directives on element\r\n        for (let i = 0; i < node.props.length; i++) {\r\n            const dir = node.props[i];\r\n            // do not process for v-on & v-for since they are special handled\r\n            if (dir.type === 7 /* DIRECTIVE */ && dir.name !== 'for') {\r\n                const exp = dir.exp;\r\n                const arg = dir.arg;\r\n                // do not process exp if this is v-on:arg - we need special handling\r\n                // for wrapping inline statements.\r\n                if (exp &&\r\n                    exp.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n                    !(dir.name === 'on' && arg)) {\r\n                    dir.exp = processExpression(exp, context, \r\n                    // slot args must be processed as function params\r\n                    dir.name === 'slot');\r\n                }\r\n                if (arg && arg.type === 4 /* SIMPLE_EXPRESSION */ && !arg.isStatic) {\r\n                    dir.arg = processExpression(arg, context);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n// Important: since this function uses Node.js only dependencies, it should\r\n// always be used with a leading !true check so that it can be\r\n// tree-shaken from the browser build.\r\nfunction processExpression(node, context, \r\n// some expressions like v-slot props & v-for aliases should be parsed as\r\n// function params\r\nasParams = false, \r\n// v-on handler values may contain multiple statements\r\nasRawStatements = false) {\r\n    {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            // simple in-browser validation (same logic in 2.x)\r\n            validateBrowserExpression(node, context, asParams, asRawStatements);\r\n        }\r\n        return node;\r\n    }\r\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\r\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\r\n        // #1587: We need to dynamically increment the key based on the current\r\n        // node's sibling nodes, since chained v-if/else branches are\r\n        // rendered at the same depth\r\n        const siblings = context.parent.children;\r\n        let i = siblings.indexOf(ifNode);\r\n        let key = 0;\r\n        while (i-- >= 0) {\r\n            const sibling = siblings[i];\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                key += sibling.branches.length;\r\n            }\r\n        }\r\n        // Exit callback. Complete the codegenNode when all children have been\r\n        // transformed.\r\n        return () => {\r\n            if (isRoot) {\r\n                ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\r\n            }\r\n            else {\r\n                // attach this branch's codegen node to the v-if root.\r\n                const parentCondition = getParentCondition(ifNode.codegenNode);\r\n                parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processIf(node, dir, context, processCodegen) {\r\n    if (dir.name !== 'else' &&\r\n        (!dir.exp || !dir.exp.content.trim())) {\r\n        const loc = dir.exp ? dir.exp.loc : node.loc;\r\n        context.onError(createCompilerError(27 /* X_V_IF_NO_EXPRESSION */, dir.loc));\r\n        dir.exp = createSimpleExpression(`true`, false, loc);\r\n    }\r\n    if ((process.env.NODE_ENV !== 'production') && true && dir.exp) {\r\n        validateBrowserExpression(dir.exp, context);\r\n    }\r\n    if (dir.name === 'if') {\r\n        const branch = createIfBranch(node, dir);\r\n        const ifNode = {\r\n            type: 9 /* IF */,\r\n            loc: node.loc,\r\n            branches: [branch]\r\n        };\r\n        context.replaceNode(ifNode);\r\n        if (processCodegen) {\r\n            return processCodegen(ifNode, branch, true);\r\n        }\r\n    }\r\n    else {\r\n        // locate the adjacent v-if\r\n        const siblings = context.parent.children;\r\n        const comments = [];\r\n        let i = siblings.indexOf(node);\r\n        while (i-- >= -1) {\r\n            const sibling = siblings[i];\r\n            if ((process.env.NODE_ENV !== 'production') && sibling && sibling.type === 3 /* COMMENT */) {\r\n                context.removeNode(sibling);\r\n                comments.unshift(sibling);\r\n                continue;\r\n            }\r\n            if (sibling &&\r\n                sibling.type === 2 /* TEXT */ &&\r\n                !sibling.content.trim().length) {\r\n                context.removeNode(sibling);\r\n                continue;\r\n            }\r\n            if (sibling && sibling.type === 9 /* IF */) {\r\n                // move the node to the if node's branches\r\n                context.removeNode();\r\n                const branch = createIfBranch(node, dir);\r\n                if ((process.env.NODE_ENV !== 'production') &&\r\n                    comments.length &&\r\n                    // #3619 ignore comments if the v-if is direct child of <transition>\r\n                    !(context.parent &&\r\n                        context.parent.type === 1 /* ELEMENT */ &&\r\n                        isBuiltInType(context.parent.tag, 'transition'))) {\r\n                    branch.children = [...comments, ...branch.children];\r\n                }\r\n                // check if user is forcing same key on different branches\r\n                if ((process.env.NODE_ENV !== 'production') || !true) {\r\n                    const key = branch.userKey;\r\n                    if (key) {\r\n                        sibling.branches.forEach(({ userKey }) => {\r\n                            if (isSameKey(userKey, key)) {\r\n                                context.onError(createCompilerError(28 /* X_V_IF_SAME_KEY */, branch.userKey.loc));\r\n                            }\r\n                        });\r\n                    }\r\n                }\r\n                sibling.branches.push(branch);\r\n                const onExit = processCodegen && processCodegen(sibling, branch, false);\r\n                // since the branch was removed, it will not be traversed.\r\n                // make sure to traverse here.\r\n                traverseNode(branch, context);\r\n                // call on exit\r\n                if (onExit)\r\n                    onExit();\r\n                // make sure to reset currentNode after traversal to indicate this\r\n                // node has been removed.\r\n                context.currentNode = null;\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));\r\n            }\r\n            break;\r\n        }\r\n    }\r\n}\r\nfunction createIfBranch(node, dir) {\r\n    return {\r\n        type: 10 /* IF_BRANCH */,\r\n        loc: node.loc,\r\n        condition: dir.name === 'else' ? undefined : dir.exp,\r\n        children: node.tagType === 3 /* TEMPLATE */ && !findDir(node, 'for')\r\n            ? node.children\r\n            : [node],\r\n        userKey: findProp(node, `key`)\r\n    };\r\n}\r\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\r\n    if (branch.condition) {\r\n        return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \r\n        // make sure to pass in asBlock: true so that the comment node call\r\n        // closes the current block.\r\n        createCallExpression(context.helper(CREATE_COMMENT), [\r\n            (process.env.NODE_ENV !== 'production') ? '\"v-if\"' : '\"\"',\r\n            'true'\r\n        ]));\r\n    }\r\n    else {\r\n        return createChildrenCodegenNode(branch, keyIndex, context);\r\n    }\r\n}\r\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\r\n    const { helper } = context;\r\n    const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* CAN_HOIST */));\r\n    const { children } = branch;\r\n    const firstChild = children[0];\r\n    const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;\r\n    if (needFragmentWrapper) {\r\n        if (children.length === 1 && firstChild.type === 11 /* FOR */) {\r\n            // optimize away nested fragments when child is a ForNode\r\n            const vnodeCall = firstChild.codegenNode;\r\n            injectProp(vnodeCall, keyProperty, context);\r\n            return vnodeCall;\r\n        }\r\n        else {\r\n            let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n            let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n            // check if the fragment actually contains a single valid child with\r\n            // the rest being comments\r\n            if ((process.env.NODE_ENV !== 'production') &&\r\n                children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n                patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n                patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n            }\r\n            return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, false, false /* isComponent */, branch.loc);\r\n        }\r\n    }\r\n    else {\r\n        const ret = firstChild.codegenNode;\r\n        const vnodeCall = getMemoedVNodeCall(ret);\r\n        // Change createVNode to createBlock.\r\n        if (vnodeCall.type === 13 /* VNODE_CALL */) {\r\n            makeBlock(vnodeCall, context);\r\n        }\r\n        // inject branch key\r\n        injectProp(vnodeCall, keyProperty, context);\r\n        return ret;\r\n    }\r\n}\r\nfunction isSameKey(a, b) {\r\n    if (!a || a.type !== b.type) {\r\n        return false;\r\n    }\r\n    if (a.type === 6 /* ATTRIBUTE */) {\r\n        if (a.value.content !== b.value.content) {\r\n            return false;\r\n        }\r\n    }\r\n    else {\r\n        // directive\r\n        const exp = a.exp;\r\n        const branchExp = b.exp;\r\n        if (exp.type !== branchExp.type) {\r\n            return false;\r\n        }\r\n        if (exp.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n            exp.isStatic !== branchExp.isStatic ||\r\n            exp.content !== branchExp.content) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction getParentCondition(node) {\r\n    while (true) {\r\n        if (node.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n            if (node.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                node = node.alternate;\r\n            }\r\n            else {\r\n                return node;\r\n            }\r\n        }\r\n        else if (node.type === 20 /* JS_CACHE_EXPRESSION */) {\r\n            node = node.value;\r\n        }\r\n    }\r\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\r\n    const { helper, removeHelper } = context;\r\n    return processFor(node, dir, context, forNode => {\r\n        // create the loop render function expression now, and add the\r\n        // iterator on exit after all children have been traversed\r\n        const renderExp = createCallExpression(helper(RENDER_LIST), [\r\n            forNode.source\r\n        ]);\r\n        const memo = findDir(node, 'memo');\r\n        const keyProp = findProp(node, `key`);\r\n        const keyExp = keyProp &&\r\n            (keyProp.type === 6 /* ATTRIBUTE */\r\n                ? createSimpleExpression(keyProp.value.content, true)\r\n                : keyProp.exp);\r\n        const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\r\n        const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n            forNode.source.constType > 0 /* NOT_CONSTANT */;\r\n        const fragmentFlag = isStableFragment\r\n            ? 64 /* STABLE_FRAGMENT */\r\n            : keyProp\r\n                ? 128 /* KEYED_FRAGMENT */\r\n                : 256 /* UNKEYED_FRAGMENT */;\r\n        forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\r\n            ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[fragmentFlag]} */` : ``), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\r\n        return () => {\r\n            // finish the codegen now that all children have been traversed\r\n            let childBlock;\r\n            const isTemplate = isTemplateNode(node);\r\n            const { children } = forNode;\r\n            // check <template v-for> key placement\r\n            if (((process.env.NODE_ENV !== 'production') || !true) && isTemplate) {\r\n                node.children.some(c => {\r\n                    if (c.type === 1 /* ELEMENT */) {\r\n                        const key = findProp(c, 'key');\r\n                        if (key) {\r\n                            context.onError(createCompilerError(32 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\r\n                            return true;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;\r\n            const slotOutlet = isSlotOutlet(node)\r\n                ? node\r\n                : isTemplate &&\r\n                    node.children.length === 1 &&\r\n                    isSlotOutlet(node.children[0])\r\n                    ? node.children[0] // api-extractor somehow fails to infer this\r\n                    : null;\r\n            if (slotOutlet) {\r\n                // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\r\n                childBlock = slotOutlet.codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    // <template v-for=\"...\" :key=\"...\"><slot/></template>\r\n                    // we need to inject the key to the renderSlot() call.\r\n                    // the props for renderSlot is passed as the 3rd argument.\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n            }\r\n            else if (needFragmentWrapper) {\r\n                // <template v-for=\"...\"> with text or multi-elements\r\n                // should generate a fragment block for each loop\r\n                childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* STABLE_FRAGMENT */ +\r\n                    ((process.env.NODE_ENV !== 'production')\r\n                        ? ` /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`\r\n                        : ``), undefined, undefined, true, undefined, false /* isComponent */);\r\n            }\r\n            else {\r\n                // Normal element v-for. Directly use the child's codegenNode\r\n                // but mark it as a block.\r\n                childBlock = children[0]\r\n                    .codegenNode;\r\n                if (isTemplate && keyProperty) {\r\n                    injectProp(childBlock, keyProperty, context);\r\n                }\r\n                if (childBlock.isBlock !== !isStableFragment) {\r\n                    if (childBlock.isBlock) {\r\n                        // switch from block to vnode\r\n                        removeHelper(OPEN_BLOCK);\r\n                        removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                    else {\r\n                        // switch from vnode to block\r\n                        removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                    }\r\n                }\r\n                childBlock.isBlock = !isStableFragment;\r\n                if (childBlock.isBlock) {\r\n                    helper(OPEN_BLOCK);\r\n                    helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n                else {\r\n                    helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n                }\r\n            }\r\n            if (memo) {\r\n                const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\r\n                    createSimpleExpression(`_cached`)\r\n                ]));\r\n                loop.body = createBlockStatement([\r\n                    createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\r\n                    createCompoundExpression([\r\n                        `if (_cached`,\r\n                        ...(keyExp ? [` && _cached.key === `, keyExp] : []),\r\n                        ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\r\n                    ]),\r\n                    createCompoundExpression([`const _item = `, childBlock]),\r\n                    createSimpleExpression(`_item.memo = _memo`),\r\n                    createSimpleExpression(`return _item`)\r\n                ]);\r\n                renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\r\n            }\r\n            else {\r\n                renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\r\n            }\r\n        };\r\n    });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processFor(node, dir, context, processCodegen) {\r\n    if (!dir.exp) {\r\n        context.onError(createCompilerError(30 /* X_V_FOR_NO_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const parseResult = parseForExpression(\r\n    // can only be simple expression because vFor transform is applied\r\n    // before expression transform.\r\n    dir.exp, context);\r\n    if (!parseResult) {\r\n        context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\r\n        return;\r\n    }\r\n    const { addIdentifiers, removeIdentifiers, scopes } = context;\r\n    const { source, value, key, index } = parseResult;\r\n    const forNode = {\r\n        type: 11 /* FOR */,\r\n        loc: dir.loc,\r\n        source,\r\n        valueAlias: value,\r\n        keyAlias: key,\r\n        objectIndexAlias: index,\r\n        parseResult,\r\n        children: isTemplateNode(node) ? node.children : [node]\r\n    };\r\n    context.replaceNode(forNode);\r\n    // bookkeeping\r\n    scopes.vFor++;\r\n    const onExit = processCodegen && processCodegen(forNode);\r\n    return () => {\r\n        scopes.vFor--;\r\n        if (onExit)\r\n            onExit();\r\n    };\r\n}\r\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\r\n// This regex doesn't cover the case if key or index aliases have destructuring,\r\n// but those do not make sense in the first place, so this works in practice.\r\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\r\nconst stripParensRE = /^\\(|\\)$/g;\r\nfunction parseForExpression(input, context) {\r\n    const loc = input.loc;\r\n    const exp = input.content;\r\n    const inMatch = exp.match(forAliasRE);\r\n    if (!inMatch)\r\n        return;\r\n    const [, LHS, RHS] = inMatch;\r\n    const result = {\r\n        source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\r\n        value: undefined,\r\n        key: undefined,\r\n        index: undefined\r\n    };\r\n    if ((process.env.NODE_ENV !== 'production') && true) {\r\n        validateBrowserExpression(result.source, context);\r\n    }\r\n    let valueContent = LHS.trim().replace(stripParensRE, '').trim();\r\n    const trimmedOffset = LHS.indexOf(valueContent);\r\n    const iteratorMatch = valueContent.match(forIteratorRE);\r\n    if (iteratorMatch) {\r\n        valueContent = valueContent.replace(forIteratorRE, '').trim();\r\n        const keyContent = iteratorMatch[1].trim();\r\n        let keyOffset;\r\n        if (keyContent) {\r\n            keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\r\n            result.key = createAliasExpression(loc, keyContent, keyOffset);\r\n            if ((process.env.NODE_ENV !== 'production') && true) {\r\n                validateBrowserExpression(result.key, context, true);\r\n            }\r\n        }\r\n        if (iteratorMatch[2]) {\r\n            const indexContent = iteratorMatch[2].trim();\r\n            if (indexContent) {\r\n                result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\r\n                    ? keyOffset + keyContent.length\r\n                    : trimmedOffset + valueContent.length));\r\n                if ((process.env.NODE_ENV !== 'production') && true) {\r\n                    validateBrowserExpression(result.index, context, true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (valueContent) {\r\n        result.value = createAliasExpression(loc, valueContent, trimmedOffset);\r\n        if ((process.env.NODE_ENV !== 'production') && true) {\r\n            validateBrowserExpression(result.value, context, true);\r\n        }\r\n    }\r\n    return result;\r\n}\r\nfunction createAliasExpression(range, content, offset) {\r\n    return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\r\n}\r\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\r\n    return createParamsList([value, key, index, ...memoArgs]);\r\n}\r\nfunction createParamsList(args) {\r\n    let i = args.length;\r\n    while (i--) {\r\n        if (args[i])\r\n            break;\r\n    }\r\n    return args\r\n        .slice(0, i + 1)\r\n        .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\r\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\r\n// A NodeTransform that:\r\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\r\n//    by transformExpression. This is only applied in non-browser builds with\r\n//    { prefixIdentifiers: true }.\r\n// 2. Track v-slot depths so that we know a slot is inside another slot.\r\n//    Note the exit callback is executed before buildSlots() on the same node,\r\n//    so only nested slots see positive numbers.\r\nconst trackSlotScopes = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        (node.tagType === 1 /* COMPONENT */ ||\r\n            node.tagType === 3 /* TEMPLATE */)) {\r\n        // We are only checking non-empty v-slot here\r\n        // since we only care about slots that introduce scope variables.\r\n        const vSlot = findDir(node, 'slot');\r\n        if (vSlot) {\r\n            vSlot.exp;\r\n            context.scopes.vSlot++;\r\n            return () => {\r\n                context.scopes.vSlot--;\r\n            };\r\n        }\r\n    }\r\n};\r\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\r\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\r\nconst trackVForSlotScopes = (node, context) => {\r\n    let vFor;\r\n    if (isTemplateNode(node) &&\r\n        node.props.some(isVSlot) &&\r\n        (vFor = findDir(node, 'for'))) {\r\n        const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\r\n        if (result) {\r\n            const { value, key, index } = result;\r\n            const { addIdentifiers, removeIdentifiers } = context;\r\n            value && addIdentifiers(value);\r\n            key && addIdentifiers(key);\r\n            index && addIdentifiers(index);\r\n            return () => {\r\n                value && removeIdentifiers(value);\r\n                key && removeIdentifiers(key);\r\n                index && removeIdentifiers(index);\r\n            };\r\n        }\r\n    }\r\n};\r\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\r\n// Instead of being a DirectiveTransform, v-slot processing is called during\r\n// transformElement to build the slots object for a component.\r\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\r\n    context.helper(WITH_CTX);\r\n    const { children, loc } = node;\r\n    const slotsProperties = [];\r\n    const dynamicSlots = [];\r\n    // If the slot is inside a v-for or another v-slot, force it to be dynamic\r\n    // since it likely uses a scope variable.\r\n    let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\r\n    // 1. Check for slot with slotProps on component itself.\r\n    //    <Comp v-slot=\"{ prop }\"/>\r\n    const onComponentSlot = findDir(node, 'slot', true);\r\n    if (onComponentSlot) {\r\n        const { arg, exp } = onComponentSlot;\r\n        if (arg && !isStaticExp(arg)) {\r\n            hasDynamicSlots = true;\r\n        }\r\n        slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\r\n    }\r\n    // 2. Iterate through children and check for template slots\r\n    //    <template v-slot:foo=\"{ prop }\">\r\n    let hasTemplateSlots = false;\r\n    let hasNamedDefaultSlot = false;\r\n    const implicitDefaultChildren = [];\r\n    const seenSlotNames = new Set();\r\n    for (let i = 0; i < children.length; i++) {\r\n        const slotElement = children[i];\r\n        let slotDir;\r\n        if (!isTemplateNode(slotElement) ||\r\n            !(slotDir = findDir(slotElement, 'slot', true))) {\r\n            // not a <template v-slot>, skip.\r\n            if (slotElement.type !== 3 /* COMMENT */) {\r\n                implicitDefaultChildren.push(slotElement);\r\n            }\r\n            continue;\r\n        }\r\n        if (onComponentSlot) {\r\n            // already has on-component slot - this is incorrect usage.\r\n            context.onError(createCompilerError(36 /* X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\r\n            break;\r\n        }\r\n        hasTemplateSlots = true;\r\n        const { children: slotChildren, loc: slotLoc } = slotElement;\r\n        const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\r\n        // check if name is dynamic.\r\n        let staticSlotName;\r\n        if (isStaticExp(slotName)) {\r\n            staticSlotName = slotName ? slotName.content : `default`;\r\n        }\r\n        else {\r\n            hasDynamicSlots = true;\r\n        }\r\n        const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\r\n        // check if this slot is conditional (v-if/v-for)\r\n        let vIf;\r\n        let vElse;\r\n        let vFor;\r\n        if ((vIf = findDir(slotElement, 'if'))) {\r\n            hasDynamicSlots = true;\r\n            dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback));\r\n        }\r\n        else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\r\n            // find adjacent v-if\r\n            let j = i;\r\n            let prev;\r\n            while (j--) {\r\n                prev = children[j];\r\n                if (prev.type !== 3 /* COMMENT */) {\r\n                    break;\r\n                }\r\n            }\r\n            if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\r\n                // remove node\r\n                children.splice(i, 1);\r\n                i--;\r\n                // attach this slot to previous conditional\r\n                let conditional = dynamicSlots[dynamicSlots.length - 1];\r\n                while (conditional.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n                    conditional = conditional.alternate;\r\n                }\r\n                conditional.alternate = vElse.exp\r\n                    ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback)\r\n                    : buildDynamicSlot(slotName, slotFunction);\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(29 /* X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\r\n            }\r\n        }\r\n        else if ((vFor = findDir(slotElement, 'for'))) {\r\n            hasDynamicSlots = true;\r\n            const parseResult = vFor.parseResult ||\r\n                parseForExpression(vFor.exp, context);\r\n            if (parseResult) {\r\n                // Render the dynamic slots as an array and add it to the createSlot()\r\n                // args. The runtime knows how to handle it appropriately.\r\n                dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\r\n                    parseResult.source,\r\n                    createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\r\n                ]));\r\n            }\r\n            else {\r\n                context.onError(createCompilerError(31 /* X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\r\n            }\r\n        }\r\n        else {\r\n            // check duplicate static names\r\n            if (staticSlotName) {\r\n                if (seenSlotNames.has(staticSlotName)) {\r\n                    context.onError(createCompilerError(37 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\r\n                    continue;\r\n                }\r\n                seenSlotNames.add(staticSlotName);\r\n                if (staticSlotName === 'default') {\r\n                    hasNamedDefaultSlot = true;\r\n                }\r\n            }\r\n            slotsProperties.push(createObjectProperty(slotName, slotFunction));\r\n        }\r\n    }\r\n    if (!onComponentSlot) {\r\n        const buildDefaultSlotProperty = (props, children) => {\r\n            const fn = buildSlotFn(props, children, loc);\r\n            if (context.compatConfig) {\r\n                fn.isNonScopedSlot = true;\r\n            }\r\n            return createObjectProperty(`default`, fn);\r\n        };\r\n        if (!hasTemplateSlots) {\r\n            // implicit default slot (on component)\r\n            slotsProperties.push(buildDefaultSlotProperty(undefined, children));\r\n        }\r\n        else if (implicitDefaultChildren.length &&\r\n            // #3766\r\n            // with whitespace: 'preserve', whitespaces between slots will end up in\r\n            // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\r\n            implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\r\n            // implicit default slot (mixed with named slots)\r\n            if (hasNamedDefaultSlot) {\r\n                context.onError(createCompilerError(38 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\r\n            }\r\n            else {\r\n                slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\r\n            }\r\n        }\r\n    }\r\n    const slotFlag = hasDynamicSlots\r\n        ? 2 /* DYNAMIC */\r\n        : hasForwardedSlots(node.children)\r\n            ? 3 /* FORWARDED */\r\n            : 1 /* STABLE */;\r\n    let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \r\n    // 2 = compiled but dynamic = can skip normalization, but must run diff\r\n    // 1 = compiled and static = can skip normalization AND diff as optimized\r\n    createSimpleExpression(slotFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${slotFlagsText[slotFlag]} */` : ``), false))), loc);\r\n    if (dynamicSlots.length) {\r\n        slots = createCallExpression(context.helper(CREATE_SLOTS), [\r\n            slots,\r\n            createArrayExpression(dynamicSlots)\r\n        ]);\r\n    }\r\n    return {\r\n        slots,\r\n        hasDynamicSlots\r\n    };\r\n}\r\nfunction buildDynamicSlot(name, fn) {\r\n    return createObjectExpression([\r\n        createObjectProperty(`name`, name),\r\n        createObjectProperty(`fn`, fn)\r\n    ]);\r\n}\r\nfunction hasForwardedSlots(children) {\r\n    for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n        switch (child.type) {\r\n            case 1 /* ELEMENT */:\r\n                if (child.tagType === 2 /* SLOT */ ||\r\n                    hasForwardedSlots(child.children)) {\r\n                    return true;\r\n                }\r\n                break;\r\n            case 9 /* IF */:\r\n                if (hasForwardedSlots(child.branches))\r\n                    return true;\r\n                break;\r\n            case 10 /* IF_BRANCH */:\r\n            case 11 /* FOR */:\r\n                if (hasForwardedSlots(child.children))\r\n                    return true;\r\n                break;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction isNonWhitespaceContent(node) {\r\n    if (node.type !== 2 /* TEXT */ && node.type !== 12 /* TEXT_CALL */)\r\n        return true;\r\n    return node.type === 2 /* TEXT */\r\n        ? !!node.content.trim()\r\n        : isNonWhitespaceContent(node.content);\r\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\r\n// import, which should be used instead of a resolveDirective call.\r\nconst directiveImportMap = new WeakMap();\r\n// generate a JavaScript AST for this element's codegen\r\nconst transformElement = (node, context) => {\r\n    // perform the work on exit, after all child expressions have been\r\n    // processed and merged.\r\n    return function postTransformElement() {\r\n        node = context.currentNode;\r\n        if (!(node.type === 1 /* ELEMENT */ &&\r\n            (node.tagType === 0 /* ELEMENT */ ||\r\n                node.tagType === 1 /* COMPONENT */))) {\r\n            return;\r\n        }\r\n        const { tag, props } = node;\r\n        const isComponent = node.tagType === 1 /* COMPONENT */;\r\n        // The goal of the transform is to create a codegenNode implementing the\r\n        // VNodeCall interface.\r\n        let vnodeTag = isComponent\r\n            ? resolveComponentType(node, context)\r\n            : `\"${tag}\"`;\r\n        const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\r\n        let vnodeProps;\r\n        let vnodeChildren;\r\n        let vnodePatchFlag;\r\n        let patchFlag = 0;\r\n        let vnodeDynamicProps;\r\n        let dynamicPropNames;\r\n        let vnodeDirectives;\r\n        let shouldUseBlock = \r\n        // dynamic component may resolve to plain elements\r\n        isDynamicComponent ||\r\n            vnodeTag === TELEPORT ||\r\n            vnodeTag === SUSPENSE ||\r\n            (!isComponent &&\r\n                // <svg> and <foreignObject> must be forced into blocks so that block\r\n                // updates inside get proper isSVG flag at runtime. (#639, #643)\r\n                // This is technically web-specific, but splitting the logic out of core\r\n                // leads to too much unnecessary complexity.\r\n                (tag === 'svg' ||\r\n                    tag === 'foreignObject' ||\r\n                    // #938: elements with dynamic keys should be forced into blocks\r\n                    findProp(node, 'key', true)));\r\n        // props\r\n        if (props.length > 0) {\r\n            const propsBuildResult = buildProps(node, context);\r\n            vnodeProps = propsBuildResult.props;\r\n            patchFlag = propsBuildResult.patchFlag;\r\n            dynamicPropNames = propsBuildResult.dynamicPropNames;\r\n            const directives = propsBuildResult.directives;\r\n            vnodeDirectives =\r\n                directives && directives.length\r\n                    ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\r\n                    : undefined;\r\n        }\r\n        // children\r\n        if (node.children.length > 0) {\r\n            if (vnodeTag === KEEP_ALIVE) {\r\n                // Although a built-in component, we compile KeepAlive with raw children\r\n                // instead of slot functions so that it can be used inside Transition\r\n                // or other Transition-wrapping HOCs.\r\n                // To ensure correct updates with block optimizations, we need to:\r\n                // 1. Force keep-alive into a block. This avoids its children being\r\n                //    collected by a parent block.\r\n                shouldUseBlock = true;\r\n                // 2. Force keep-alive to always be updated, since it uses raw children.\r\n                patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                if ((process.env.NODE_ENV !== 'production') && node.children.length > 1) {\r\n                    context.onError(createCompilerError(44 /* X_KEEP_ALIVE_INVALID_CHILDREN */, {\r\n                        start: node.children[0].loc.start,\r\n                        end: node.children[node.children.length - 1].loc.end,\r\n                        source: ''\r\n                    }));\r\n                }\r\n            }\r\n            const shouldBuildAsSlots = isComponent &&\r\n                // Teleport is not a real component and has dedicated runtime handling\r\n                vnodeTag !== TELEPORT &&\r\n                // explained above.\r\n                vnodeTag !== KEEP_ALIVE;\r\n            if (shouldBuildAsSlots) {\r\n                const { slots, hasDynamicSlots } = buildSlots(node, context);\r\n                vnodeChildren = slots;\r\n                if (hasDynamicSlots) {\r\n                    patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n                }\r\n            }\r\n            else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\r\n                const child = node.children[0];\r\n                const type = child.type;\r\n                // check for dynamic text children\r\n                const hasDynamicTextChild = type === 5 /* INTERPOLATION */ ||\r\n                    type === 8 /* COMPOUND_EXPRESSION */;\r\n                if (hasDynamicTextChild &&\r\n                    getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                    patchFlag |= 1 /* TEXT */;\r\n                }\r\n                // pass directly if the only child is a text node\r\n                // (plain / interpolation / expression)\r\n                if (hasDynamicTextChild || type === 2 /* TEXT */) {\r\n                    vnodeChildren = child;\r\n                }\r\n                else {\r\n                    vnodeChildren = node.children;\r\n                }\r\n            }\r\n            else {\r\n                vnodeChildren = node.children;\r\n            }\r\n        }\r\n        // patchFlag & dynamicPropNames\r\n        if (patchFlag !== 0) {\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                if (patchFlag < 0) {\r\n                    // special flags (negative and mutually exclusive)\r\n                    vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\r\n                }\r\n                else {\r\n                    // bitwise flags\r\n                    const flagNames = Object.keys(PatchFlagNames)\r\n                        .map(Number)\r\n                        .filter(n => n > 0 && patchFlag & n)\r\n                        .map(n => PatchFlagNames[n])\r\n                        .join(`, `);\r\n                    vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\r\n                }\r\n            }\r\n            else {\r\n                vnodePatchFlag = String(patchFlag);\r\n            }\r\n            if (dynamicPropNames && dynamicPropNames.length) {\r\n                vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\r\n            }\r\n        }\r\n        node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\r\n    };\r\n};\r\nfunction resolveComponentType(node, context, ssr = false) {\r\n    let { tag } = node;\r\n    // 1. dynamic component\r\n    const isExplicitDynamic = isComponentTag(tag);\r\n    const isProp = findProp(node, 'is');\r\n    if (isProp) {\r\n        if (isExplicitDynamic ||\r\n            (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))) {\r\n            const exp = isProp.type === 6 /* ATTRIBUTE */\r\n                ? isProp.value && createSimpleExpression(isProp.value.content, true)\r\n                : isProp.exp;\r\n            if (exp) {\r\n                return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n                    exp\r\n                ]);\r\n            }\r\n        }\r\n        else if (isProp.type === 6 /* ATTRIBUTE */ &&\r\n            isProp.value.content.startsWith('vue:')) {\r\n            // <button is=\"vue:xxx\">\r\n            // if not <component>, only is value that starts with \"vue:\" will be\r\n            // treated as component by the parse phase and reach here, unless it's\r\n            // compat mode where all is values are considered components\r\n            tag = isProp.value.content.slice(4);\r\n        }\r\n    }\r\n    // 1.5 v-is (TODO: Deprecate)\r\n    const isDir = !isExplicitDynamic && findDir(node, 'is');\r\n    if (isDir && isDir.exp) {\r\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n            isDir.exp\r\n        ]);\r\n    }\r\n    // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\r\n    const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\r\n    if (builtIn) {\r\n        // built-ins are simply fallthroughs / have special handling during ssr\r\n        // so we don't need to import their runtime equivalents\r\n        if (!ssr)\r\n            context.helper(builtIn);\r\n        return builtIn;\r\n    }\r\n    // 5. user component (resolve)\r\n    context.helper(RESOLVE_COMPONENT);\r\n    context.components.add(tag);\r\n    return toValidAssetId(tag, `component`);\r\n}\r\nfunction buildProps(node, context, props = node.props, ssr = false) {\r\n    const { tag, loc: elementLoc } = node;\r\n    const isComponent = node.tagType === 1 /* COMPONENT */;\r\n    let properties = [];\r\n    const mergeArgs = [];\r\n    const runtimeDirectives = [];\r\n    // patchFlag analysis\r\n    let patchFlag = 0;\r\n    let hasRef = false;\r\n    let hasClassBinding = false;\r\n    let hasStyleBinding = false;\r\n    let hasHydrationEventBinding = false;\r\n    let hasDynamicKeys = false;\r\n    let hasVnodeHook = false;\r\n    const dynamicPropNames = [];\r\n    const analyzePatchFlag = ({ key, value }) => {\r\n        if (isStaticExp(key)) {\r\n            const name = key.content;\r\n            const isEventHandler = isOn(name);\r\n            if (!isComponent &&\r\n                isEventHandler &&\r\n                // omit the flag for click handlers because hydration gives click\r\n                // dedicated fast path.\r\n                name.toLowerCase() !== 'onclick' &&\r\n                // omit v-model handlers\r\n                name !== 'onUpdate:modelValue' &&\r\n                // omit onVnodeXXX hooks\r\n                !isReservedProp(name)) {\r\n                hasHydrationEventBinding = true;\r\n            }\r\n            if (isEventHandler && isReservedProp(name)) {\r\n                hasVnodeHook = true;\r\n            }\r\n            if (value.type === 20 /* JS_CACHE_EXPRESSION */ ||\r\n                ((value.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n                    value.type === 8 /* COMPOUND_EXPRESSION */) &&\r\n                    getConstantType(value, context) > 0)) {\r\n                // skip if the prop is a cached handler or has constant value\r\n                return;\r\n            }\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n            }\r\n            else if (name === 'class') {\r\n                hasClassBinding = true;\r\n            }\r\n            else if (name === 'style') {\r\n                hasStyleBinding = true;\r\n            }\r\n            else if (name !== 'key' && !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n            // treat the dynamic class and style binding of the component as dynamic props\r\n            if (isComponent &&\r\n                (name === 'class' || name === 'style') &&\r\n                !dynamicPropNames.includes(name)) {\r\n                dynamicPropNames.push(name);\r\n            }\r\n        }\r\n        else {\r\n            hasDynamicKeys = true;\r\n        }\r\n    };\r\n    for (let i = 0; i < props.length; i++) {\r\n        // static attribute\r\n        const prop = props[i];\r\n        if (prop.type === 6 /* ATTRIBUTE */) {\r\n            const { loc, name, value } = prop;\r\n            let isStatic = true;\r\n            if (name === 'ref') {\r\n                hasRef = true;\r\n            }\r\n            // skip is on <component>, or is=\"vue:xxx\"\r\n            if (name === 'is' &&\r\n                (isComponentTag(tag) ||\r\n                    (value && value.content.startsWith('vue:')) ||\r\n                    (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context)))) {\r\n                continue;\r\n            }\r\n            properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\r\n        }\r\n        else {\r\n            // directives\r\n            const { name, arg, exp, loc } = prop;\r\n            const isVBind = name === 'bind';\r\n            const isVOn = name === 'on';\r\n            // skip v-slot - it is handled by its dedicated transform.\r\n            if (name === 'slot') {\r\n                if (!isComponent) {\r\n                    context.onError(createCompilerError(39 /* X_V_SLOT_MISPLACED */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            // skip v-once/v-memo - they are handled by dedicated transforms.\r\n            if (name === 'once' || name === 'memo') {\r\n                continue;\r\n            }\r\n            // skip v-is and :is on <component>\r\n            if (name === 'is' ||\r\n                (isVBind &&\r\n                    isBindKey(arg, 'is') &&\r\n                    (isComponentTag(tag) ||\r\n                        (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))))) {\r\n                continue;\r\n            }\r\n            // skip v-on in SSR compilation\r\n            if (isVOn && ssr) {\r\n                continue;\r\n            }\r\n            // special case for v-bind and v-on with no argument\r\n            if (!arg && (isVBind || isVOn)) {\r\n                hasDynamicKeys = true;\r\n                if (exp) {\r\n                    if (properties.length) {\r\n                        mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n                        properties = [];\r\n                    }\r\n                    if (isVBind) {\r\n                        {\r\n                            // 2.x v-bind object order compat\r\n                            if ((process.env.NODE_ENV !== 'production')) {\r\n                                const hasOverridableKeys = mergeArgs.some(arg => {\r\n                                    if (arg.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n                                        return arg.properties.some(({ key }) => {\r\n                                            if (key.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n                                                !key.isStatic) {\r\n                                                return true;\r\n                                            }\r\n                                            return (key.content !== 'class' &&\r\n                                                key.content !== 'style' &&\r\n                                                !isOn(key.content));\r\n                                        });\r\n                                    }\r\n                                    else {\r\n                                        // dynamic expression\r\n                                        return true;\r\n                                    }\r\n                                });\r\n                                if (hasOverridableKeys) {\r\n                                    checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\r\n                                }\r\n                            }\r\n                            if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context)) {\r\n                                mergeArgs.unshift(exp);\r\n                                continue;\r\n                            }\r\n                        }\r\n                        mergeArgs.push(exp);\r\n                    }\r\n                    else {\r\n                        // v-on=\"obj\" -> toHandlers(obj)\r\n                        mergeArgs.push({\r\n                            type: 14 /* JS_CALL_EXPRESSION */,\r\n                            loc,\r\n                            callee: context.helper(TO_HANDLERS),\r\n                            arguments: [exp]\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    context.onError(createCompilerError(isVBind\r\n                        ? 33 /* X_V_BIND_NO_EXPRESSION */\r\n                        : 34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n                }\r\n                continue;\r\n            }\r\n            const directiveTransform = context.directiveTransforms[name];\r\n            if (directiveTransform) {\r\n                // has built-in directive transform.\r\n                const { props, needRuntime } = directiveTransform(prop, node, context);\r\n                !ssr && props.forEach(analyzePatchFlag);\r\n                properties.push(...props);\r\n                if (needRuntime) {\r\n                    runtimeDirectives.push(prop);\r\n                    if (isSymbol(needRuntime)) {\r\n                        directiveImportMap.set(prop, needRuntime);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                // no built-in transform, this is a user custom directive.\r\n                runtimeDirectives.push(prop);\r\n            }\r\n        }\r\n        if (prop.type === 6 /* ATTRIBUTE */ &&\r\n            prop.name === 'ref' &&\r\n            context.scopes.vFor > 0 &&\r\n            checkCompatEnabled(\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */, context, prop.loc)) {\r\n            properties.push(createObjectProperty(createSimpleExpression('refInFor', true), createSimpleExpression('true', false)));\r\n        }\r\n    }\r\n    let propsExpression = undefined;\r\n    // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\r\n    if (mergeArgs.length) {\r\n        if (properties.length) {\r\n            mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n        }\r\n        if (mergeArgs.length > 1) {\r\n            propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\r\n        }\r\n        else {\r\n            // single v-bind with nothing else - no need for a mergeProps call\r\n            propsExpression = mergeArgs[0];\r\n        }\r\n    }\r\n    else if (properties.length) {\r\n        propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\r\n    }\r\n    // patchFlag analysis\r\n    if (hasDynamicKeys) {\r\n        patchFlag |= 16 /* FULL_PROPS */;\r\n    }\r\n    else {\r\n        if (hasClassBinding && !isComponent) {\r\n            patchFlag |= 2 /* CLASS */;\r\n        }\r\n        if (hasStyleBinding && !isComponent) {\r\n            patchFlag |= 4 /* STYLE */;\r\n        }\r\n        if (dynamicPropNames.length) {\r\n            patchFlag |= 8 /* PROPS */;\r\n        }\r\n        if (hasHydrationEventBinding) {\r\n            patchFlag |= 32 /* HYDRATE_EVENTS */;\r\n        }\r\n    }\r\n    if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */) &&\r\n        (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\r\n        patchFlag |= 512 /* NEED_PATCH */;\r\n    }\r\n    // pre-normalize props, SSR is skipped for now\r\n    if (!context.inSSR && propsExpression) {\r\n        switch (propsExpression.type) {\r\n            case 15 /* JS_OBJECT_EXPRESSION */:\r\n                // means that there is no v-bind,\r\n                // but still need to deal with dynamic key binding\r\n                let classKeyIndex = -1;\r\n                let styleKeyIndex = -1;\r\n                let hasDynamicKey = false;\r\n                for (let i = 0; i < propsExpression.properties.length; i++) {\r\n                    const key = propsExpression.properties[i].key;\r\n                    if (isStaticExp(key)) {\r\n                        if (key.content === 'class') {\r\n                            classKeyIndex = i;\r\n                        }\r\n                        else if (key.content === 'style') {\r\n                            styleKeyIndex = i;\r\n                        }\r\n                    }\r\n                    else if (!key.isHandlerKey) {\r\n                        hasDynamicKey = true;\r\n                    }\r\n                }\r\n                const classProp = propsExpression.properties[classKeyIndex];\r\n                const styleProp = propsExpression.properties[styleKeyIndex];\r\n                // no dynamic key\r\n                if (!hasDynamicKey) {\r\n                    if (classProp && !isStaticExp(classProp.value)) {\r\n                        classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\r\n                    }\r\n                    if (styleProp &&\r\n                        !isStaticExp(styleProp.value) &&\r\n                        // the static style is compiled into an object,\r\n                        // so use `hasStyleBinding` to ensure that it is a dynamic style binding\r\n                        hasStyleBinding) {\r\n                        styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\r\n                    }\r\n                }\r\n                else {\r\n                    // dynamic key binding, wrap with `normalizeProps`\r\n                    propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\r\n                }\r\n                break;\r\n            case 14 /* JS_CALL_EXPRESSION */:\r\n                // mergeProps call, do nothing\r\n                break;\r\n            default:\r\n                // single v-bind\r\n                propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\r\n                    createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\r\n                        propsExpression\r\n                    ])\r\n                ]);\r\n                break;\r\n        }\r\n    }\r\n    return {\r\n        props: propsExpression,\r\n        directives: runtimeDirectives,\r\n        patchFlag,\r\n        dynamicPropNames\r\n    };\r\n}\r\n// Dedupe props in an object literal.\r\n// Literal duplicated attributes would have been warned during the parse phase,\r\n// however, it's possible to encounter duplicated `onXXX` handlers with different\r\n// modifiers. We also need to merge static and dynamic class / style attributes.\r\n// - onXXX handlers / style: merge into array\r\n// - class: merge into single expression with concatenation\r\nfunction dedupeProperties(properties) {\r\n    const knownProps = new Map();\r\n    const deduped = [];\r\n    for (let i = 0; i < properties.length; i++) {\r\n        const prop = properties[i];\r\n        // dynamic keys are always allowed\r\n        if (prop.key.type === 8 /* COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\r\n            deduped.push(prop);\r\n            continue;\r\n        }\r\n        const name = prop.key.content;\r\n        const existing = knownProps.get(name);\r\n        if (existing) {\r\n            if (name === 'style' || name === 'class' || name.startsWith('on')) {\r\n                mergeAsArray(existing, prop);\r\n            }\r\n            // unexpected duplicate, should have emitted error during parse\r\n        }\r\n        else {\r\n            knownProps.set(name, prop);\r\n            deduped.push(prop);\r\n        }\r\n    }\r\n    return deduped;\r\n}\r\nfunction mergeAsArray(existing, incoming) {\r\n    if (existing.value.type === 17 /* JS_ARRAY_EXPRESSION */) {\r\n        existing.value.elements.push(incoming.value);\r\n    }\r\n    else {\r\n        existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\r\n    }\r\n}\r\nfunction buildDirectiveArgs(dir, context) {\r\n    const dirArgs = [];\r\n    const runtime = directiveImportMap.get(dir);\r\n    if (runtime) {\r\n        // built-in directive with runtime\r\n        dirArgs.push(context.helperString(runtime));\r\n    }\r\n    else {\r\n        {\r\n            // inject statement for resolving directive\r\n            context.helper(RESOLVE_DIRECTIVE);\r\n            context.directives.add(dir.name);\r\n            dirArgs.push(toValidAssetId(dir.name, `directive`));\r\n        }\r\n    }\r\n    const { loc } = dir;\r\n    if (dir.exp)\r\n        dirArgs.push(dir.exp);\r\n    if (dir.arg) {\r\n        if (!dir.exp) {\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        dirArgs.push(dir.arg);\r\n    }\r\n    if (Object.keys(dir.modifiers).length) {\r\n        if (!dir.arg) {\r\n            if (!dir.exp) {\r\n                dirArgs.push(`void 0`);\r\n            }\r\n            dirArgs.push(`void 0`);\r\n        }\r\n        const trueExpression = createSimpleExpression(`true`, false, loc);\r\n        dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\r\n    }\r\n    return createArrayExpression(dirArgs, dir.loc);\r\n}\r\nfunction stringifyDynamicPropNames(props) {\r\n    let propsNamesString = `[`;\r\n    for (let i = 0, l = props.length; i < l; i++) {\r\n        propsNamesString += JSON.stringify(props[i]);\r\n        if (i < l - 1)\r\n            propsNamesString += ', ';\r\n    }\r\n    return propsNamesString + `]`;\r\n}\r\nfunction isComponentTag(tag) {\r\n    return tag[0].toLowerCase() + tag.slice(1) === 'component';\r\n}\n\n(process.env.NODE_ENV !== 'production')\r\n    ? Object.freeze({})\r\n    : {};\r\n(process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\n\nconst transformSlotOutlet = (node, context) => {\r\n    if (isSlotOutlet(node)) {\r\n        const { children, loc } = node;\r\n        const { slotName, slotProps } = processSlotOutlet(node, context);\r\n        const slotArgs = [\r\n            context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\r\n            slotName\r\n        ];\r\n        if (slotProps) {\r\n            slotArgs.push(slotProps);\r\n        }\r\n        if (children.length) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            slotArgs.push(createFunctionExpression([], children, false, false, loc));\r\n        }\r\n        if (context.scopeId && !context.slotted) {\r\n            if (!slotProps) {\r\n                slotArgs.push(`{}`);\r\n            }\r\n            if (!children.length) {\r\n                slotArgs.push(`undefined`);\r\n            }\r\n            slotArgs.push(`true`);\r\n        }\r\n        node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\r\n    }\r\n};\r\nfunction processSlotOutlet(node, context) {\r\n    let slotName = `\"default\"`;\r\n    let slotProps = undefined;\r\n    const nonNameProps = [];\r\n    for (let i = 0; i < node.props.length; i++) {\r\n        const p = node.props[i];\r\n        if (p.type === 6 /* ATTRIBUTE */) {\r\n            if (p.value) {\r\n                if (p.name === 'name') {\r\n                    slotName = JSON.stringify(p.value.content);\r\n                }\r\n                else {\r\n                    p.name = camelize(p.name);\r\n                    nonNameProps.push(p);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            if (p.name === 'bind' && isBindKey(p.arg, 'name')) {\r\n                if (p.exp)\r\n                    slotName = p.exp;\r\n            }\r\n            else {\r\n                if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\r\n                    p.arg.content = camelize(p.arg.content);\r\n                }\r\n                nonNameProps.push(p);\r\n            }\r\n        }\r\n    }\r\n    if (nonNameProps.length > 0) {\r\n        const { props, directives } = buildProps(node, context, nonNameProps);\r\n        slotProps = props;\r\n        if (directives.length) {\r\n            context.onError(createCompilerError(35 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\r\n        }\r\n    }\r\n    return {\r\n        slotName,\r\n        slotProps\r\n    };\r\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^\\s*function(?:\\s+[\\w$]+)?\\s*\\(/;\r\nconst transformOn = (dir, node, context, augmentor) => {\r\n    const { loc, modifiers, arg } = dir;\r\n    if (!dir.exp && !modifiers.length) {\r\n        context.onError(createCompilerError(34 /* X_V_ON_NO_EXPRESSION */, loc));\r\n    }\r\n    let eventName;\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            const rawName = arg.content;\r\n            // for all event listeners, auto convert it to camelCase. See issue #2249\r\n            eventName = createSimpleExpression(toHandlerKey(camelize$1(rawName)), true, arg.loc);\r\n        }\r\n        else {\r\n            // #2388\r\n            eventName = createCompoundExpression([\r\n                `${context.helperString(TO_HANDLER_KEY)}(`,\r\n                arg,\r\n                `)`\r\n            ]);\r\n        }\r\n    }\r\n    else {\r\n        // already a compound expression.\r\n        eventName = arg;\r\n        eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\r\n        eventName.children.push(`)`);\r\n    }\r\n    // handler processing\r\n    let exp = dir.exp;\r\n    if (exp && !exp.content.trim()) {\r\n        exp = undefined;\r\n    }\r\n    let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\r\n    if (exp) {\r\n        const isMemberExp = isMemberExpression(exp.content);\r\n        const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\r\n        const hasMultipleStatements = exp.content.includes(`;`);\r\n        if ((process.env.NODE_ENV !== 'production') && true) {\r\n            validateBrowserExpression(exp, context, false, hasMultipleStatements);\r\n        }\r\n        if (isInlineStatement || (shouldCache && isMemberExp)) {\r\n            // wrap inline statement in a function expression\r\n            exp = createCompoundExpression([\r\n                `${isInlineStatement\r\n                    ? `$event`\r\n                    : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\r\n                exp,\r\n                hasMultipleStatements ? `}` : `)`\r\n            ]);\r\n        }\r\n    }\r\n    let ret = {\r\n        props: [\r\n            createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\r\n        ]\r\n    };\r\n    // apply extended compiler augmentor\r\n    if (augmentor) {\r\n        ret = augmentor(ret);\r\n    }\r\n    if (shouldCache) {\r\n        // cache handlers so that it's always the same handler being passed down.\r\n        // this avoids unnecessary re-renders when users use inline handlers on\r\n        // components.\r\n        ret.props[0].value = context.cache(ret.props[0].value);\r\n    }\r\n    // mark the key as handler for props normalization check\r\n    ret.props.forEach(p => (p.key.isHandlerKey = true));\r\n    return ret;\r\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\r\n// codegen for the entire props object. This transform here is only for v-bind\r\n// *with* args.\r\nconst transformBind = (dir, _node, context) => {\r\n    const { exp, modifiers, loc } = dir;\r\n    const arg = dir.arg;\r\n    if (arg.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n        arg.children.unshift(`(`);\r\n        arg.children.push(`) || \"\"`);\r\n    }\r\n    else if (!arg.isStatic) {\r\n        arg.content = `${arg.content} || \"\"`;\r\n    }\r\n    // .sync is replaced by v-model:arg\r\n    if (modifiers.includes('camel')) {\r\n        if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n            if (arg.isStatic) {\r\n                arg.content = camelize$1(arg.content);\r\n            }\r\n            else {\r\n                arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\r\n            }\r\n        }\r\n        else {\r\n            arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\r\n            arg.children.push(`)`);\r\n        }\r\n    }\r\n    if (!context.inSSR) {\r\n        if (modifiers.includes('prop')) {\r\n            injectPrefix(arg, '.');\r\n        }\r\n        if (modifiers.includes('attr')) {\r\n            injectPrefix(arg, '^');\r\n        }\r\n    }\r\n    if (!exp ||\r\n        (exp.type === 4 /* SIMPLE_EXPRESSION */ && !exp.content.trim())) {\r\n        context.onError(createCompilerError(33 /* X_V_BIND_NO_EXPRESSION */, loc));\r\n        return {\r\n            props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\r\n        };\r\n    }\r\n    return {\r\n        props: [createObjectProperty(arg, exp)]\r\n    };\r\n};\r\nconst injectPrefix = (arg, prefix) => {\r\n    if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        if (arg.isStatic) {\r\n            arg.content = prefix + arg.content;\r\n        }\r\n        else {\r\n            arg.content = `\\`${prefix}\\${${arg.content}}\\``;\r\n        }\r\n    }\r\n    else {\r\n        arg.children.unshift(`'${prefix}' + (`);\r\n        arg.children.push(`)`);\r\n    }\r\n};\n\n// Merge adjacent text nodes and expressions into a single expression\r\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\r\nconst transformText = (node, context) => {\r\n    if (node.type === 0 /* ROOT */ ||\r\n        node.type === 1 /* ELEMENT */ ||\r\n        node.type === 11 /* FOR */ ||\r\n        node.type === 10 /* IF_BRANCH */) {\r\n        // perform the transform on node exit so that all expressions have already\r\n        // been processed.\r\n        return () => {\r\n            const children = node.children;\r\n            let currentContainer = undefined;\r\n            let hasText = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child)) {\r\n                    hasText = true;\r\n                    for (let j = i + 1; j < children.length; j++) {\r\n                        const next = children[j];\r\n                        if (isText(next)) {\r\n                            if (!currentContainer) {\r\n                                currentContainer = children[i] = {\r\n                                    type: 8 /* COMPOUND_EXPRESSION */,\r\n                                    loc: child.loc,\r\n                                    children: [child]\r\n                                };\r\n                            }\r\n                            // merge adjacent text node into current\r\n                            currentContainer.children.push(` + `, next);\r\n                            children.splice(j, 1);\r\n                            j--;\r\n                        }\r\n                        else {\r\n                            currentContainer = undefined;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (!hasText ||\r\n                // if this is a plain element with a single text child, leave it\r\n                // as-is since the runtime has dedicated fast path for this by directly\r\n                // setting textContent of the element.\r\n                // for component root it's always normalized anyway.\r\n                (children.length === 1 &&\r\n                    (node.type === 0 /* ROOT */ ||\r\n                        (node.type === 1 /* ELEMENT */ &&\r\n                            node.tagType === 0 /* ELEMENT */ &&\r\n                            // #3756\r\n                            // custom directives can potentially add DOM elements arbitrarily,\r\n                            // we need to avoid setting textContent of the element at runtime\r\n                            // to avoid accidentally overwriting the DOM elements added\r\n                            // by the user through custom directives.\r\n                            !node.props.find(p => p.type === 7 /* DIRECTIVE */ &&\r\n                                !context.directiveTransforms[p.name]) &&\r\n                            // in compat mode, <template> tags with no special directives\r\n                            // will be rendered as a fragment so its children must be\r\n                            // converted into vnodes.\r\n                            !(node.tag === 'template'))))) {\r\n                return;\r\n            }\r\n            // pre-convert text nodes into createTextVNode(text) calls to avoid\r\n            // runtime normalization.\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n                if (isText(child) || child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                    const callArgs = [];\r\n                    // createTextVNode defaults to single whitespace, so if it is a\r\n                    // single space the code could be an empty call to save bytes.\r\n                    if (child.type !== 2 /* TEXT */ || child.content !== ' ') {\r\n                        callArgs.push(child);\r\n                    }\r\n                    // mark dynamic text with flag so it gets patched inside a block\r\n                    if (!context.ssr &&\r\n                        getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n                        callArgs.push(1 /* TEXT */ +\r\n                            ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[1 /* TEXT */]} */` : ``));\r\n                    }\r\n                    children[i] = {\r\n                        type: 12 /* TEXT_CALL */,\r\n                        content: child,\r\n                        loc: child.loc,\r\n                        codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\r\n                    };\r\n                }\r\n            }\r\n        };\r\n    }\r\n};\n\nconst seen = new WeakSet();\r\nconst transformOnce = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ && findDir(node, 'once', true)) {\r\n        if (seen.has(node) || context.inVOnce) {\r\n            return;\r\n        }\r\n        seen.add(node);\r\n        context.inVOnce = true;\r\n        context.helper(SET_BLOCK_TRACKING);\r\n        return () => {\r\n            context.inVOnce = false;\r\n            const cur = context.currentNode;\r\n            if (cur.codegenNode) {\r\n                cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\r\n            }\r\n        };\r\n    }\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n    const { exp, arg } = dir;\r\n    if (!exp) {\r\n        context.onError(createCompilerError(40 /* X_V_MODEL_NO_EXPRESSION */, dir.loc));\r\n        return createTransformProps();\r\n    }\r\n    const rawExp = exp.loc.source;\r\n    const expString = exp.type === 4 /* SIMPLE_EXPRESSION */ ? exp.content : rawExp;\r\n    // im SFC <script setup> inline mode, the exp may have been transformed into\r\n    // _unref(exp)\r\n    context.bindingMetadata[rawExp];\r\n    const maybeRef = !true    /* SETUP_CONST */;\r\n    if (!expString.trim() || (!isMemberExpression(expString) && !maybeRef)) {\r\n        context.onError(createCompilerError(41 /* X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\r\n        return createTransformProps();\r\n    }\r\n    const propName = arg ? arg : createSimpleExpression('modelValue', true);\r\n    const eventName = arg\r\n        ? isStaticExp(arg)\r\n            ? `onUpdate:${arg.content}`\r\n            : createCompoundExpression(['\"onUpdate:\" + ', arg])\r\n        : `onUpdate:modelValue`;\r\n    let assignmentExp;\r\n    const eventArg = context.isTS ? `($event: any)` : `$event`;\r\n    {\r\n        assignmentExp = createCompoundExpression([\r\n            `${eventArg} => (`,\r\n            exp,\r\n            ` = $event)`\r\n        ]);\r\n    }\r\n    const props = [\r\n        // modelValue: foo\r\n        createObjectProperty(propName, dir.exp),\r\n        // \"onUpdate:modelValue\": $event => (foo = $event)\r\n        createObjectProperty(eventName, assignmentExp)\r\n    ];\r\n    // modelModifiers: { foo: true, \"bar-baz\": true }\r\n    if (dir.modifiers.length && node.tagType === 1 /* COMPONENT */) {\r\n        const modifiers = dir.modifiers\r\n            .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\r\n            .join(`, `);\r\n        const modifiersKey = arg\r\n            ? isStaticExp(arg)\r\n                ? `${arg.content}Modifiers`\r\n                : createCompoundExpression([arg, ' + \"Modifiers\"'])\r\n            : `modelModifiers`;\r\n        props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* CAN_HOIST */)));\r\n    }\r\n    return createTransformProps(props);\r\n};\r\nfunction createTransformProps(props = []) {\r\n    return { props };\r\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\r\nconst transformFilter = (node, context) => {\r\n    if (!isCompatEnabled(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context)) {\r\n        return;\r\n    }\r\n    if (node.type === 5 /* INTERPOLATION */) {\r\n        // filter rewrite is applied before expression transform so only\r\n        // simple expressions are possible at this stage\r\n        rewriteFilter(node.content, context);\r\n    }\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        node.props.forEach((prop) => {\r\n            if (prop.type === 7 /* DIRECTIVE */ &&\r\n                prop.name !== 'for' &&\r\n                prop.exp) {\r\n                rewriteFilter(prop.exp, context);\r\n            }\r\n        });\r\n    }\r\n};\r\nfunction rewriteFilter(node, context) {\r\n    if (node.type === 4 /* SIMPLE_EXPRESSION */) {\r\n        parseFilter(node, context);\r\n    }\r\n    else {\r\n        for (let i = 0; i < node.children.length; i++) {\r\n            const child = node.children[i];\r\n            if (typeof child !== 'object')\r\n                continue;\r\n            if (child.type === 4 /* SIMPLE_EXPRESSION */) {\r\n                parseFilter(child, context);\r\n            }\r\n            else if (child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n                rewriteFilter(node, context);\r\n            }\r\n            else if (child.type === 5 /* INTERPOLATION */) {\r\n                rewriteFilter(child.content, context);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction parseFilter(node, context) {\r\n    const exp = node.content;\r\n    let inSingle = false;\r\n    let inDouble = false;\r\n    let inTemplateString = false;\r\n    let inRegex = false;\r\n    let curly = 0;\r\n    let square = 0;\r\n    let paren = 0;\r\n    let lastFilterIndex = 0;\r\n    let c, prev, i, expression, filters = [];\r\n    for (i = 0; i < exp.length; i++) {\r\n        prev = c;\r\n        c = exp.charCodeAt(i);\r\n        if (inSingle) {\r\n            if (c === 0x27 && prev !== 0x5c)\r\n                inSingle = false;\r\n        }\r\n        else if (inDouble) {\r\n            if (c === 0x22 && prev !== 0x5c)\r\n                inDouble = false;\r\n        }\r\n        else if (inTemplateString) {\r\n            if (c === 0x60 && prev !== 0x5c)\r\n                inTemplateString = false;\r\n        }\r\n        else if (inRegex) {\r\n            if (c === 0x2f && prev !== 0x5c)\r\n                inRegex = false;\r\n        }\r\n        else if (c === 0x7c && // pipe\r\n            exp.charCodeAt(i + 1) !== 0x7c &&\r\n            exp.charCodeAt(i - 1) !== 0x7c &&\r\n            !curly &&\r\n            !square &&\r\n            !paren) {\r\n            if (expression === undefined) {\r\n                // first filter, end of expression\r\n                lastFilterIndex = i + 1;\r\n                expression = exp.slice(0, i).trim();\r\n            }\r\n            else {\r\n                pushFilter();\r\n            }\r\n        }\r\n        else {\r\n            switch (c) {\r\n                case 0x22:\r\n                    inDouble = true;\r\n                    break; // \"\r\n                case 0x27:\r\n                    inSingle = true;\r\n                    break; // '\r\n                case 0x60:\r\n                    inTemplateString = true;\r\n                    break; // `\r\n                case 0x28:\r\n                    paren++;\r\n                    break; // (\r\n                case 0x29:\r\n                    paren--;\r\n                    break; // )\r\n                case 0x5b:\r\n                    square++;\r\n                    break; // [\r\n                case 0x5d:\r\n                    square--;\r\n                    break; // ]\r\n                case 0x7b:\r\n                    curly++;\r\n                    break; // {\r\n                case 0x7d:\r\n                    curly--;\r\n                    break; // }\r\n            }\r\n            if (c === 0x2f) {\r\n                // /\r\n                let j = i - 1;\r\n                let p;\r\n                // find first non-whitespace prev char\r\n                for (; j >= 0; j--) {\r\n                    p = exp.charAt(j);\r\n                    if (p !== ' ')\r\n                        break;\r\n                }\r\n                if (!p || !validDivisionCharRE.test(p)) {\r\n                    inRegex = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (expression === undefined) {\r\n        expression = exp.slice(0, i).trim();\r\n    }\r\n    else if (lastFilterIndex !== 0) {\r\n        pushFilter();\r\n    }\r\n    function pushFilter() {\r\n        filters.push(exp.slice(lastFilterIndex, i).trim());\r\n        lastFilterIndex = i + 1;\r\n    }\r\n    if (filters.length) {\r\n        (process.env.NODE_ENV !== 'production') &&\r\n            warnDeprecation(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context, node.loc);\r\n        for (i = 0; i < filters.length; i++) {\r\n            expression = wrapFilter(expression, filters[i], context);\r\n        }\r\n        node.content = expression;\r\n    }\r\n}\r\nfunction wrapFilter(exp, filter, context) {\r\n    context.helper(RESOLVE_FILTER);\r\n    const i = filter.indexOf('(');\r\n    if (i < 0) {\r\n        context.filters.add(filter);\r\n        return `${toValidAssetId(filter, 'filter')}(${exp})`;\r\n    }\r\n    else {\r\n        const name = filter.slice(0, i);\r\n        const args = filter.slice(i + 1);\r\n        context.filters.add(name);\r\n        return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\r\n    }\r\n}\n\nconst seen$1 = new WeakSet();\r\nconst transformMemo = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        const dir = findDir(node, 'memo');\r\n        if (!dir || seen$1.has(node)) {\r\n            return;\r\n        }\r\n        seen$1.add(node);\r\n        return () => {\r\n            const codegenNode = node.codegenNode ||\r\n                context.currentNode.codegenNode;\r\n            if (codegenNode && codegenNode.type === 13 /* VNODE_CALL */) {\r\n                // non-component sub tree should be turned into a block\r\n                if (node.tagType !== 1 /* COMPONENT */) {\r\n                    makeBlock(codegenNode, context);\r\n                }\r\n                node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\r\n                    dir.exp,\r\n                    createFunctionExpression(undefined, codegenNode),\r\n                    `_cache`,\r\n                    String(context.cached++)\r\n                ]);\r\n            }\r\n        };\r\n    }\r\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\r\n    return [\r\n        [\r\n            transformOnce,\r\n            transformIf,\r\n            transformMemo,\r\n            transformFor,\r\n            ...([transformFilter] ),\r\n            ...((process.env.NODE_ENV !== 'production')\r\n                    ? [transformExpression]\r\n                    : []),\r\n            transformSlotOutlet,\r\n            transformElement,\r\n            trackSlotScopes,\r\n            transformText\r\n        ],\r\n        {\r\n            on: transformOn,\r\n            bind: transformBind,\r\n            model: transformModel\r\n        }\r\n    ];\r\n}\r\n// we name it `baseCompile` so that higher order compilers like\r\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\r\nfunction baseCompile(template, options = {}) {\r\n    const onError = options.onError || defaultOnError;\r\n    const isModuleMode = options.mode === 'module';\r\n    /* istanbul ignore if */\r\n    {\r\n        if (options.prefixIdentifiers === true) {\r\n            onError(createCompilerError(45 /* X_PREFIX_ID_NOT_SUPPORTED */));\r\n        }\r\n        else if (isModuleMode) {\r\n            onError(createCompilerError(46 /* X_MODULE_MODE_NOT_SUPPORTED */));\r\n        }\r\n    }\r\n    const prefixIdentifiers = !true ;\r\n    if (options.cacheHandlers) {\r\n        onError(createCompilerError(47 /* X_CACHE_HANDLER_NOT_SUPPORTED */));\r\n    }\r\n    if (options.scopeId && !isModuleMode) {\r\n        onError(createCompilerError(48 /* X_SCOPE_ID_NOT_SUPPORTED */));\r\n    }\r\n    const ast = isString(template) ? baseParse(template, options) : template;\r\n    const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\r\n    transform(ast, extend({}, options, {\r\n        prefixIdentifiers,\r\n        nodeTransforms: [\r\n            ...nodeTransforms,\r\n            ...(options.nodeTransforms || []) // user transforms\r\n        ],\r\n        directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\r\n        )\r\n    }));\r\n    return generate(ast, extend({}, options, {\r\n        prefixIdentifiers\r\n    }));\r\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexport { BASE_TRANSITION, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, UNREF, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, WITH_SCOPE_ID, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildProps, buildSlots, checkCompatEnabled, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, findDir, findProp, generate, getBaseTransformPreset, getInnerRange, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isBindKey, isBuiltInType, isCoreComponent, isMemberExpression, isSimpleIdentifier, isSlotOutlet, isStaticExp, isTemplateNode, isText, isVSlot, locStub, makeBlock, noopDirectiveTransform, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel, transformOn, traverseNode, warnDeprecation };\n", "import { registerRuntimeHelpers, isBuiltInType, createSimpleExpression, createCompilerError, createObjectProperty, createCallExpression, TO_DISPLAY_STRING, transformModel as transformModel$1, findProp, hasDynamicKeyVBind, transformOn as transformOn$1, createCompoundExpression, isStaticExp, checkCompatEnabled, noopDirectiveTransform, baseCompile, baseParse } from '@vue/compiler-core';\nexport * from '@vue/compiler-core';\nimport { isVoidTag, isHTMLTag, isSVGTag, makeMap, parseStringStyle, capitalize, extend } from '@vue/shared';\n\nconst V_MODEL_RADIO = Symbol((process.env.NODE_ENV !== 'production') ? `vModelRadio` : ``);\r\nconst V_MODEL_CHECKBOX = Symbol((process.env.NODE_ENV !== 'production') ? `vModelCheckbox` : ``);\r\nconst V_MODEL_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `vModelText` : ``);\r\nconst V_MODEL_SELECT = Symbol((process.env.NODE_ENV !== 'production') ? `vModelSelect` : ``);\r\nconst V_MODEL_DYNAMIC = Symbol((process.env.NODE_ENV !== 'production') ? `vModelDynamic` : ``);\r\nconst V_ON_WITH_MODIFIERS = Symbol((process.env.NODE_ENV !== 'production') ? `vOnModifiersGuard` : ``);\r\nconst V_ON_WITH_KEYS = Symbol((process.env.NODE_ENV !== 'production') ? `vOnKeysGuard` : ``);\r\nconst V_SHOW = Symbol((process.env.NODE_ENV !== 'production') ? `vShow` : ``);\r\nconst TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `Transition` : ``);\r\nconst TRANSITION_GROUP = Symbol((process.env.NODE_ENV !== 'production') ? `TransitionGroup` : ``);\r\nregisterRuntimeHelpers({\r\n    [V_MODEL_RADIO]: `vModelRadio`,\r\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\r\n    [V_MODEL_TEXT]: `vModelText`,\r\n    [V_MODEL_SELECT]: `vModelSelect`,\r\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\r\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\r\n    [V_ON_WITH_KEYS]: `withKeys`,\r\n    [V_SHOW]: `vShow`,\r\n    [TRANSITION]: `Transition`,\r\n    [TRANSITION_GROUP]: `TransitionGroup`\r\n});\n\n/* eslint-disable no-restricted-globals */\r\nlet decoder;\r\nfunction decodeHtmlBrowser(raw, asAttr = false) {\r\n    if (!decoder) {\r\n        decoder = document.createElement('div');\r\n    }\r\n    if (asAttr) {\r\n        decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, '&quot;')}\">`;\r\n        return decoder.children[0].getAttribute('foo');\r\n    }\r\n    else {\r\n        decoder.innerHTML = raw;\r\n        return decoder.textContent;\r\n    }\r\n}\n\nconst isRawTextContainer = /*#__PURE__*/ makeMap('style,iframe,script,noscript', true);\r\nconst parserOptions = {\r\n    isVoidTag,\r\n    isNativeTag: tag => isHTMLTag(tag) || isSVGTag(tag),\r\n    isPreTag: tag => tag === 'pre',\r\n    decodeEntities: decodeHtmlBrowser ,\r\n    isBuiltInComponent: (tag) => {\r\n        if (isBuiltInType(tag, `Transition`)) {\r\n            return TRANSITION;\r\n        }\r\n        else if (isBuiltInType(tag, `TransitionGroup`)) {\r\n            return TRANSITION_GROUP;\r\n        }\r\n    },\r\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\r\n    getNamespace(tag, parent) {\r\n        let ns = parent ? parent.ns : 0 /* HTML */;\r\n        if (parent && ns === 2 /* MATH_ML */) {\r\n            if (parent.tag === 'annotation-xml') {\r\n                if (tag === 'svg') {\r\n                    return 1 /* SVG */;\r\n                }\r\n                if (parent.props.some(a => a.type === 6 /* ATTRIBUTE */ &&\r\n                    a.name === 'encoding' &&\r\n                    a.value != null &&\r\n                    (a.value.content === 'text/html' ||\r\n                        a.value.content === 'application/xhtml+xml'))) {\r\n                    ns = 0 /* HTML */;\r\n                }\r\n            }\r\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\r\n                tag !== 'mglyph' &&\r\n                tag !== 'malignmark') {\r\n                ns = 0 /* HTML */;\r\n            }\r\n        }\r\n        else if (parent && ns === 1 /* SVG */) {\r\n            if (parent.tag === 'foreignObject' ||\r\n                parent.tag === 'desc' ||\r\n                parent.tag === 'title') {\r\n                ns = 0 /* HTML */;\r\n            }\r\n        }\r\n        if (ns === 0 /* HTML */) {\r\n            if (tag === 'svg') {\r\n                return 1 /* SVG */;\r\n            }\r\n            if (tag === 'math') {\r\n                return 2 /* MATH_ML */;\r\n            }\r\n        }\r\n        return ns;\r\n    },\r\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\r\n    getTextMode({ tag, ns }) {\r\n        if (ns === 0 /* HTML */) {\r\n            if (tag === 'textarea' || tag === 'title') {\r\n                return 1 /* RCDATA */;\r\n            }\r\n            if (isRawTextContainer(tag)) {\r\n                return 2 /* RAWTEXT */;\r\n            }\r\n        }\r\n        return 0 /* DATA */;\r\n    }\r\n};\n\n// Parse inline CSS strings for static style attributes into an object.\r\n// This is a NodeTransform since it works on the static `style` attribute and\r\n// converts it into a dynamic equivalent:\r\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\r\n// It is then processed by `transformElement` and included in the generated\r\n// props.\r\nconst transformStyle = node => {\r\n    if (node.type === 1 /* ELEMENT */) {\r\n        node.props.forEach((p, i) => {\r\n            if (p.type === 6 /* ATTRIBUTE */ && p.name === 'style' && p.value) {\r\n                // replace p with an expression node\r\n                node.props[i] = {\r\n                    type: 7 /* DIRECTIVE */,\r\n                    name: `bind`,\r\n                    arg: createSimpleExpression(`style`, true, p.loc),\r\n                    exp: parseInlineCSS(p.value.content, p.loc),\r\n                    modifiers: [],\r\n                    loc: p.loc\r\n                };\r\n            }\r\n        });\r\n    }\r\n};\r\nconst parseInlineCSS = (cssText, loc) => {\r\n    const normalized = parseStringStyle(cssText);\r\n    return createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* CAN_STRINGIFY */);\r\n};\n\nfunction createDOMCompilerError(code, loc) {\r\n    return createCompilerError(code, loc, (process.env.NODE_ENV !== 'production') || !true ? DOMErrorMessages : undefined);\r\n}\r\nconst DOMErrorMessages = {\r\n    [49 /* X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\r\n    [50 /* X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\r\n    [51 /* X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\r\n    [52 /* X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\r\n    [53 /* X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\r\n    [54 /* X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\r\n    [55 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\r\n    [56 /* X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\r\n    [57 /* X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\r\n    [58 /* X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\r\n    [59 /* X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\r\n};\n\nconst transformVHtml = (dir, node, context) => {\r\n    const { exp, loc } = dir;\r\n    if (!exp) {\r\n        context.onError(createDOMCompilerError(49 /* X_V_HTML_NO_EXPRESSION */, loc));\r\n    }\r\n    if (node.children.length) {\r\n        context.onError(createDOMCompilerError(50 /* X_V_HTML_WITH_CHILDREN */, loc));\r\n        node.children.length = 0;\r\n    }\r\n    return {\r\n        props: [\r\n            createObjectProperty(createSimpleExpression(`innerHTML`, true, loc), exp || createSimpleExpression('', true))\r\n        ]\r\n    };\r\n};\n\nconst transformVText = (dir, node, context) => {\r\n    const { exp, loc } = dir;\r\n    if (!exp) {\r\n        context.onError(createDOMCompilerError(51 /* X_V_TEXT_NO_EXPRESSION */, loc));\r\n    }\r\n    if (node.children.length) {\r\n        context.onError(createDOMCompilerError(52 /* X_V_TEXT_WITH_CHILDREN */, loc));\r\n        node.children.length = 0;\r\n    }\r\n    return {\r\n        props: [\r\n            createObjectProperty(createSimpleExpression(`textContent`, true), exp\r\n                ? createCallExpression(context.helperString(TO_DISPLAY_STRING), [exp], loc)\r\n                : createSimpleExpression('', true))\r\n        ]\r\n    };\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n    const baseResult = transformModel$1(dir, node, context);\r\n    // base transform has errors OR component v-model (only need props)\r\n    if (!baseResult.props.length || node.tagType === 1 /* COMPONENT */) {\r\n        return baseResult;\r\n    }\r\n    if (dir.arg) {\r\n        context.onError(createDOMCompilerError(54 /* X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\r\n    }\r\n    function checkDuplicatedValue() {\r\n        const value = findProp(node, 'value');\r\n        if (value) {\r\n            context.onError(createDOMCompilerError(56 /* X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\r\n        }\r\n    }\r\n    const { tag } = node;\r\n    const isCustomElement = context.isCustomElement(tag);\r\n    if (tag === 'input' ||\r\n        tag === 'textarea' ||\r\n        tag === 'select' ||\r\n        isCustomElement) {\r\n        let directiveToUse = V_MODEL_TEXT;\r\n        let isInvalidType = false;\r\n        if (tag === 'input' || isCustomElement) {\r\n            const type = findProp(node, `type`);\r\n            if (type) {\r\n                if (type.type === 7 /* DIRECTIVE */) {\r\n                    // :type=\"foo\"\r\n                    directiveToUse = V_MODEL_DYNAMIC;\r\n                }\r\n                else if (type.value) {\r\n                    switch (type.value.content) {\r\n                        case 'radio':\r\n                            directiveToUse = V_MODEL_RADIO;\r\n                            break;\r\n                        case 'checkbox':\r\n                            directiveToUse = V_MODEL_CHECKBOX;\r\n                            break;\r\n                        case 'file':\r\n                            isInvalidType = true;\r\n                            context.onError(createDOMCompilerError(55 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\r\n                            break;\r\n                        default:\r\n                            // text type\r\n                            (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else if (hasDynamicKeyVBind(node)) {\r\n                // element has bindings with dynamic keys, which can possibly contain\r\n                // \"type\".\r\n                directiveToUse = V_MODEL_DYNAMIC;\r\n            }\r\n            else {\r\n                // text type\r\n                (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\r\n            }\r\n        }\r\n        else if (tag === 'select') {\r\n            directiveToUse = V_MODEL_SELECT;\r\n        }\r\n        else {\r\n            // textarea\r\n            (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\r\n        }\r\n        // inject runtime directive\r\n        // by returning the helper symbol via needRuntime\r\n        // the import will replaced a resolveDirective call.\r\n        if (!isInvalidType) {\r\n            baseResult.needRuntime = context.helper(directiveToUse);\r\n        }\r\n    }\r\n    else {\r\n        context.onError(createDOMCompilerError(53 /* X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\r\n    }\r\n    // native vmodel doesn't need the `modelValue` props since they are also\r\n    // passed to the runtime as `binding.value`. removing it reduces code size.\r\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n        p.key.content === 'modelValue'));\r\n    return baseResult;\r\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`);\r\nconst isNonKeyModifier = /*#__PURE__*/ makeMap(\r\n// event propagation management\r\n`stop,prevent,self,` +\r\n    // system modifiers + exact\r\n    `ctrl,shift,alt,meta,exact,` +\r\n    // mouse\r\n    `middle`);\r\n// left & right could be mouse or key modifiers based on event type\r\nconst maybeKeyModifier = /*#__PURE__*/ makeMap('left,right');\r\nconst isKeyboardEvent = /*#__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`, true);\r\nconst resolveModifiers = (key, modifiers, context, loc) => {\r\n    const keyModifiers = [];\r\n    const nonKeyModifiers = [];\r\n    const eventOptionModifiers = [];\r\n    for (let i = 0; i < modifiers.length; i++) {\r\n        const modifier = modifiers[i];\r\n        if (modifier === 'native' &&\r\n            checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */, context, loc)) {\r\n            eventOptionModifiers.push(modifier);\r\n        }\r\n        else if (isEventOptionModifier(modifier)) {\r\n            // eventOptionModifiers: modifiers for addEventListener() options,\r\n            // e.g. .passive & .capture\r\n            eventOptionModifiers.push(modifier);\r\n        }\r\n        else {\r\n            // runtimeModifiers: modifiers that needs runtime guards\r\n            if (maybeKeyModifier(modifier)) {\r\n                if (isStaticExp(key)) {\r\n                    if (isKeyboardEvent(key.content)) {\r\n                        keyModifiers.push(modifier);\r\n                    }\r\n                    else {\r\n                        nonKeyModifiers.push(modifier);\r\n                    }\r\n                }\r\n                else {\r\n                    keyModifiers.push(modifier);\r\n                    nonKeyModifiers.push(modifier);\r\n                }\r\n            }\r\n            else {\r\n                if (isNonKeyModifier(modifier)) {\r\n                    nonKeyModifiers.push(modifier);\r\n                }\r\n                else {\r\n                    keyModifiers.push(modifier);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return {\r\n        keyModifiers,\r\n        nonKeyModifiers,\r\n        eventOptionModifiers\r\n    };\r\n};\r\nconst transformClick = (key, event) => {\r\n    const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === 'onclick';\r\n    return isStaticClick\r\n        ? createSimpleExpression(event, true)\r\n        : key.type !== 4 /* SIMPLE_EXPRESSION */\r\n            ? createCompoundExpression([\r\n                `(`,\r\n                key,\r\n                `) === \"onClick\" ? \"${event}\" : (`,\r\n                key,\r\n                `)`\r\n            ])\r\n            : key;\r\n};\r\nconst transformOn = (dir, node, context) => {\r\n    return transformOn$1(dir, node, context, baseResult => {\r\n        const { modifiers } = dir;\r\n        if (!modifiers.length)\r\n            return baseResult;\r\n        let { key, value: handlerExp } = baseResult.props[0];\r\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\r\n        // normalize click.right and click.middle since they don't actually fire\r\n        if (nonKeyModifiers.includes('right')) {\r\n            key = transformClick(key, `onContextmenu`);\r\n        }\r\n        if (nonKeyModifiers.includes('middle')) {\r\n            key = transformClick(key, `onMouseup`);\r\n        }\r\n        if (nonKeyModifiers.length) {\r\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\r\n                handlerExp,\r\n                JSON.stringify(nonKeyModifiers)\r\n            ]);\r\n        }\r\n        if (keyModifiers.length &&\r\n            // if event name is dynamic, always wrap with keys guard\r\n            (!isStaticExp(key) || isKeyboardEvent(key.content))) {\r\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\r\n                handlerExp,\r\n                JSON.stringify(keyModifiers)\r\n            ]);\r\n        }\r\n        if (eventOptionModifiers.length) {\r\n            const modifierPostfix = eventOptionModifiers.map(capitalize).join('');\r\n            key = isStaticExp(key)\r\n                ? createSimpleExpression(`${key.content}${modifierPostfix}`, true)\r\n                : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\r\n        }\r\n        return {\r\n            props: [createObjectProperty(key, handlerExp)]\r\n        };\r\n    });\r\n};\n\nconst transformShow = (dir, node, context) => {\r\n    const { exp, loc } = dir;\r\n    if (!exp) {\r\n        context.onError(createDOMCompilerError(57 /* X_V_SHOW_NO_EXPRESSION */, loc));\r\n    }\r\n    return {\r\n        props: [],\r\n        needRuntime: context.helper(V_SHOW)\r\n    };\r\n};\n\nconst warnTransitionChildren = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 1 /* COMPONENT */) {\r\n        const component = context.isBuiltInComponent(node.tag);\r\n        if (component === TRANSITION) {\r\n            return () => {\r\n                if (node.children.length && hasMultipleChildren(node)) {\r\n                    context.onError(createDOMCompilerError(58 /* X_TRANSITION_INVALID_CHILDREN */, {\r\n                        start: node.children[0].loc.start,\r\n                        end: node.children[node.children.length - 1].loc.end,\r\n                        source: ''\r\n                    }));\r\n                }\r\n            };\r\n        }\r\n    }\r\n};\r\nfunction hasMultipleChildren(node) {\r\n    // #1352 filter out potential comment nodes.\r\n    const children = (node.children = node.children.filter(c => c.type !== 3 /* COMMENT */));\r\n    const child = children[0];\r\n    return (children.length !== 1 ||\r\n        child.type === 11 /* FOR */ ||\r\n        (child.type === 9 /* IF */ && child.branches.some(hasMultipleChildren)));\r\n}\n\nconst ignoreSideEffectTags = (node, context) => {\r\n    if (node.type === 1 /* ELEMENT */ &&\r\n        node.tagType === 0 /* ELEMENT */ &&\r\n        (node.tag === 'script' || node.tag === 'style')) {\r\n        context.onError(createDOMCompilerError(59 /* X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\r\n        context.removeNode();\r\n    }\r\n};\n\nconst DOMNodeTransforms = [\r\n    transformStyle,\r\n    ...((process.env.NODE_ENV !== 'production') ? [warnTransitionChildren] : [])\r\n];\r\nconst DOMDirectiveTransforms = {\r\n    cloak: noopDirectiveTransform,\r\n    html: transformVHtml,\r\n    text: transformVText,\r\n    model: transformModel,\r\n    on: transformOn,\r\n    show: transformShow\r\n};\r\nfunction compile(template, options = {}) {\r\n    return baseCompile(template, extend({}, parserOptions, options, {\r\n        nodeTransforms: [\r\n            // ignore <script> and <tag>\r\n            // this is not put inside DOMNodeTransforms because that list is used\r\n            // by compiler-ssr to generate vnode fallback branches\r\n            ignoreSideEffectTags,\r\n            ...DOMNodeTransforms,\r\n            ...(options.nodeTransforms || [])\r\n        ],\r\n        directiveTransforms: extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\r\n        transformHoist: null \r\n    }));\r\n}\r\nfunction parse(template, options = {}) {\r\n    return baseParse(template, extend({}, parserOptions, options));\r\n}\n\nexport { DOMDirectiveTransforms, DOMNodeTransforms, TRANSITION, TRANSITION_GROUP, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, compile, createDOMCompilerError, parse, parserOptions, transformStyle };\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\nclass TokenType {\n  constructor(label, conf = {}) {\n    this.label = void 0;\n    this.keyword = void 0;\n    this.beforeExpr = void 0;\n    this.startsExpr = void 0;\n    this.rightAssociative = void 0;\n    this.isLoop = void 0;\n    this.isAssign = void 0;\n    this.prefix = void 0;\n    this.postfix = void 0;\n    this.binop = void 0;\n    this.updateContext = void 0;\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    this.updateContext = null;\n  }\n\n}\nconst keywords = new Map();\n\nfunction createKeyword(name, options = {}) {\n  options.keyword = name;\n  const token = new TokenType(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name, binop) {\n  return new TokenType(name, {\n    beforeExpr,\n    binop\n  });\n}\n\nconst types = {\n  num: new TokenType(\"num\", {\n    startsExpr\n  }),\n  bigint: new TokenType(\"bigint\", {\n    startsExpr\n  }),\n  decimal: new TokenType(\"decimal\", {\n    startsExpr\n  }),\n  regexp: new TokenType(\"regexp\", {\n    startsExpr\n  }),\n  string: new TokenType(\"string\", {\n    startsExpr\n  }),\n  name: new TokenType(\"name\", {\n    startsExpr\n  }),\n  eof: new TokenType(\"eof\"),\n  bracketL: new TokenType(\"[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketHashL: new TokenType(\"#[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketBarL: new TokenType(\"[|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketR: new TokenType(\"]\"),\n  bracketBarR: new TokenType(\"|]\"),\n  braceL: new TokenType(\"{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceBarL: new TokenType(\"{|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceHashL: new TokenType(\"#{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceR: new TokenType(\"}\"),\n  braceBarR: new TokenType(\"|}\"),\n  parenL: new TokenType(\"(\", {\n    beforeExpr,\n    startsExpr\n  }),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", {\n    beforeExpr\n  }),\n  semi: new TokenType(\";\", {\n    beforeExpr\n  }),\n  colon: new TokenType(\":\", {\n    beforeExpr\n  }),\n  doubleColon: new TokenType(\"::\", {\n    beforeExpr\n  }),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", {\n    beforeExpr\n  }),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", {\n    beforeExpr\n  }),\n  template: new TokenType(\"template\"),\n  ellipsis: new TokenType(\"...\", {\n    beforeExpr\n  }),\n  backQuote: new TokenType(\"`\", {\n    startsExpr\n  }),\n  dollarBraceL: new TokenType(\"${\", {\n    beforeExpr,\n    startsExpr\n  }),\n  at: new TokenType(\"@\"),\n  hash: new TokenType(\"#\", {\n    startsExpr\n  }),\n  interpreterDirective: new TokenType(\"#!...\"),\n  eq: new TokenType(\"=\", {\n    beforeExpr,\n    isAssign\n  }),\n  assign: new TokenType(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  incDec: new TokenType(\"++/--\", {\n    prefix,\n    postfix,\n    startsExpr\n  }),\n  bang: new TokenType(\"!\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  tilde: new TokenType(\"~\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {\n    beforeExpr,\n    binop: 9,\n    prefix,\n    startsExpr\n  }),\n  modulo: new TokenType(\"%\", {\n    beforeExpr,\n    binop: 10,\n    startsExpr\n  }),\n  star: new TokenType(\"*\", {\n    binop: 10\n  }),\n  slash: createBinop(\"/\", 10),\n  exponent: new TokenType(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true\n  }),\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", {\n    beforeExpr\n  }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", {\n    beforeExpr\n  }),\n  _do: createKeyword(\"do\", {\n    isLoop,\n    beforeExpr\n  }),\n  _else: createKeyword(\"else\", {\n    beforeExpr\n  }),\n  _finally: createKeyword(\"finally\"),\n  _for: createKeyword(\"for\", {\n    isLoop\n  }),\n  _function: createKeyword(\"function\", {\n    startsExpr\n  }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", {\n    beforeExpr\n  }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _while: createKeyword(\"while\", {\n    isLoop\n  }),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", {\n    beforeExpr,\n    startsExpr\n  }),\n  _this: createKeyword(\"this\", {\n    startsExpr\n  }),\n  _super: createKeyword(\"super\", {\n    startsExpr\n  }),\n  _class: createKeyword(\"class\", {\n    startsExpr\n  }),\n  _extends: createKeyword(\"extends\", {\n    beforeExpr\n  }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", {\n    startsExpr\n  }),\n  _null: createKeyword(\"null\", {\n    startsExpr\n  }),\n  _true: createKeyword(\"true\", {\n    startsExpr\n  }),\n  _false: createKeyword(\"false\", {\n    startsExpr\n  }),\n  _in: createKeyword(\"in\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _instanceof: createKeyword(\"instanceof\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _typeof: createKeyword(\"typeof\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _void: createKeyword(\"void\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _delete: createKeyword(\"delete\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  })\n};\n\nconst SCOPE_OTHER = 0b00000000,\n      SCOPE_PROGRAM = 0b00000001,\n      SCOPE_FUNCTION = 0b00000010,\n      SCOPE_ARROW = 0b00000100,\n      SCOPE_SIMPLE_CATCH = 0b00001000,\n      SCOPE_SUPER = 0b00010000,\n      SCOPE_DIRECT_SUPER = 0b00100000,\n      SCOPE_CLASS = 0b01000000,\n      SCOPE_TS_MODULE = 0b10000000,\n      SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\nconst BIND_KIND_VALUE = 0b00000000001,\n      BIND_KIND_TYPE = 0b00000000010,\n      BIND_SCOPE_VAR = 0b00000000100,\n      BIND_SCOPE_LEXICAL = 0b00000001000,\n      BIND_SCOPE_FUNCTION = 0b00000010000,\n      BIND_FLAGS_NONE = 0b00001000000,\n      BIND_FLAGS_CLASS = 0b00010000000,\n      BIND_FLAGS_TS_ENUM = 0b00100000000,\n      BIND_FLAGS_TS_CONST_ENUM = 0b01000000000,\n      BIND_FLAGS_TS_EXPORT_ONLY = 0b10000000000;\nconst BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS,\n      BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,\n      BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,\n      BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,\n      BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,\n      BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,\n      BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,\n      BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n      BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,\n      BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,\n      BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n      BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY;\nconst CLASS_ELEMENT_FLAG_STATIC = 0b100,\n      CLASS_ELEMENT_KIND_GETTER = 0b010,\n      CLASS_ELEMENT_KIND_SETTER = 0b001,\n      CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\nconst CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n      CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n      CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n      CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n      CLASS_ELEMENT_OTHER = 0;\n\nconst lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nconst lineBreakG = new RegExp(lineBreak.source, \"g\");\nfunction isNewLine(code) {\n  switch (code) {\n    case 10:\n    case 13:\n    case 8232:\n    case 8233:\n      return true;\n\n    default:\n      return false;\n  }\n}\nconst skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nfunction isWhitespace(code) {\n  switch (code) {\n    case 0x0009:\n    case 0x000b:\n    case 0x000c:\n    case 32:\n    case 160:\n    case 5760:\n    case 0x2000:\n    case 0x2001:\n    case 0x2002:\n    case 0x2003:\n    case 0x2004:\n    case 0x2005:\n    case 0x2006:\n    case 0x2007:\n    case 0x2008:\n    case 0x2009:\n    case 0x200a:\n    case 0x202f:\n    case 0x205f:\n    case 0x3000:\n    case 0xfeff:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nclass Position {\n  constructor(line, col) {\n    this.line = void 0;\n    this.column = void 0;\n    this.line = line;\n    this.column = col;\n  }\n\n}\nclass SourceLocation {\n  constructor(start, end) {\n    this.start = void 0;\n    this.end = void 0;\n    this.filename = void 0;\n    this.identifierName = void 0;\n    this.start = start;\n    this.end = end;\n  }\n\n}\nfunction getLineInfo(input, offset) {\n  let line = 1;\n  let lineStart = 0;\n  let match;\n  lineBreakG.lastIndex = 0;\n\n  while ((match = lineBreakG.exec(input)) && match.index < offset) {\n    line++;\n    lineStart = lineBreakG.lastIndex;\n  }\n\n  return new Position(line, offset - lineStart);\n}\n\nclass BaseParser {\n  constructor() {\n    this.options = void 0;\n    this.inModule = void 0;\n    this.scope = void 0;\n    this.classScope = void 0;\n    this.prodParam = void 0;\n    this.plugins = void 0;\n    this.filename = void 0;\n    this.sawUnambiguousESM = false;\n    this.ambiguousScriptDifferentAst = false;\n    this.state = void 0;\n    this.input = void 0;\n    this.length = void 0;\n  }\n\n  hasPlugin(name) {\n    return this.plugins.has(name);\n  }\n\n  getPluginOption(plugin, name) {\n    if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n  }\n\n}\n\nfunction last(stack) {\n  return stack[stack.length - 1];\n}\n\nclass CommentsParser extends BaseParser {\n  addComment(comment) {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.trailingComments.push(comment);\n    this.state.leadingComments.push(comment);\n  }\n\n  adjustCommentsAfterTrailingComma(node, elements, takeAllComments) {\n    if (this.state.leadingComments.length === 0) {\n      return;\n    }\n\n    let lastElement = null;\n    let i = elements.length;\n\n    while (lastElement === null && i > 0) {\n      lastElement = elements[--i];\n    }\n\n    if (lastElement === null) {\n      return;\n    }\n\n    for (let j = 0; j < this.state.leadingComments.length; j++) {\n      if (this.state.leadingComments[j].end < this.state.commentPreviousNode.end) {\n        this.state.leadingComments.splice(j, 1);\n        j--;\n      }\n    }\n\n    const newTrailingComments = [];\n\n    for (let i = 0; i < this.state.leadingComments.length; i++) {\n      const leadingComment = this.state.leadingComments[i];\n\n      if (leadingComment.end < node.end) {\n        newTrailingComments.push(leadingComment);\n\n        if (!takeAllComments) {\n          this.state.leadingComments.splice(i, 1);\n          i--;\n        }\n      } else {\n        if (node.trailingComments === undefined) {\n          node.trailingComments = [];\n        }\n\n        node.trailingComments.push(leadingComment);\n      }\n    }\n\n    if (takeAllComments) this.state.leadingComments = [];\n\n    if (newTrailingComments.length > 0) {\n      lastElement.trailingComments = newTrailingComments;\n    } else if (lastElement.trailingComments !== undefined) {\n      lastElement.trailingComments = [];\n    }\n  }\n\n  processComment(node) {\n    if (node.type === \"Program\" && node.body.length > 0) return;\n    const stack = this.state.commentStack;\n    let firstChild, lastChild, trailingComments, i, j;\n\n    if (this.state.trailingComments.length > 0) {\n      if (this.state.trailingComments[0].start >= node.end) {\n        trailingComments = this.state.trailingComments;\n        this.state.trailingComments = [];\n      } else {\n        this.state.trailingComments.length = 0;\n      }\n    } else if (stack.length > 0) {\n      const lastInStack = last(stack);\n\n      if (lastInStack.trailingComments && lastInStack.trailingComments[0].start >= node.end) {\n        trailingComments = lastInStack.trailingComments;\n        delete lastInStack.trailingComments;\n      }\n    }\n\n    if (stack.length > 0 && last(stack).start >= node.start) {\n      firstChild = stack.pop();\n    }\n\n    while (stack.length > 0 && last(stack).start >= node.start) {\n      lastChild = stack.pop();\n    }\n\n    if (!lastChild && firstChild) lastChild = firstChild;\n\n    if (firstChild) {\n      switch (node.type) {\n        case \"ObjectExpression\":\n          this.adjustCommentsAfterTrailingComma(node, node.properties);\n          break;\n\n        case \"ObjectPattern\":\n          this.adjustCommentsAfterTrailingComma(node, node.properties, true);\n          break;\n\n        case \"CallExpression\":\n          this.adjustCommentsAfterTrailingComma(node, node.arguments);\n          break;\n\n        case \"ArrayExpression\":\n          this.adjustCommentsAfterTrailingComma(node, node.elements);\n          break;\n\n        case \"ArrayPattern\":\n          this.adjustCommentsAfterTrailingComma(node, node.elements, true);\n          break;\n      }\n    } else if (this.state.commentPreviousNode && (this.state.commentPreviousNode.type === \"ImportSpecifier\" && node.type !== \"ImportSpecifier\" || this.state.commentPreviousNode.type === \"ExportSpecifier\" && node.type !== \"ExportSpecifier\")) {\n      this.adjustCommentsAfterTrailingComma(node, [this.state.commentPreviousNode]);\n    }\n\n    if (lastChild) {\n      if (lastChild.leadingComments) {\n        if (lastChild !== node && lastChild.leadingComments.length > 0 && last(lastChild.leadingComments).end <= node.start) {\n          node.leadingComments = lastChild.leadingComments;\n          delete lastChild.leadingComments;\n        } else {\n          for (i = lastChild.leadingComments.length - 2; i >= 0; --i) {\n            if (lastChild.leadingComments[i].end <= node.start) {\n              node.leadingComments = lastChild.leadingComments.splice(0, i + 1);\n              break;\n            }\n          }\n        }\n      }\n    } else if (this.state.leadingComments.length > 0) {\n      if (last(this.state.leadingComments).end <= node.start) {\n        if (this.state.commentPreviousNode) {\n          for (j = 0; j < this.state.leadingComments.length; j++) {\n            if (this.state.leadingComments[j].end < this.state.commentPreviousNode.end) {\n              this.state.leadingComments.splice(j, 1);\n              j--;\n            }\n          }\n        }\n\n        if (this.state.leadingComments.length > 0) {\n          node.leadingComments = this.state.leadingComments;\n          this.state.leadingComments = [];\n        }\n      } else {\n        for (i = 0; i < this.state.leadingComments.length; i++) {\n          if (this.state.leadingComments[i].end > node.start) {\n            break;\n          }\n        }\n\n        const leadingComments = this.state.leadingComments.slice(0, i);\n\n        if (leadingComments.length) {\n          node.leadingComments = leadingComments;\n        }\n\n        trailingComments = this.state.leadingComments.slice(i);\n\n        if (trailingComments.length === 0) {\n          trailingComments = null;\n        }\n      }\n    }\n\n    this.state.commentPreviousNode = node;\n\n    if (trailingComments) {\n      if (trailingComments.length && trailingComments[0].start >= node.start && last(trailingComments).end <= node.end) {\n        node.innerComments = trailingComments;\n      } else {\n        const firstTrailingCommentIndex = trailingComments.findIndex(comment => comment.end >= node.end);\n\n        if (firstTrailingCommentIndex > 0) {\n          node.innerComments = trailingComments.slice(0, firstTrailingCommentIndex);\n          node.trailingComments = trailingComments.slice(firstTrailingCommentIndex);\n        } else {\n          node.trailingComments = trailingComments;\n        }\n      }\n    }\n\n    stack.push(node);\n  }\n\n}\n\nconst ErrorMessages = Object.freeze({\n  AccessorIsGenerator: \"A %0ter cannot be a generator\",\n  ArgumentsInClass: \"'arguments' is only allowed in functions and class methods\",\n  AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block\",\n  AwaitBindingIdentifier: \"Can not use 'await' as identifier inside an async function\",\n  AwaitExpressionFormalParameter: \"await is not allowed in async function parameters\",\n  AwaitNotInAsyncFunction: \"Can not use keyword 'await' outside an async function\",\n  BadGetterArity: \"getter must not have any formal parameters\",\n  BadSetterArity: \"setter must have exactly one formal parameter\",\n  BadSetterRestParameter: \"setter function argument must not be a rest parameter\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'\",\n  ConstructorClassPrivateField: \"Classes may not have a private field named '#constructor'\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor\",\n  ConstructorIsAsync: \"Constructor can't be an async function\",\n  ConstructorIsGenerator: \"Constructor can't be a generator\",\n  DeclarationMissingInitializer: \"%0 require an initialization value\",\n  DecoratorBeforeExport: \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax\",\n  DecoratorConstructor: \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass: \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block\",\n  DeletePrivateField: \"Deleting a private field is not allowed\",\n  DestructureNamedImport: \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: \"`%0` has already been exported. Exported identifiers must be unique.\",\n  DuplicateProto: \"Redefinition of __proto__ property\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag\",\n  DuplicateStaticBlock: \"Duplicate static block in the same class\",\n  ElementAfterRest: \"Rest element must be last element\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape\",\n  ExportBindingIsString: \"A string literal cannot be used as an exported binding without `from`.\\n- Did you mean `export { %0 as '%1' } from 'some-module'`?\",\n  ExportDefaultFromAsIdentifier: \"'from' is not allowed as an identifier after 'export default'\",\n  ForInOfLoopInitializer: \"%0 loop variable declaration may not have an initializer\",\n  GeneratorInSingleStatementContext: \"Generators can only be declared at the top level or inside a block\",\n  IllegalBreakContinue: \"Unsyntactic %0\",\n  IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list\",\n  IllegalReturn: \"'return' outside of function\",\n  ImportBindingIsString: 'A string literal cannot be used as an imported binding.\\n- Did you mean `import { \"%0\" as foo }`?',\n  ImportCallArgumentTrailingComma: \"Trailing comma is disallowed inside import(...) arguments\",\n  ImportCallArity: \"import() requires exactly %0\",\n  ImportCallNotNewExpression: \"Cannot use new with import(...)\",\n  ImportCallSpreadArgument: \"... is not allowed in import()\",\n  ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: \"module\"'`,\n  ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral\",\n  InvalidCodePoint: \"Code point out of bounds\",\n  InvalidDecimal: \"Invalid decimal\",\n  InvalidDigit: \"Expected number in radix %0\",\n  InvalidEscapeSequence: \"Bad character escape sequence\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template\",\n  InvalidEscapedReservedWord: \"Escape sequence in keyword %0\",\n  InvalidIdentifier: \"Invalid identifier %0\",\n  InvalidLhs: \"Invalid left-hand side in %0\",\n  InvalidLhsBinding: \"Binding invalid left-hand side in %0\",\n  InvalidNumber: \"Invalid number\",\n  InvalidOrMissingExponent: \"Floating-point numbers require a valid exponent after the 'e'\",\n  InvalidOrUnexpectedToken: \"Unexpected character '%0'\",\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern\",\n  InvalidPrivateFieldResolution: \"Private name #%0 is not defined\",\n  InvalidPropertyBindingPattern: \"Binding member expression\",\n  InvalidRecordProperty: \"Only properties and spread elements are allowed in record definitions\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument\",\n  LabelRedeclaration: \"Label '%0' is already declared\",\n  LetInLexicalBinding: \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'\",\n  MalformedRegExpFlags: \"Invalid regular expression flag\",\n  MissingClassName: \"A class name is required\",\n  MissingEqInAssignment: \"Only '=' operator can be used for specifying default value.\",\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX\",\n  MixingCoalesceWithLogical: \"Nullish coalescing operator(??) requires parens when mixing with logical operators\",\n  ModuleAttributeDifferentFromType: \"The only accepted module attribute is `type`\",\n  ModuleAttributeInvalidValue: \"Only string literals are allowed as module attribute values\",\n  ModuleAttributesWithDuplicateKeys: 'Duplicate key \"%0\" is not allowed in module attributes',\n  ModuleExportNameHasLoneSurrogate: \"An export name cannot include a lone surrogate, found '\\\\u%0'\",\n  ModuleExportUndefined: \"Export '%0' is not defined\",\n  MultipleDefaultsInSwitch: \"Multiple default clauses\",\n  NewlineAfterThrow: \"Illegal newline after throw\",\n  NoCatchOrFinally: \"Missing catch or finally clause\",\n  NumberIdentifier: \"Identifier directly after number\",\n  NumericSeparatorInEscapeSequence: \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences\",\n  ObsoleteAwaitStar: \"await* has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew: \"constructors in/after an Optional Chain are not allowed\",\n  OptionalChainingNoTemplate: \"Tagged Template Literals are not allowed in optionalChain\",\n  ParamDupe: \"Argument name clash\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter\",\n  PatternHasMethod: \"Object pattern can't contain methods\",\n  PipelineBodyNoArrow: 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized',\n  PipelineBodySequenceExpression: \"Pipeline body may not be a comma-separated sequence expression\",\n  PipelineHeadSequenceExpression: \"Pipeline head should not be a comma-separated sequence expression\",\n  PipelineTopicUnused: \"Pipeline is in topic style but does not use topic reference\",\n  PrimaryTopicNotAllowed: \"Topic reference was used in a lexical context without topic binding\",\n  PrimaryTopicRequiresSmartPipeline: \"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.\",\n  PrivateInExpectedIn: \"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`)\",\n  PrivateNameRedeclaration: \"Duplicate private name #%0\",\n  RecordExpressionBarIncorrectEndSyntaxType: \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  RecordExpressionBarIncorrectStartSyntaxType: \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  RecordExpressionHashIncorrectStartSyntaxType: \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element\",\n  SloppyFunction: \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement\",\n  StaticPrototype: \"Classes may not have static property named prototype\",\n  StrictDelete: \"Deleting local variable in strict mode\",\n  StrictEvalArguments: \"Assigning to '%0' in strict mode\",\n  StrictEvalArgumentsBinding: \"Binding '%0' in strict mode\",\n  StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block\",\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'\",\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode\",\n  StrictWith: \"'with' in strict mode\",\n  SuperNotAllowed: \"super() is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super\",\n  TrailingDecorator: \"Decorators must be attached to a class element\",\n  TupleExpressionBarIncorrectEndSyntaxType: \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  TupleExpressionBarIncorrectStartSyntaxType: \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'\",\n  TupleExpressionHashIncorrectStartSyntaxType: \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder\",\n  UnexpectedAwaitAfterPipelineBody: 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token\",\n  UnexpectedImportExport: \"'import' and 'export' may only appear at the top level\",\n  UnexpectedKeyword: \"Unexpected keyword '%0'\",\n  UnexpectedLeadingDecorator: \"Leading decorators must be attached to a class declaration\",\n  UnexpectedLexicalDeclaration: \"Lexical declaration cannot appear in a single-statement context\",\n  UnexpectedNewTarget: \"new.target can only be used in functions\",\n  UnexpectedNumericSeparator: \"A numeric separator is only allowed between two digits\",\n  UnexpectedPrivateField: \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n  UnexpectedReservedWord: \"Unexpected reserved word '%0'\",\n  UnexpectedSuper: \"super is only allowed in object methods and classes\",\n  UnexpectedToken: \"Unexpected token '%0'\",\n  UnexpectedTokenUnaryExponentiation: \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport: \"A decorated export must export a class declaration\",\n  UnsupportedDefaultExport: \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport: \"import can only be used in import() or import.meta\",\n  UnsupportedMetaProperty: \"The only valid meta property for %0 is %0.%1\",\n  UnsupportedParameterDecorator: \"Decorators cannot be used to decorate parameters\",\n  UnsupportedPropertyDecorator: \"Decorators cannot be used to decorate object literal properties\",\n  UnsupportedSuper: \"super can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop])\",\n  UnterminatedComment: \"Unterminated comment\",\n  UnterminatedRegExp: \"Unterminated regular expression\",\n  UnterminatedString: \"Unterminated string constant\",\n  UnterminatedTemplate: \"Unterminated template\",\n  VarRedeclaration: \"Identifier '%0' has already been declared\",\n  YieldBindingIdentifier: \"Can not use 'yield' as identifier inside a generator\",\n  YieldInParameter: \"yield is not allowed in generator parameters\",\n  ZeroDigitNumericSeparator: \"Numeric separator can not be used after leading 0\"\n});\n\nclass ParserError extends CommentsParser {\n  getLocationForPosition(pos) {\n    let loc;\n    if (pos === this.state.start) loc = this.state.startLoc;else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;else if (pos === this.state.end) loc = this.state.endLoc;else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;else loc = getLineInfo(this.input, pos);\n    return loc;\n  }\n\n  raise(pos, errorTemplate, ...params) {\n    return this.raiseWithData(pos, undefined, errorTemplate, ...params);\n  }\n\n  raiseWithData(pos, data, errorTemplate, ...params) {\n    const loc = this.getLocationForPosition(pos);\n    const message = errorTemplate.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n    return this._raise(Object.assign({\n      loc,\n      pos\n    }, data), message);\n  }\n\n  _raise(errorContext, message) {\n    const err = new SyntaxError(message);\n    Object.assign(err, errorContext);\n\n    if (this.options.errorRecovery) {\n      if (!this.isLookahead) this.state.errors.push(err);\n      return err;\n    } else {\n      throw err;\n    }\n  }\n\n}\n\nfunction isSimpleProperty(node) {\n  return node != null && node.type === \"Property\" && node.kind === \"init\" && node.method === false;\n}\n\nvar estree = (superClass => class extends superClass {\n  estreeParseRegExpLiteral({\n    pattern,\n    flags\n  }) {\n    let regex = null;\n\n    try {\n      regex = new RegExp(pattern, flags);\n    } catch (e) {}\n\n    const node = this.estreeParseLiteral(regex);\n    node.regex = {\n      pattern,\n      flags\n    };\n    return node;\n  }\n\n  estreeParseBigIntLiteral(value) {\n    const bigInt = typeof BigInt !== \"undefined\" ? BigInt(value) : null;\n    const node = this.estreeParseLiteral(bigInt);\n    node.bigint = String(node.value || value);\n    return node;\n  }\n\n  estreeParseDecimalLiteral(value) {\n    const decimal = null;\n    const node = this.estreeParseLiteral(decimal);\n    node.decimal = String(node.value || value);\n    return node;\n  }\n\n  estreeParseLiteral(value) {\n    return this.parseLiteral(value, \"Literal\");\n  }\n\n  directiveToStmt(directive) {\n    const directiveLiteral = directive.value;\n    const stmt = this.startNodeAt(directive.start, directive.loc.start);\n    const expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start);\n    expression.value = directiveLiteral.value;\n    expression.raw = directiveLiteral.extra.raw;\n    stmt.expression = this.finishNodeAt(expression, \"Literal\", directiveLiteral.end, directiveLiteral.loc.end);\n    stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n    return this.finishNodeAt(stmt, \"ExpressionStatement\", directive.end, directive.loc.end);\n  }\n\n  initFunction(node, isAsync) {\n    super.initFunction(node, isAsync);\n    node.expression = false;\n  }\n\n  checkDeclaration(node) {\n    if (isSimpleProperty(node)) {\n      this.checkDeclaration(node.value);\n    } else {\n      super.checkDeclaration(node);\n    }\n  }\n\n  getObjectOrClassMethodParams(method) {\n    return method.value.params;\n  }\n\n  checkLVal(expr, bindingType = BIND_NONE, checkClashes, contextDescription, disallowLetBinding) {\n    switch (expr.type) {\n      case \"ObjectPattern\":\n        expr.properties.forEach(prop => {\n          this.checkLVal(prop.type === \"Property\" ? prop.value : prop, bindingType, checkClashes, \"object destructuring pattern\", disallowLetBinding);\n        });\n        break;\n\n      default:\n        super.checkLVal(expr, bindingType, checkClashes, contextDescription, disallowLetBinding);\n    }\n  }\n\n  checkProto(prop, isRecord, protoRef, refExpressionErrors) {\n    if (prop.method) {\n      return;\n    }\n\n    super.checkProto(prop, isRecord, protoRef, refExpressionErrors);\n  }\n\n  isValidDirective(stmt) {\n    var _stmt$expression$extr;\n\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && typeof stmt.expression.value === \"string\" && !((_stmt$expression$extr = stmt.expression.extra) == null ? void 0 : _stmt$expression$extr.parenthesized);\n  }\n\n  stmtToDirective(stmt) {\n    const directive = super.stmtToDirective(stmt);\n    const value = stmt.expression.value;\n    directive.value.value = value;\n    return directive;\n  }\n\n  parseBlockBody(node, allowDirectives, topLevel, end) {\n    super.parseBlockBody(node, allowDirectives, topLevel, end);\n    const directiveStatements = node.directives.map(d => this.directiveToStmt(d));\n    node.body = directiveStatements.concat(node.body);\n    delete node.directives;\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true);\n\n    if (method.typeParameters) {\n      method.value.typeParameters = method.typeParameters;\n      delete method.typeParameters;\n    }\n\n    classBody.body.push(method);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    switch (this.state.type) {\n      case types.num:\n      case types.string:\n        return this.estreeParseLiteral(this.state.value);\n\n      case types.regexp:\n        return this.estreeParseRegExpLiteral(this.state.value);\n\n      case types.bigint:\n        return this.estreeParseBigIntLiteral(this.state.value);\n\n      case types.decimal:\n        return this.estreeParseDecimalLiteral(this.state.value);\n\n      case types._null:\n        return this.estreeParseLiteral(null);\n\n      case types._true:\n        return this.estreeParseLiteral(true);\n\n      case types._false:\n        return this.estreeParseLiteral(false);\n\n      default:\n        return super.parseExprAtom(refExpressionErrors);\n    }\n  }\n\n  parseLiteral(value, type, startPos, startLoc) {\n    const node = super.parseLiteral(value, type, startPos, startLoc);\n    node.raw = node.extra.raw;\n    delete node.extra;\n    return node;\n  }\n\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    super.parseFunctionBody(node, allowExpression, isMethod);\n    node.expression = node.body.type !== \"BlockStatement\";\n  }\n\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    let funcNode = this.startNode();\n    funcNode.kind = node.kind;\n    funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);\n    funcNode.type = \"FunctionExpression\";\n    delete funcNode.kind;\n    node.value = funcNode;\n    type = type === \"ClassMethod\" ? \"MethodDefinition\" : type;\n    return this.finishNode(node, type);\n  }\n\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);\n\n    if (node) {\n      node.type = \"Property\";\n      if (node.kind === \"method\") node.kind = \"init\";\n      node.shorthand = false;\n    }\n\n    return node;\n  }\n\n  parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n    const node = super.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n\n    if (node) {\n      node.kind = \"init\";\n      node.type = \"Property\";\n    }\n\n    return node;\n  }\n\n  toAssignable(node) {\n    if (isSimpleProperty(node)) {\n      this.toAssignable(node.value);\n      return node;\n    }\n\n    return super.toAssignable(node);\n  }\n\n  toAssignableObjectExpressionProp(prop, isLast) {\n    if (prop.kind === \"get\" || prop.kind === \"set\") {\n      throw this.raise(prop.key.start, ErrorMessages.PatternHasAccessor);\n    } else if (prop.method) {\n      throw this.raise(prop.key.start, ErrorMessages.PatternHasMethod);\n    } else {\n      super.toAssignableObjectExpressionProp(prop, isLast);\n    }\n  }\n\n  finishCallExpression(node, optional) {\n    super.finishCallExpression(node, optional);\n\n    if (node.callee.type === \"Import\") {\n      node.type = \"ImportExpression\";\n      node.source = node.arguments[0];\n      delete node.arguments;\n      delete node.callee;\n    }\n\n    return node;\n  }\n\n  toReferencedListDeep(exprList, isParenthesizedExpr) {\n    if (!exprList) {\n      return;\n    }\n\n    super.toReferencedListDeep(exprList, isParenthesizedExpr);\n  }\n\n  parseExport(node) {\n    super.parseExport(node);\n\n    switch (node.type) {\n      case \"ExportAllDeclaration\":\n        node.exported = null;\n        break;\n\n      case \"ExportNamedDeclaration\":\n        if (node.specifiers.length === 1 && node.specifiers[0].type === \"ExportNamespaceSpecifier\") {\n          node.type = \"ExportAllDeclaration\";\n          node.exported = node.specifiers[0].exported;\n          delete node.specifiers;\n        }\n\n        break;\n    }\n\n    return node;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    const node = super.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n    if (state.optionalChainMember) {\n      if (node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\") {\n        node.type = node.type.substring(8);\n      }\n\n      if (state.stop) {\n        const chain = this.startNodeAtNode(node);\n        chain.expression = node;\n        return this.finishNode(chain, \"ChainExpression\");\n      }\n    } else if (node.type === \"MemberExpression\" || node.type === \"CallExpression\") {\n      node.optional = false;\n    }\n\n    return node;\n  }\n\n});\n\nclass TokContext {\n  constructor(token, isExpr, preserveSpace, override) {\n    this.token = void 0;\n    this.isExpr = void 0;\n    this.preserveSpace = void 0;\n    this.override = void 0;\n    this.token = token;\n    this.isExpr = !!isExpr;\n    this.preserveSpace = !!preserveSpace;\n    this.override = override;\n  }\n\n}\nconst types$1 = {\n  braceStatement: new TokContext(\"{\", false),\n  braceExpression: new TokContext(\"{\", true),\n  recordExpression: new TokContext(\"#{\", true),\n  templateQuasi: new TokContext(\"${\", false),\n  parenStatement: new TokContext(\"(\", false),\n  parenExpression: new TokContext(\"(\", true),\n  template: new TokContext(\"`\", true, true, p => p.readTmplToken()),\n  functionExpression: new TokContext(\"function\", true),\n  functionStatement: new TokContext(\"function\", false)\n};\n\ntypes.parenR.updateContext = types.braceR.updateContext = function () {\n  if (this.state.context.length === 1) {\n    this.state.exprAllowed = true;\n    return;\n  }\n\n  let out = this.state.context.pop();\n\n  if (out === types$1.braceStatement && this.curContext().token === \"function\") {\n    out = this.state.context.pop();\n  }\n\n  this.state.exprAllowed = !out.isExpr;\n};\n\ntypes.name.updateContext = function (prevType) {\n  let allowed = false;\n\n  if (prevType !== types.dot) {\n    if (this.state.value === \"of\" && !this.state.exprAllowed && prevType !== types._function && prevType !== types._class || this.state.value === \"yield\" && this.prodParam.hasYield) {\n      allowed = true;\n    }\n  }\n\n  this.state.exprAllowed = allowed;\n\n  if (this.state.isIterator) {\n    this.state.isIterator = false;\n  }\n};\n\ntypes.braceL.updateContext = function (prevType) {\n  this.state.context.push(this.braceIsBlock(prevType) ? types$1.braceStatement : types$1.braceExpression);\n  this.state.exprAllowed = true;\n};\n\ntypes.dollarBraceL.updateContext = function () {\n  this.state.context.push(types$1.templateQuasi);\n  this.state.exprAllowed = true;\n};\n\ntypes.parenL.updateContext = function (prevType) {\n  const statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;\n  this.state.context.push(statementParens ? types$1.parenStatement : types$1.parenExpression);\n  this.state.exprAllowed = true;\n};\n\ntypes.incDec.updateContext = function () {};\n\ntypes._function.updateContext = types._class.updateContext = function (prevType) {\n  if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else && !(prevType === types._return && this.hasPrecedingLineBreak()) && !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat)) {\n    this.state.context.push(types$1.functionExpression);\n  } else {\n    this.state.context.push(types$1.functionStatement);\n  }\n\n  this.state.exprAllowed = false;\n};\n\ntypes.backQuote.updateContext = function () {\n  if (this.curContext() === types$1.template) {\n    this.state.context.pop();\n  } else {\n    this.state.context.push(types$1.template);\n  }\n\n  this.state.exprAllowed = false;\n};\n\ntypes.braceHashL.updateContext = function () {\n  this.state.context.push(types$1.recordExpression);\n  this.state.exprAllowed = true;\n};\n\nlet 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\\u08a0-\\u08b4\\u08b6-\\u08c7\\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\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\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-\\u170c\\u170e-\\u1711\\u1720-\\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-\\u1b4b\\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-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\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-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\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\";\nlet 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\\u08d3-\\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\\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\\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-\\u0ecd\\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-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\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-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\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\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst 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, 157, 310, 10, 21, 11, 7, 153, 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, 107, 20, 28, 22, 13, 52, 76, 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, 85, 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, 230, 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, 35, 56, 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, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 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, 8952, 286, 50, 2, 18, 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, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 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, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];\nconst 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, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 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, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 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, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n\n  return false;\n}\n\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nconst reservedWords = {\n  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\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords$1 = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\nfunction isKeyword(word) {\n  return keywords$1.has(word);\n}\n\nconst keywordRelationalOperator = /^in(stanceof)?$/;\nfunction isIteratorStart(current, next) {\n  return current === 64 && next === 64;\n}\n\nconst reservedTypes = new Set([\"_\", \"any\", \"bool\", \"boolean\", \"empty\", \"extends\", \"false\", \"interface\", \"mixed\", \"null\", \"number\", \"static\", \"string\", \"true\", \"typeof\", \"void\"]);\nconst FlowErrors = Object.freeze({\n  AmbiguousConditionalArrow: \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind: \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module\",\n  AssignReservedType: \"Cannot overwrite reserved type %0\",\n  DeclareClassElement: \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer: \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports: \"Duplicate `declare module.exports` statement\",\n  EnumBooleanMemberNotInitialized: \"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.\",\n  EnumDuplicateMemberName: \"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.\",\n  EnumInconsistentMemberValues: \"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.\",\n  EnumInvalidExplicitType: \"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidExplicitTypeUnknownSupplied: \"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidMemberInitializerPrimaryType: \"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.\",\n  EnumInvalidMemberInitializerSymbolType: \"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.\",\n  EnumInvalidMemberInitializerUnknownType: \"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.\",\n  EnumInvalidMemberName: \"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.\",\n  EnumNumberMemberNotInitialized: \"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.\",\n  EnumStringMemberInconsistentlyInitailized: \"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.\",\n  ImportTypeShorthandOnlyInPureImport: \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements\",\n  InexactInsideExact: \"Explicit inexact syntax cannot appear inside an explicit exact object type\",\n  InexactInsideNonObject: \"Explicit inexact syntax cannot appear in class or interface definitions\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance\",\n  InvalidNonTypeImportInDeclareModule: \"Imports within a `declare module` body must always be `import type` or `import typeof`\",\n  MissingTypeParamDefault: \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule: \"`declare module` cannot be used inside another `declare module`\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment\",\n  OptionalBindingPattern: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  SpreadVariance: \"Spread properties cannot have variance\",\n  TypeBeforeInitializer: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`\",\n  TypeCastInPattern: \"The type cast expression is expected to be wrapped with parenthesis\",\n  UnexpectedExplicitInexactInObject: \"Explicit inexact syntax must appear at the end of an inexact object\",\n  UnexpectedReservedType: \"Unexpected reserved type %0\",\n  UnexpectedReservedUnderscore: \"`_` is only allowed as a type argument to call or new\",\n  UnexpectedSpaceBetweenModuloChecks: \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType: \"Spread operator cannot appear in class or interface definitions\",\n  UnexpectedSubtractionOperand: 'Unexpected token, expected \"number\" or \"bigint\"',\n  UnexpectedTokenAfterTypeParameter: \"Expected an arrow function after this type parameter declaration\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction: \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`\",\n  UnsupportedDeclareExportKind: \"`declare export %0` is not supported. Use `%1` instead\",\n  UnsupportedStatementInDeclareModule: \"Only declares and type imports are allowed inside declare module\",\n  UnterminatedFlowComment: \"Unterminated flow-comment\"\n});\n\nfunction isEsModuleType(bodyElement) {\n  return bodyElement.type === \"DeclareExportAllDeclaration\" || bodyElement.type === \"DeclareExportDeclaration\" && (!bodyElement.declaration || bodyElement.declaration.type !== \"TypeAlias\" && bodyElement.declaration.type !== \"InterfaceDeclaration\");\n}\n\nfunction hasTypeImportKind(node) {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(state) {\n  return (state.type === types.name || !!state.type.keyword) && state.value !== \"from\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\"\n};\n\nfunction partition(list, test) {\n  const list1 = [];\n  const list2 = [];\n\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\nvar flow = (superClass => {\n  var _temp;\n\n  return _temp = class extends superClass {\n    constructor(options, input) {\n      super(options, input);\n      this.flowPragma = void 0;\n      this.flowPragma = undefined;\n    }\n\n    shouldParseTypes() {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    shouldParseEnums() {\n      return !!this.getPluginOption(\"flow\", \"enums\");\n    }\n\n    finishToken(type, val) {\n      if (type !== types.string && type !== types.semi && type !== types.interpreterDirective) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n\n      return super.finishToken(type, val);\n    }\n\n    addComment(comment) {\n      if (this.flowPragma === undefined) {\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n\n        if (!matches) ; else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n\n      return super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok) {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || types.colon);\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate() {\n      const node = this.startNode();\n      const moduloLoc = this.state.startLoc;\n      const moduloPos = this.state.start;\n      this.expect(types.modulo);\n      const checksLoc = this.state.startLoc;\n      this.expectContextual(\"checks\");\n\n      if (moduloLoc.line !== checksLoc.line || moduloLoc.column !== checksLoc.column - 1) {\n        this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);\n      }\n\n      if (this.eat(types.parenL)) {\n        node.value = this.parseExpression();\n        this.expect(types.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser() {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(types.colon);\n      let type = null;\n      let predicate = null;\n\n      if (this.match(types.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n\n        if (this.match(types.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(node) {\n      this.next();\n      this.flowParseInterfaceish(node, true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(node) {\n      this.next();\n      const id = node.id = this.parseIdentifier();\n      const typeNode = this.startNode();\n      const typeContainer = this.startNode();\n\n      if (this.isRelational(\"<\")) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(types.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      this.expect(types.parenR);\n      [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n      typeContainer.typeAnnotation = this.finishNode(typeNode, \"FunctionTypeAnnotation\");\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n      this.resetEndLocation(id);\n      this.semicolon();\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(node, insideModule) {\n      if (this.match(types._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(types._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(types._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(\"module\")) {\n        if (this.match(types.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);\n          }\n\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(\"type\")) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(\"opaque\")) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(\"interface\")) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(types._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        throw this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(node) {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(true);\n      this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(node) {\n      this.scope.enter(SCOPE_OTHER);\n\n      if (this.match(types.string)) {\n        node.id = this.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = node.body = this.startNode();\n      const body = bodyNode.body = [];\n      this.expect(types.braceL);\n\n      while (!this.match(types.braceR)) {\n        let bodyNode = this.startNode();\n\n        if (this.match(types._import)) {\n          this.next();\n\n          if (!this.isContextual(\"type\") && !this.match(types._typeof)) {\n            this.raise(this.state.lastTokStart, FlowErrors.InvalidNonTypeImportInDeclareModule);\n          }\n\n          this.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\"declare\", FlowErrors.UnsupportedStatementInDeclareModule);\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n      this.expect(types.braceR);\n      this.finishNode(bodyNode, \"BlockStatement\");\n      let kind = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n          }\n\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(bodyElement.start, FlowErrors.DuplicateDeclareModuleExports);\n          }\n\n          if (kind === \"ES\") {\n            this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n          }\n\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(node, insideModule) {\n      this.expect(types._export);\n\n      if (this.eat(types._default)) {\n        if (this.match(types._function) || this.match(types._class)) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n\n        node.default = true;\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (this.match(types._const) || this.isLet() || (this.isContextual(\"type\") || this.isContextual(\"interface\")) && !insideModule) {\n          const label = this.state.value;\n          const suggestion = exportSuggestions[label];\n          throw this.raise(this.state.start, FlowErrors.UnsupportedDeclareExportKind, label, suggestion);\n        }\n\n        if (this.match(types._var) || this.match(types._function) || this.match(types._class) || this.isContextual(\"opaque\")) {\n            node.declaration = this.flowParseDeclare(this.startNode());\n            node.default = false;\n            return this.finishNode(node, \"DeclareExportDeclaration\");\n          } else if (this.match(types.star) || this.match(types.braceL) || this.isContextual(\"interface\") || this.isContextual(\"type\") || this.isContextual(\"opaque\")) {\n            node = this.parseExport(node);\n\n            if (node.type === \"ExportNamedDeclaration\") {\n              node.type = \"ExportDeclaration\";\n              node.default = false;\n              delete node.exportKind;\n            }\n\n            node.type = \"Declare\" + node.type;\n            return node;\n          }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(node) {\n      this.next();\n      this.expectContextual(\"exports\");\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(node) {\n      this.next();\n      this.flowParseTypeAlias(node);\n      node.type = \"DeclareTypeAlias\";\n      return node;\n    }\n\n    flowParseDeclareOpaqueType(node) {\n      this.next();\n      this.flowParseOpaqueType(node, true);\n      node.type = \"DeclareOpaqueType\";\n      return node;\n    }\n\n    flowParseDeclareInterface(node) {\n      this.next();\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    flowParseInterfaceish(node, isClass = false) {\n      node.id = this.flowParseRestrictedIdentifier(!isClass, true);\n      this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n      node.implements = [];\n      node.mixins = [];\n\n      if (this.eat(types._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(types.comma));\n      }\n\n      if (this.isContextual(\"mixins\")) {\n        this.next();\n\n        do {\n          node.mixins.push(this.flowParseInterfaceExtends());\n        } while (this.eat(types.comma));\n      }\n\n      if (this.isContextual(\"implements\")) {\n        this.next();\n\n        do {\n          node.implements.push(this.flowParseInterfaceExtends());\n        } while (this.eat(types.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false\n      });\n    }\n\n    flowParseInterfaceExtends() {\n      const node = this.startNode();\n      node.id = this.flowParseQualifiedTypeIdentifier();\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node) {\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word) {\n      if (word === \"_\") {\n        this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);\n      }\n    }\n\n    checkReservedType(word, startLoc, declaration) {\n      if (!reservedTypes.has(word)) return;\n      this.raise(startLoc, declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, word);\n    }\n\n    flowParseRestrictedIdentifier(liberal, declaration) {\n      this.checkReservedType(this.state.value, this.state.start, declaration);\n      return this.parseIdentifier(liberal);\n    }\n\n    flowParseTypeAlias(node) {\n      node.id = this.flowParseRestrictedIdentifier(false, true);\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(types.eq);\n      this.semicolon();\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(node, declare) {\n      this.expectContextual(\"type\");\n      node.id = this.flowParseRestrictedIdentifier(true, true);\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.supertype = null;\n\n      if (this.match(types.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(types.colon);\n      }\n\n      node.impltype = null;\n\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(types.eq);\n      }\n\n      this.semicolon();\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    flowParseTypeParameter(requireDefault = false) {\n      const nodeStart = this.state.start;\n      const node = this.startNode();\n      const variance = this.flowParseVariance();\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      node.variance = variance;\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(types.eq)) {\n        this.eat(types.eq);\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration() {\n      const oldInType = this.state.inType;\n      const node = this.startNode();\n      node.params = [];\n      this.state.inType = true;\n\n      if (this.isRelational(\"<\") || this.match(types.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.isRelational(\">\")) {\n          this.expect(types.comma);\n        }\n      } while (!this.isRelational(\">\"));\n\n      this.expectRelational(\">\");\n      this.state.inType = oldInType;\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    flowParseTypeParameterInstantiation() {\n      const node = this.startNode();\n      const oldInType = this.state.inType;\n      node.params = [];\n      this.state.inType = true;\n      this.expectRelational(\"<\");\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n\n      while (!this.isRelational(\">\")) {\n        node.params.push(this.flowParseType());\n\n        if (!this.isRelational(\">\")) {\n          this.expect(types.comma);\n        }\n      }\n\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expectRelational(\">\");\n      this.state.inType = oldInType;\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew() {\n      const node = this.startNode();\n      const oldInType = this.state.inType;\n      node.params = [];\n      this.state.inType = true;\n      this.expectRelational(\"<\");\n\n      while (!this.isRelational(\">\")) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n\n        if (!this.isRelational(\">\")) {\n          this.expect(types.comma);\n        }\n      }\n\n      this.expectRelational(\">\");\n      this.state.inType = oldInType;\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType() {\n      const node = this.startNode();\n      this.expectContextual(\"interface\");\n      node.extends = [];\n\n      if (this.eat(types._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(types.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false\n      });\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey() {\n      return this.match(types.num) || this.match(types.string) ? this.parseExprAtom() : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(node, isStatic, variance) {\n      node.static = isStatic;\n\n      if (this.lookahead().type === types.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n\n      this.expect(types.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(node, isStatic) {\n      node.static = isStatic;\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(types.bracketR);\n      this.expect(types.bracketR);\n\n      if (this.isRelational(\"<\") || this.match(types.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n      } else {\n        node.method = false;\n\n        if (this.eat(types.question)) {\n          node.optional = true;\n        }\n\n        node.value = this.flowParseTypeInitialiser();\n      }\n\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(node) {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(types.parenL);\n\n      while (!this.match(types.parenR) && !this.match(types.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam());\n\n        if (!this.match(types.parenR)) {\n          this.expect(types.comma);\n        }\n      }\n\n      if (this.eat(types.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam();\n      }\n\n      this.expect(types.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(node, isStatic) {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact\n    }) {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const nodeStart = this.startNode();\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n      let endDelim;\n      let exact;\n      let inexact = false;\n\n      if (allowExact && this.match(types.braceBarL)) {\n        this.expect(types.braceBarL);\n        endDelim = types.braceBarR;\n        exact = true;\n      } else {\n        this.expect(types.braceL);\n        endDelim = types.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStart = null;\n        let inexactStart = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(\"proto\")) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== types.colon && lookahead.type !== types.question) {\n            this.next();\n            protoStart = this.state.start;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(\"static\")) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== types.colon && lookahead.type !== types.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(types.bracketL)) {\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n\n          if (this.eat(types.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.start);\n            }\n\n            nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));\n          } else {\n            nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));\n          }\n        } else if (this.match(types.parenL) || this.isRelational(\"<\")) {\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n\n          nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n            const lookahead = this.lookahead();\n\n            if (lookahead.type === types.name || lookahead.type === types.string || lookahead.type === types.num) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStart = this.state.lastTokStart;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (inexactStart && !this.match(types.braceR) && !this.match(types.braceBarR)) {\n          this.raise(inexactStart, FlowErrors.UnexpectedExplicitInexactInObject);\n        }\n      }\n\n      this.expect(endDelim);\n\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n      this.state.inType = oldInType;\n      return out;\n    }\n\n    flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact) {\n      if (this.eat(types.ellipsis)) {\n        const isInexactToken = this.match(types.comma) || this.match(types.semi) || this.match(types.braceR) || this.match(types.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(this.state.lastTokStart, FlowErrors.InexactInsideNonObject);\n          } else if (!allowInexact) {\n            this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);\n          }\n\n          if (variance) {\n            this.raise(variance.start, FlowErrors.InexactVariance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);\n        }\n\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (variance) {\n          this.raise(variance.start, FlowErrors.SpreadVariance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStart != null;\n        node.kind = kind;\n        let optional = false;\n\n        if (this.isRelational(\"<\") || this.match(types.parenL)) {\n          node.method = true;\n\n          if (protoStart != null) {\n            this.unexpected(protoStart);\n          }\n\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n          node.method = false;\n\n          if (this.eat(types.question)) {\n            optional = true;\n          }\n\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    flowCheckGetterSetterParams(property) {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const start = property.start;\n      const length = property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (length !== paramCount) {\n        if (property.kind === \"get\") {\n          this.raise(start, ErrorMessages.BadGetterArity);\n        } else {\n          this.raise(start, ErrorMessages.BadSetterArity);\n        }\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(start, ErrorMessages.BadSetterRestParameter);\n      }\n    }\n\n    flowObjectTypeSemicolon() {\n      if (!this.eat(types.semi) && !this.eat(types.comma) && !this.match(types.braceR) && !this.match(types.braceBarR)) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(startPos, startLoc, id) {\n      startPos = startPos || this.state.start;\n      startLoc = startLoc || this.state.startLoc;\n      let node = id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(types.dot)) {\n        const node2 = this.startNodeAt(startPos, startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(startPos, startLoc, id) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType() {\n      const node = this.startNode();\n      this.expect(types._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType() {\n      const node = this.startNode();\n      node.types = [];\n      this.expect(types.bracketL);\n\n      while (this.state.pos < this.length && !this.match(types.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(types.bracketR)) break;\n        this.expect(types.comma);\n      }\n\n      this.expect(types.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam() {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode();\n      const lh = this.lookahead();\n\n      if (lh.type === types.colon || lh.type === types.question) {\n        name = this.parseIdentifier();\n\n        if (this.eat(types.question)) {\n          optional = true;\n        }\n\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(type) {\n      const node = this.startNodeAt(type.start, type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params = []) {\n      let rest = null;\n\n      while (!this.match(types.parenR) && !this.match(types.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam());\n\n        if (!this.match(types.parenR)) {\n          this.expect(types.comma);\n        }\n      }\n\n      if (this.eat(types.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam();\n      }\n\n      return {\n        params,\n        rest\n      };\n    }\n\n    flowIdentToTypeAnnotation(startPos, startLoc, node, id) {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startPos, startLoc, id);\n      }\n    }\n\n    flowParsePrimaryType() {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const node = this.startNode();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case types.name:\n          if (this.isContextual(\"interface\")) {\n            return this.flowParseInterfaceType();\n          }\n\n          return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdentifier());\n\n        case types.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true\n          });\n\n        case types.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false\n          });\n\n        case types.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case types.relational:\n          if (this.state.value === \"<\") {\n            node.typeParameters = this.flowParseTypeParameterDeclaration();\n            this.expect(types.parenL);\n            tmp = this.flowParseFunctionTypeParams();\n            node.params = tmp.params;\n            node.rest = tmp.rest;\n            this.expect(types.parenR);\n            this.expect(types.arrow);\n            node.returnType = this.flowParseType();\n            return this.finishNode(node, \"FunctionTypeAnnotation\");\n          }\n\n          break;\n\n        case types.parenL:\n          this.next();\n\n          if (!this.match(types.parenR) && !this.match(types.ellipsis)) {\n            if (this.match(types.name)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== types.question && token !== types.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            if (this.state.noAnonFunctionType || !(this.match(types.comma) || this.match(types.parenR) && this.lookahead().type === types.arrow)) {\n              this.expect(types.parenR);\n              return type;\n            } else {\n              this.eat(types.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          this.expect(types.parenR);\n          this.expect(types.arrow);\n          node.returnType = this.flowParseType();\n          node.typeParameters = null;\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n        case types.string:\n          return this.parseLiteral(this.state.value, \"StringLiteralTypeAnnotation\");\n\n        case types._true:\n        case types._false:\n          node.value = this.match(types._true);\n          this.next();\n          return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n\n        case types.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n\n            if (this.match(types.num)) {\n              return this.parseLiteral(-this.state.value, \"NumberLiteralTypeAnnotation\", node.start, node.loc.start);\n            }\n\n            if (this.match(types.bigint)) {\n              return this.parseLiteral(-this.state.value, \"BigIntLiteralTypeAnnotation\", node.start, node.loc.start);\n            }\n\n            throw this.raise(this.state.start, FlowErrors.UnexpectedSubtractionOperand);\n          }\n\n          throw this.unexpected();\n\n        case types.num:\n          return this.parseLiteral(this.state.value, \"NumberLiteralTypeAnnotation\");\n\n        case types.bigint:\n          return this.parseLiteral(this.state.value, \"BigIntLiteralTypeAnnotation\");\n\n        case types._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case types._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case types._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case types.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        default:\n          if (this.state.type.keyword === \"typeof\") {\n            return this.flowParseTypeofType();\n          } else if (this.state.type.keyword) {\n            const label = this.state.type.label;\n            this.next();\n            return super.createIdentifier(node, label);\n          }\n\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParsePostfixType() {\n      const startPos = this.state.start,\n            startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n\n      while (this.match(types.bracketL) && !this.canInsertSemicolon()) {\n        const node = this.startNodeAt(startPos, startLoc);\n        node.elementType = type;\n        this.expect(types.bracketL);\n        this.expect(types.bracketR);\n        type = this.finishNode(node, \"ArrayTypeAnnotation\");\n      }\n\n      return type;\n    }\n\n    flowParsePrefixType() {\n      const node = this.startNode();\n\n      if (this.eat(types.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens() {\n      const param = this.flowParsePrefixType();\n\n      if (!this.state.noAnonFunctionType && this.eat(types.arrow)) {\n        const node = this.startNodeAt(param.start, param.loc.start);\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n\n      return param;\n    }\n\n    flowParseIntersectionType() {\n      const node = this.startNode();\n      this.eat(types.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n\n      while (this.eat(types.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n\n      return node.types.length === 1 ? type : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType() {\n      const node = this.startNode();\n      this.eat(types.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n\n      while (this.eat(types.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n\n      return node.types.length === 1 ? type : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType() {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      this.state.exprAllowed = this.state.exprAllowed || this.state.noAnonFunctionType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation() {\n      if (this.state.type === types.name && this.state.value === \"_\") {\n        const startPos = this.state.start;\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startPos, startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation() {\n      const node = this.startNode();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {\n      const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();\n\n      if (this.match(types.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n\n      return ident;\n    }\n\n    typeCastToParameter(node) {\n      node.expression.typeAnnotation = node.typeAnnotation;\n      this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n      return node.expression;\n    }\n\n    flowParseVariance() {\n      let variance = null;\n\n      if (this.match(types.plusMin)) {\n        variance = this.startNode();\n\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n\n        this.next();\n        this.finishNode(variance, \"Variance\");\n      }\n\n      return variance;\n    }\n\n    parseFunctionBody(node, allowExpressionBody, isMethod = false) {\n      if (allowExpressionBody) {\n        return this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));\n      }\n\n      return super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish(node, type, isMethod = false) {\n      if (this.match(types.colon)) {\n        const typeNode = this.startNode();\n        [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n        node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, \"TypeAnnotation\") : null;\n      }\n\n      super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    parseStatement(context, topLevel) {\n      if (this.state.strict && this.match(types.name) && this.state.value === \"interface\") {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseInterface(node);\n      } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      } else {\n        const stmt = super.parseStatement(context, topLevel);\n\n        if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n          this.flowPragma = null;\n        }\n\n        return stmt;\n      }\n    }\n\n    parseExpressionStatement(node, expr) {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (this.match(types._class) || this.match(types.name) || this.match(types._function) || this.match(types._var) || this.match(types._export)) {\n            return this.flowParseDeclare(node);\n          }\n        } else if (this.match(types.name)) {\n          if (expr.name === \"interface\") {\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr);\n    }\n\n    shouldParseExportDeclaration() {\n      return this.isContextual(\"type\") || this.isContextual(\"interface\") || this.isContextual(\"opaque\") || this.shouldParseEnums() && this.isContextual(\"enum\") || super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier() {\n      if (this.match(types.name) && (this.state.value === \"type\" || this.state.value === \"interface\" || this.state.value === \"opaque\" || this.shouldParseEnums() && this.state.value === \"enum\")) {\n        return false;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(expr, startPos, startLoc, refNeedsArrowPos) {\n      if (!this.match(types.question)) return expr;\n\n      if (refNeedsArrowPos) {\n        const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n        if (!result.node) {\n          refNeedsArrowPos.start = result.error.pos || this.state.start;\n          return expr;\n        }\n\n        if (result.error) this.state = result.failState;\n        return result.node;\n      }\n\n      this.expect(types.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt(startPos, startLoc);\n      let {\n        consequent,\n        failed\n      } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({\n            consequent,\n            failed\n          } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt.concat(valid[0].start);\n          ({\n            consequent,\n            failed\n          } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(types.colon);\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined, undefined));\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent() {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(types.colon);\n      this.state.noArrowParamsConversionAt.pop();\n      return {\n        consequent,\n        failed\n      };\n    }\n\n    getArrowLikeExpressions(node, disallowInvalid) {\n      const stack = [node];\n      const arrows = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n\n        if (node.type === \"ArrowFunctionExpression\") {\n          if (node.typeParameters || !node.returnType) {\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));\n    }\n\n    finishArrowValidation(node) {\n      var _node$extra;\n\n      this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingComma);\n      this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt(node, parse) {\n      let result;\n\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem(node, startPos, startLoc) {\n      node = super.parseParenItem(node, startPos, startLoc);\n\n      if (this.eat(types.question)) {\n        node.optional = true;\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(types.colon)) {\n        const typeCastNode = this.startNodeAt(startPos, startLoc);\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    assertModuleNodeAllowed(node) {\n      if (node.type === \"ImportDeclaration\" && (node.importKind === \"type\" || node.importKind === \"typeof\") || node.type === \"ExportNamedDeclaration\" && node.exportKind === \"type\" || node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\") {\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExport(node) {\n      const decl = super.parseExport(node);\n\n      if (decl.type === \"ExportNamedDeclaration\" || decl.type === \"ExportAllDeclaration\") {\n        decl.exportKind = decl.exportKind || \"value\";\n      }\n\n      return decl;\n    }\n\n    parseExportDeclaration(node) {\n      if (this.isContextual(\"type\")) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(types.braceL)) {\n          node.specifiers = this.parseExportSpecifiers();\n          this.parseExportFrom(node);\n          return null;\n        } else {\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(\"opaque\")) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(\"interface\")) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseInterface(declarationNode);\n      } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(node) {\n      if (super.eatExportStar(...arguments)) return true;\n\n      if (this.isContextual(\"type\") && this.lookahead().type === types.star) {\n        node.exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(node) {\n      const pos = this.state.start;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(pos);\n      }\n\n      return hasNamespace;\n    }\n\n    parseClassId(node, isStatement, optionalId) {\n      super.parseClassId(node, isStatement, optionalId);\n\n      if (this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(classBody, member, state) {\n      const pos = this.state.start;\n\n      if (this.isContextual(\"declare\")) {\n        if (this.parseClassMemberFromModifier(classBody, member)) {\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (member.type !== \"ClassProperty\" && member.type !== \"ClassPrivateProperty\") {\n          this.raise(pos, FlowErrors.DeclareClassElement);\n        } else if (member.value) {\n          this.raise(member.value.start, FlowErrors.DeclareClassFieldInitializer);\n        }\n      }\n    }\n\n    getTokenFromCode(code) {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n\n      if (code === 123 && next === 124) {\n        return this.finishOp(types.braceBarL, 2);\n      } else if (this.state.inType && (code === 62 || code === 60)) {\n        return this.finishOp(types.relational, 1);\n      } else if (this.state.inType && code === 63) {\n        return this.finishOp(types.question, 1);\n      } else if (isIteratorStart(code, next)) {\n        this.state.isIterator = true;\n        return super.readWord();\n      } else {\n        return super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node, isBinding) {\n      switch (node.type) {\n        case \"Identifier\":\n        case \"ObjectPattern\":\n        case \"ArrayPattern\":\n        case \"AssignmentPattern\":\n          return true;\n\n        case \"ObjectExpression\":\n          {\n            const last = node.properties.length - 1;\n            return node.properties.every((prop, i) => {\n              return prop.type !== \"ObjectMethod\" && (i === last || prop.type === \"SpreadElement\") && this.isAssignable(prop);\n            });\n          }\n\n        case \"ObjectProperty\":\n          return this.isAssignable(node.value);\n\n        case \"SpreadElement\":\n          return this.isAssignable(node.argument);\n\n        case \"ArrayExpression\":\n          return node.elements.every(element => this.isAssignable(element));\n\n        case \"AssignmentExpression\":\n          return node.operator === \"=\";\n\n        case \"ParenthesizedExpression\":\n        case \"TypeCastExpression\":\n          return this.isAssignable(node.expression);\n\n        case \"MemberExpression\":\n        case \"OptionalMemberExpression\":\n          return !isBinding;\n\n        default:\n          return false;\n      }\n    }\n\n    toAssignable(node) {\n      if (node.type === \"TypeCastExpression\") {\n        return super.toAssignable(this.typeCastToParameter(node));\n      } else {\n        return super.toAssignable(node);\n      }\n    }\n\n    toAssignableList(exprList, trailingCommaPos) {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n\n        if ((expr == null ? void 0 : expr.type) === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n\n      return super.toAssignableList(exprList, trailingCommaPos);\n    }\n\n    toReferencedList(exprList, isParenthesizedExpr) {\n      for (let i = 0; i < exprList.length; i++) {\n        var _expr$extra;\n\n        const expr = exprList[i];\n\n        if (expr && expr.type === \"TypeCastExpression\" && !((_expr$extra = expr.extra) == null ? void 0 : _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {\n          this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);\n        }\n      }\n\n      return exprList;\n    }\n\n    checkLVal(expr, bindingType = BIND_NONE, checkClashes, contextDescription) {\n      if (expr.type !== \"TypeCastExpression\") {\n        return super.checkLVal(expr, bindingType, checkClashes, contextDescription);\n      }\n    }\n\n    parseClassProperty(node) {\n      if (this.match(types.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(node) {\n      if (this.match(types.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n\n      return super.parseClassPrivateProperty(node);\n    }\n\n    isClassMethod() {\n      return this.isRelational(\"<\") || super.isClassMethod();\n    }\n\n    isClassProperty() {\n      return this.match(types.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method) {\n      return !this.match(types.colon) && super.isNonstaticConstructor(method);\n    }\n\n    pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n      if (method.variance) {\n        this.unexpected(method.variance.start);\n      }\n\n      delete method.variance;\n\n      if (this.isRelational(\"<\")) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n    }\n\n    pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n      if (method.variance) {\n        this.unexpected(method.variance.start);\n      }\n\n      delete method.variance;\n\n      if (this.isRelational(\"<\")) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    parseClassSuper(node) {\n      super.parseClassSuper(node);\n\n      if (node.superClass && this.isRelational(\"<\")) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      if (this.isContextual(\"implements\")) {\n        this.next();\n        const implemented = node.implements = [];\n\n        do {\n          const node = this.startNode();\n          node.id = this.flowParseRestrictedIdentifier(true);\n\n          if (this.isRelational(\"<\")) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(types.comma));\n      }\n    }\n\n    parsePropertyName(node, isPrivateNameAllowed) {\n      const variance = this.flowParseVariance();\n      const key = super.parsePropertyName(node, isPrivateNameAllowed);\n      node.variance = variance;\n      return key;\n    }\n\n    parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n      if (prop.variance) {\n        this.unexpected(prop.variance.start);\n      }\n\n      delete prop.variance;\n      let typeParameters;\n\n      if (this.isRelational(\"<\") && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(types.parenL)) this.unexpected();\n      }\n\n      super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n\n      if (typeParameters) {\n        (prop.value || prop).typeParameters = typeParameters;\n      }\n    }\n\n    parseAssignableListItemTypes(param) {\n      if (this.eat(types.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(param.start, FlowErrors.OptionalBindingPattern);\n        }\n\n        param.optional = true;\n      }\n\n      if (this.match(types.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(startPos, startLoc, left) {\n      const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n      if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n        this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);\n      }\n\n      return node;\n    }\n\n    shouldParseDefaultImport(node) {\n      if (!hasTypeImportKind(node)) {\n        return super.shouldParseDefaultImport(node);\n      }\n\n      return isMaybeDefaultImport(this.state);\n    }\n\n    parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n      specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();\n      this.checkLVal(specifier.local, BIND_LEXICAL, undefined, contextDescription);\n      node.specifiers.push(this.finishNode(specifier, type));\n    }\n\n    maybeParseDefaultImportSpecifier(node) {\n      node.importKind = \"value\";\n      let kind = null;\n\n      if (this.match(types._typeof)) {\n        kind = \"typeof\";\n      } else if (this.isContextual(\"type\")) {\n        kind = \"type\";\n      }\n\n      if (kind) {\n        const lh = this.lookahead();\n\n        if (kind === \"type\" && lh.type === types.star) {\n          this.unexpected(lh.start);\n        }\n\n        if (isMaybeDefaultImport(lh) || lh.type === types.braceL || lh.type === types.star) {\n          this.next();\n          node.importKind = kind;\n        }\n      }\n\n      return super.maybeParseDefaultImportSpecifier(node);\n    }\n\n    parseImportSpecifier(node) {\n      const specifier = this.startNode();\n      const firstIdentLoc = this.state.start;\n      const firstIdent = this.parseIdentifier(true);\n      let specifierTypeKind = null;\n\n      if (firstIdent.name === \"type\") {\n        specifierTypeKind = \"type\";\n      } else if (firstIdent.name === \"typeof\") {\n        specifierTypeKind = \"typeof\";\n      }\n\n      let isBinding = false;\n\n      if (this.isContextual(\"as\") && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n\n        if (specifierTypeKind !== null && !this.match(types.name) && !this.state.type.keyword) {\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = as_ident.__clone();\n        } else {\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else if (specifierTypeKind !== null && (this.match(types.name) || this.state.type.keyword)) {\n        specifier.imported = this.parseIdentifier(true);\n        specifier.importKind = specifierTypeKind;\n\n        if (this.eatContextual(\"as\")) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = specifier.imported.__clone();\n        }\n      } else {\n        isBinding = true;\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n        specifier.local = specifier.imported.__clone();\n      }\n\n      const nodeIsTypeImport = hasTypeImportKind(node);\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (nodeIsTypeImport && specifierIsTypeImport) {\n        this.raise(firstIdentLoc, FlowErrors.ImportTypeShorthandOnlyInPureImport);\n      }\n\n      if (nodeIsTypeImport || specifierIsTypeImport) {\n        this.checkReservedType(specifier.local.name, specifier.local.start, true);\n      }\n\n      if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {\n        this.checkReservedWord(specifier.local.name, specifier.start, true, true);\n      }\n\n      this.checkLVal(specifier.local, BIND_LEXICAL, undefined, \"import specifier\");\n      node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n    }\n\n    parseFunctionParams(node, allowModifiers) {\n      const kind = node.kind;\n\n      if (kind !== \"get\" && kind !== \"set\" && this.isRelational(\"<\")) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    parseVarId(decl, kind) {\n      super.parseVarId(decl, kind);\n\n      if (this.match(types.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id);\n      }\n    }\n\n    parseAsyncArrowFromCallExpression(node, call) {\n      if (this.match(types.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    shouldParseAsyncArrow() {\n      return this.match(types.colon) || super.shouldParseAsyncArrow();\n    }\n\n    parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos) {\n      var _jsx;\n\n      let state = null;\n      let jsx;\n\n      if (this.hasPlugin(\"jsx\") && (this.match(types.jsxTagStart) || this.isRelational(\"<\"))) {\n        state = this.state.clone();\n        jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos), state);\n        if (!jsx.error) return jsx.node;\n        const {\n          context\n        } = this.state;\n\n        if (context[context.length - 1] === types$1.j_oTag) {\n          context.length -= 2;\n        } else if (context[context.length - 1] === types$1.j_expr) {\n          context.length -= 1;\n        }\n      }\n\n      if (((_jsx = jsx) == null ? void 0 : _jsx.error) || this.isRelational(\"<\")) {\n        var _jsx2, _jsx3;\n\n        state = state || this.state.clone();\n        let typeParameters;\n        const arrow = this.tryParse(abort => {\n          var _arrowExpression$extr;\n\n          typeParameters = this.flowParseTypeParameterDeclaration();\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {\n            const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos);\n            this.resetStartLocationFromNode(result, typeParameters);\n            return result;\n          });\n\n          if (arrowExpression.type !== \"ArrowFunctionExpression\" && ((_arrowExpression$extr = arrowExpression.extra) == null ? void 0 : _arrowExpression$extr.parenthesized)) {\n            abort();\n          }\n\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n          return arrowExpression;\n        }, state);\n        let arrowExpression = null;\n\n        if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === \"ArrowFunctionExpression\") {\n          if (!arrow.error && !arrow.aborted) {\n            if (arrow.node.async) {\n              this.raise(typeParameters.start, FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction);\n            }\n\n            return arrow.node;\n          }\n\n          arrowExpression = arrow.node;\n        }\n\n        if ((_jsx2 = jsx) == null ? void 0 : _jsx2.node) {\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if ((_jsx3 = jsx) == null ? void 0 : _jsx3.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n        throw this.raise(typeParameters.start, FlowErrors.UnexpectedTokenAfterTypeParameter);\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos);\n    }\n\n    parseArrow(node) {\n      if (this.match(types.colon)) {\n        const result = this.tryParse(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n          const typeNode = this.startNode();\n          [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(types.arrow)) this.unexpected();\n          return typeNode;\n        });\n        if (result.thrown) return null;\n        if (result.error) this.state = result.failState;\n        node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, \"TypeAnnotation\") : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow() {\n      return this.match(types.colon) || super.shouldParseArrow();\n    }\n\n    setArrowFunctionParameters(node, params) {\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        node.params = params;\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(node, allowDuplicates, isArrowFunction) {\n      if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        return;\n      }\n\n      return super.checkParams(...arguments);\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow) {\n      return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);\n    }\n\n    parseSubscripts(base, startPos, startLoc, noCalls) {\n      if (base.type === \"Identifier\" && base.name === \"async\" && this.state.noArrowAt.indexOf(startPos) !== -1) {\n        this.next();\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        node.arguments = this.parseCallExpressionArguments(types.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (base.type === \"Identifier\" && base.name === \"async\" && this.isRelational(\"<\")) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startPos, startLoc) || abort(), state);\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n        const result = this.tryParse(() => super.parseSubscripts(base, startPos, startLoc, noCalls), state);\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startPos, startLoc, noCalls);\n    }\n\n    parseSubscript(base, startPos, startLoc, noCalls, subscriptState) {\n      if (this.match(types.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n\n        this.next();\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(types.parenL);\n        node.arguments = this.parseCallExpressionArguments(types.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, true);\n      } else if (!noCalls && this.shouldParseTypes() && this.isRelational(\"<\")) {\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        const result = this.tryParse(() => {\n          node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(types.parenL);\n          node.arguments = this.parseCallExpressionArguments(types.parenR, false);\n          if (subscriptState.optionalChainMember) node.optional = false;\n          return this.finishCallExpression(node, subscriptState.optionalChainMember);\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(base, startPos, startLoc, noCalls, subscriptState);\n    }\n\n    parseNewArguments(node) {\n      let targs = null;\n\n      if (this.shouldParseTypes() && this.isRelational(\"<\")) {\n        targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;\n      }\n\n      node.typeArguments = targs;\n      super.parseNewArguments(node);\n    }\n\n    parseAsyncArrowWithTypeParameters(startPos, startLoc) {\n      const node = this.startNodeAt(startPos, startLoc);\n      this.parseFunctionParams(node);\n      if (!this.parseArrow(node)) return;\n      return this.parseArrowExpression(node, undefined, true);\n    }\n\n    readToken_mult_modulo(code) {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n\n      if (code === 42 && next === 47 && this.state.hasFlowComment) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code) {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n\n      if (code === 124 && next === 125) {\n        this.finishOp(types.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file, program) {\n      const fileNode = super.parseTopLevel(file, program);\n\n      if (this.state.hasFlowComment) {\n        this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);\n      }\n\n      return fileNode;\n    }\n\n    skipBlockComment() {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          this.unexpected(null, FlowErrors.NestedFlowComment);\n        }\n\n        this.hasFlowCommentCompletion();\n        this.state.pos += this.skipFlowComment();\n        this.state.hasFlowComment = true;\n        return;\n      }\n\n      if (this.state.hasFlowComment) {\n        const end = this.input.indexOf(\"*-/\", this.state.pos += 2);\n\n        if (end === -1) {\n          throw this.raise(this.state.pos - 2, ErrorMessages.UnterminatedComment);\n        }\n\n        this.state.pos = end + 3;\n        return;\n      }\n\n      super.skipBlockComment();\n    }\n\n    skipFlowComment() {\n      const {\n        pos\n      } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n\n      while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === 58 && ch3 === 58) {\n        return shiftToFirstNonWhiteSpace + 2;\n      }\n\n      if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === \"flow-include\") {\n        return shiftToFirstNonWhiteSpace + 12;\n      }\n\n      if (ch2 === 58 && ch3 !== 58) {\n        return shiftToFirstNonWhiteSpace;\n      }\n\n      return false;\n    }\n\n    hasFlowCommentCompletion() {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n\n      if (end === -1) {\n        throw this.raise(this.state.pos, ErrorMessages.UnterminatedComment);\n      }\n    }\n\n    flowEnumErrorBooleanMemberNotInitialized(pos, {\n      enumName,\n      memberName\n    }) {\n      this.raise(pos, FlowErrors.EnumBooleanMemberNotInitialized, memberName, enumName);\n    }\n\n    flowEnumErrorInvalidMemberName(pos, {\n      enumName,\n      memberName\n    }) {\n      const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n      this.raise(pos, FlowErrors.EnumInvalidMemberName, memberName, suggestion, enumName);\n    }\n\n    flowEnumErrorDuplicateMemberName(pos, {\n      enumName,\n      memberName\n    }) {\n      this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);\n    }\n\n    flowEnumErrorInconsistentMemberValues(pos, {\n      enumName\n    }) {\n      this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);\n    }\n\n    flowEnumErrorInvalidExplicitType(pos, {\n      enumName,\n      suppliedType\n    }) {\n      return this.raise(pos, suppliedType === null ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied : FlowErrors.EnumInvalidExplicitType, enumName, suppliedType);\n    }\n\n    flowEnumErrorInvalidMemberInitializer(pos, {\n      enumName,\n      explicitType,\n      memberName\n    }) {\n      let message = null;\n\n      switch (explicitType) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;\n          break;\n\n        case \"symbol\":\n          message = FlowErrors.EnumInvalidMemberInitializerSymbolType;\n          break;\n\n        default:\n          message = FlowErrors.EnumInvalidMemberInitializerUnknownType;\n      }\n\n      return this.raise(pos, message, enumName, memberName, explicitType);\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(pos, {\n      enumName,\n      memberName\n    }) {\n      this.raise(pos, FlowErrors.EnumNumberMemberNotInitialized, enumName, memberName);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitailized(pos, {\n      enumName\n    }) {\n      this.raise(pos, FlowErrors.EnumStringMemberInconsistentlyInitailized, enumName);\n    }\n\n    flowEnumMemberInit() {\n      const startPos = this.state.start;\n\n      const endOfInit = () => this.match(types.comma) || this.match(types.braceR);\n\n      switch (this.state.type) {\n        case types.num:\n          {\n            const literal = this.parseLiteral(this.state.value, \"NumericLiteral\");\n\n            if (endOfInit()) {\n              return {\n                type: \"number\",\n                pos: literal.start,\n                value: literal\n              };\n            }\n\n            return {\n              type: \"invalid\",\n              pos: startPos\n            };\n          }\n\n        case types.string:\n          {\n            const literal = this.parseLiteral(this.state.value, \"StringLiteral\");\n\n            if (endOfInit()) {\n              return {\n                type: \"string\",\n                pos: literal.start,\n                value: literal\n              };\n            }\n\n            return {\n              type: \"invalid\",\n              pos: startPos\n            };\n          }\n\n        case types._true:\n        case types._false:\n          {\n            const literal = this.parseBooleanLiteral();\n\n            if (endOfInit()) {\n              return {\n                type: \"boolean\",\n                pos: literal.start,\n                value: literal\n              };\n            }\n\n            return {\n              type: \"invalid\",\n              pos: startPos\n            };\n          }\n\n        default:\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n      }\n    }\n\n    flowEnumMemberRaw() {\n      const pos = this.state.start;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(types.eq) ? this.flowEnumMemberInit() : {\n        type: \"none\",\n        pos\n      };\n      return {\n        id,\n        init\n      };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(pos, context, expectedType) {\n      const {\n        explicitType\n      } = context;\n\n      if (explicitType === null) {\n        return;\n      }\n\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(pos, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType\n    }) {\n      const seenNames = new Set();\n      const members = {\n        booleanMembers: [],\n        numberMembers: [],\n        stringMembers: [],\n        defaultedMembers: []\n      };\n\n      while (!this.match(types.braceR)) {\n        const memberNode = this.startNode();\n        const {\n          id,\n          init\n        } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n\n        if (memberName === \"\") {\n          continue;\n        }\n\n        if (/^[a-z]/.test(memberName)) {\n          this.flowEnumErrorInvalidMemberName(id.start, {\n            enumName,\n            memberName\n          });\n        }\n\n        if (seenNames.has(memberName)) {\n          this.flowEnumErrorDuplicateMemberName(id.start, {\n            enumName,\n            memberName\n          });\n        }\n\n        seenNames.add(memberName);\n        const context = {\n          enumName,\n          explicitType,\n          memberName\n        };\n        memberNode.id = id;\n\n        switch (init.type) {\n          case \"boolean\":\n            {\n              this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"boolean\");\n              memberNode.init = init.value;\n              members.booleanMembers.push(this.finishNode(memberNode, \"EnumBooleanMember\"));\n              break;\n            }\n\n          case \"number\":\n            {\n              this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n              memberNode.init = init.value;\n              members.numberMembers.push(this.finishNode(memberNode, \"EnumNumberMember\"));\n              break;\n            }\n\n          case \"string\":\n            {\n              this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n              memberNode.init = init.value;\n              members.stringMembers.push(this.finishNode(memberNode, \"EnumStringMember\"));\n              break;\n            }\n\n          case \"invalid\":\n            {\n              throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n            }\n\n          case \"none\":\n            {\n              switch (explicitType) {\n                case \"boolean\":\n                  this.flowEnumErrorBooleanMemberNotInitialized(init.pos, context);\n                  break;\n\n                case \"number\":\n                  this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n                  break;\n\n                default:\n                  members.defaultedMembers.push(this.finishNode(memberNode, \"EnumDefaultedMember\"));\n              }\n            }\n        }\n\n        if (!this.match(types.braceR)) {\n          this.expect(types.comma);\n        }\n      }\n\n      return members;\n    }\n\n    flowEnumStringMembers(initializedMembers, defaultedMembers, {\n      enumName\n    }) {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (let _i = 0; _i < initializedMembers.length; _i++) {\n          const member = initializedMembers[_i];\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n            enumName\n          });\n        }\n\n        return defaultedMembers;\n      } else {\n        for (let _i2 = 0; _i2 < defaultedMembers.length; _i2++) {\n          const member = defaultedMembers[_i2];\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n            enumName\n          });\n        }\n\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName\n    }) {\n      if (this.eatContextual(\"of\")) {\n        if (!this.match(types.name)) {\n          throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n            enumName,\n            suppliedType: null\n          });\n        }\n\n        const {\n          value\n        } = this.state;\n        this.next();\n\n        if (value !== \"boolean\" && value !== \"number\" && value !== \"string\" && value !== \"symbol\") {\n          this.flowEnumErrorInvalidExplicitType(this.state.start, {\n            enumName,\n            suppliedType: value\n          });\n        }\n\n        return value;\n      }\n\n      return null;\n    }\n\n    flowEnumBody(node, {\n      enumName,\n      nameLoc\n    }) {\n      const explicitType = this.flowEnumParseExplicitType({\n        enumName\n      });\n      this.expect(types.braceL);\n      const members = this.flowEnumMembers({\n        enumName,\n        explicitType\n      });\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(types.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(types.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n            enumName\n          });\n          this.expect(types.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(types.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n\n        default:\n          {\n            const empty = () => {\n              node.members = [];\n              this.expect(types.braceR);\n              return this.finishNode(node, \"EnumStringBody\");\n            };\n\n            node.explicitType = false;\n            const boolsLen = members.booleanMembers.length;\n            const numsLen = members.numberMembers.length;\n            const strsLen = members.stringMembers.length;\n            const defaultedLen = members.defaultedMembers.length;\n\n            if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n              return empty();\n            } else if (!boolsLen && !numsLen) {\n              node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n                enumName\n              });\n              this.expect(types.braceR);\n              return this.finishNode(node, \"EnumStringBody\");\n            } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n              for (let _i3 = 0, _members$defaultedMem = members.defaultedMembers; _i3 < _members$defaultedMem.length; _i3++) {\n                const member = _members$defaultedMem[_i3];\n                this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n                  enumName,\n                  memberName: member.id.name\n                });\n              }\n\n              node.members = members.booleanMembers;\n              this.expect(types.braceR);\n              return this.finishNode(node, \"EnumBooleanBody\");\n            } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n              for (let _i4 = 0, _members$defaultedMem2 = members.defaultedMembers; _i4 < _members$defaultedMem2.length; _i4++) {\n                const member = _members$defaultedMem2[_i4];\n                this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n                  enumName,\n                  memberName: member.id.name\n                });\n              }\n\n              node.members = members.numberMembers;\n              this.expect(types.braceR);\n              return this.finishNode(node, \"EnumNumberBody\");\n            } else {\n              this.flowEnumErrorInconsistentMemberValues(nameLoc, {\n                enumName\n              });\n              return empty();\n            }\n          }\n      }\n    }\n\n    flowParseEnumDeclaration(node) {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), {\n        enumName: id.name,\n        nameLoc: id.start\n      });\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    updateContext(prevType) {\n      if (this.match(types.name) && this.state.value === \"of\" && prevType === types.name && this.input.slice(this.state.lastTokStart, this.state.lastTokEnd) === \"interface\") {\n        this.state.exprAllowed = false;\n      } else {\n        super.updateContext(prevType);\n      }\n    }\n\n    isLookaheadToken_lt() {\n      const next = this.nextTokenStart();\n\n      if (this.input.charCodeAt(next) === 60) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return afterNext !== 60 && afterNext !== 61;\n      }\n\n      return false;\n    }\n\n    maybeUnwrapTypeCastExpression(node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n\n  }, _temp;\n});\n\nconst entities = {\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\"\n};\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\nconst JsxErrors = Object.freeze({\n  AttributeIsEmpty: \"JSX attributes must only be assigned a non-empty expression\",\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>\",\n  MissingClosingTagElement: \"Expected corresponding JSX closing tag for <%0>\",\n  UnsupportedJsxValue: \"JSX value should be either an expression or a quoted JSX text\",\n  UnterminatedJsxContent: \"Unterminated JSX contents\",\n  UnwrappedAdjacentJSXElements: \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\"\n});\ntypes$1.j_oTag = new TokContext(\"<tag\", false);\ntypes$1.j_cTag = new TokContext(\"</tag\", false);\ntypes$1.j_expr = new TokContext(\"<tag>...</tag>\", true, true);\ntypes.jsxName = new TokenType(\"jsxName\");\ntypes.jsxText = new TokenType(\"jsxText\", {\n  beforeExpr: true\n});\ntypes.jsxTagStart = new TokenType(\"jsxTagStart\", {\n  startsExpr: true\n});\ntypes.jsxTagEnd = new TokenType(\"jsxTagEnd\");\n\ntypes.jsxTagStart.updateContext = function () {\n  this.state.context.push(types$1.j_expr);\n  this.state.context.push(types$1.j_oTag);\n  this.state.exprAllowed = false;\n};\n\ntypes.jsxTagEnd.updateContext = function (prevType) {\n  const out = this.state.context.pop();\n\n  if (out === types$1.j_oTag && prevType === types.slash || out === types$1.j_cTag) {\n    this.state.context.pop();\n    this.state.exprAllowed = this.curContext() === types$1.j_expr;\n  } else {\n    this.state.exprAllowed = true;\n  }\n};\n\nfunction isFragment(object) {\n  return object ? object.type === \"JSXOpeningFragment\" || object.type === \"JSXClosingFragment\" : false;\n}\n\nfunction getQualifiedJSXName(object) {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return getQualifiedJSXName(object.object) + \".\" + getQualifiedJSXName(object.property);\n  }\n\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nvar jsx = (superClass => class extends superClass {\n  jsxReadToken() {\n    let out = \"\";\n    let chunkStart = this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      switch (ch) {\n        case 60:\n        case 123:\n          if (this.state.pos === this.state.start) {\n            if (ch === 60 && this.state.exprAllowed) {\n              ++this.state.pos;\n              return this.finishToken(types.jsxTagStart);\n            }\n\n            return super.getTokenFromCode(ch);\n          }\n\n          out += this.input.slice(chunkStart, this.state.pos);\n          return this.finishToken(types.jsxText, out);\n\n        case 38:\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n          break;\n\n        default:\n          if (isNewLine(ch)) {\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadNewLine(true);\n            chunkStart = this.state.pos;\n          } else {\n            ++this.state.pos;\n          }\n\n      }\n    }\n  }\n\n  jsxReadNewLine(normalizeCRLF) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let out;\n    ++this.state.pos;\n\n    if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {\n      ++this.state.pos;\n      out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n    } else {\n      out = String.fromCharCode(ch);\n    }\n\n    ++this.state.curLine;\n    this.state.lineStart = this.state.pos;\n    return out;\n  }\n\n  jsxReadString(quote) {\n    let out = \"\";\n    let chunkStart = ++this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n\n      if (ch === 38) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadEntity();\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadNewLine(false);\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n\n    out += this.input.slice(chunkStart, this.state.pos++);\n    return this.finishToken(types.string, out);\n  }\n\n  jsxReadEntity() {\n    let str = \"\";\n    let count = 0;\n    let entity;\n    let ch = this.input[this.state.pos];\n    const startPos = ++this.state.pos;\n\n    while (this.state.pos < this.length && count++ < 10) {\n      ch = this.input[this.state.pos++];\n\n      if (ch === \";\") {\n        if (str[0] === \"#\") {\n          if (str[1] === \"x\") {\n            str = str.substr(2);\n\n            if (HEX_NUMBER.test(str)) {\n              entity = String.fromCodePoint(parseInt(str, 16));\n            }\n          } else {\n            str = str.substr(1);\n\n            if (DECIMAL_NUMBER.test(str)) {\n              entity = String.fromCodePoint(parseInt(str, 10));\n            }\n          }\n        } else {\n          entity = entities[str];\n        }\n\n        break;\n      }\n\n      str += ch;\n    }\n\n    if (!entity) {\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    return entity;\n  }\n\n  jsxReadWord() {\n    let ch;\n    const start = this.state.pos;\n\n    do {\n      ch = this.input.charCodeAt(++this.state.pos);\n    } while (isIdentifierChar(ch) || ch === 45);\n\n    return this.finishToken(types.jsxName, this.input.slice(start, this.state.pos));\n  }\n\n  jsxParseIdentifier() {\n    const node = this.startNode();\n\n    if (this.match(types.jsxName)) {\n      node.name = this.state.value;\n    } else if (this.state.type.keyword) {\n      node.name = this.state.type.keyword;\n    } else {\n      this.unexpected();\n    }\n\n    this.next();\n    return this.finishNode(node, \"JSXIdentifier\");\n  }\n\n  jsxParseNamespacedName() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const name = this.jsxParseIdentifier();\n    if (!this.eat(types.colon)) return name;\n    const node = this.startNodeAt(startPos, startLoc);\n    node.namespace = name;\n    node.name = this.jsxParseIdentifier();\n    return this.finishNode(node, \"JSXNamespacedName\");\n  }\n\n  jsxParseElementName() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let node = this.jsxParseNamespacedName();\n\n    if (node.type === \"JSXNamespacedName\") {\n      return node;\n    }\n\n    while (this.eat(types.dot)) {\n      const newNode = this.startNodeAt(startPos, startLoc);\n      newNode.object = node;\n      newNode.property = this.jsxParseIdentifier();\n      node = this.finishNode(newNode, \"JSXMemberExpression\");\n    }\n\n    return node;\n  }\n\n  jsxParseAttributeValue() {\n    let node;\n\n    switch (this.state.type) {\n      case types.braceL:\n        node = this.startNode();\n        this.next();\n        node = this.jsxParseExpressionContainer(node);\n\n        if (node.expression.type === \"JSXEmptyExpression\") {\n          this.raise(node.start, JsxErrors.AttributeIsEmpty);\n        }\n\n        return node;\n\n      case types.jsxTagStart:\n      case types.string:\n        return this.parseExprAtom();\n\n      default:\n        throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);\n    }\n  }\n\n  jsxParseEmptyExpression() {\n    const node = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc);\n    return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.start, this.state.startLoc);\n  }\n\n  jsxParseSpreadChild(node) {\n    this.next();\n    node.expression = this.parseExpression();\n    this.expect(types.braceR);\n    return this.finishNode(node, \"JSXSpreadChild\");\n  }\n\n  jsxParseExpressionContainer(node) {\n    if (this.match(types.braceR)) {\n      node.expression = this.jsxParseEmptyExpression();\n    } else {\n      node.expression = this.parseExpression();\n    }\n\n    this.expect(types.braceR);\n    return this.finishNode(node, \"JSXExpressionContainer\");\n  }\n\n  jsxParseAttribute() {\n    const node = this.startNode();\n\n    if (this.eat(types.braceL)) {\n      this.expect(types.ellipsis);\n      node.argument = this.parseMaybeAssignAllowIn();\n      this.expect(types.braceR);\n      return this.finishNode(node, \"JSXSpreadAttribute\");\n    }\n\n    node.name = this.jsxParseNamespacedName();\n    node.value = this.eat(types.eq) ? this.jsxParseAttributeValue() : null;\n    return this.finishNode(node, \"JSXAttribute\");\n  }\n\n  jsxParseOpeningElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    if (this.match(types.jsxTagEnd)) {\n      this.expect(types.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningFragment\");\n    }\n\n    node.name = this.jsxParseElementName();\n    return this.jsxParseOpeningElementAfterName(node);\n  }\n\n  jsxParseOpeningElementAfterName(node) {\n    const attributes = [];\n\n    while (!this.match(types.slash) && !this.match(types.jsxTagEnd)) {\n      attributes.push(this.jsxParseAttribute());\n    }\n\n    node.attributes = attributes;\n    node.selfClosing = this.eat(types.slash);\n    this.expect(types.jsxTagEnd);\n    return this.finishNode(node, \"JSXOpeningElement\");\n  }\n\n  jsxParseClosingElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    if (this.match(types.jsxTagEnd)) {\n      this.expect(types.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingFragment\");\n    }\n\n    node.name = this.jsxParseElementName();\n    this.expect(types.jsxTagEnd);\n    return this.finishNode(node, \"JSXClosingElement\");\n  }\n\n  jsxParseElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    const children = [];\n    const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n    let closingElement = null;\n\n    if (!openingElement.selfClosing) {\n      contents: for (;;) {\n        switch (this.state.type) {\n          case types.jsxTagStart:\n            startPos = this.state.start;\n            startLoc = this.state.startLoc;\n            this.next();\n\n            if (this.eat(types.slash)) {\n              closingElement = this.jsxParseClosingElementAt(startPos, startLoc);\n              break contents;\n            }\n\n            children.push(this.jsxParseElementAt(startPos, startLoc));\n            break;\n\n          case types.jsxText:\n            children.push(this.parseExprAtom());\n            break;\n\n          case types.braceL:\n            {\n              const node = this.startNode();\n              this.next();\n\n              if (this.match(types.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(this.jsxParseExpressionContainer(node));\n              }\n\n              break;\n            }\n\n          default:\n            throw this.unexpected();\n        }\n      }\n\n      if (isFragment(openingElement) && !isFragment(closingElement)) {\n        this.raise(closingElement.start, JsxErrors.MissingClosingTagFragment);\n      } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n        this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n      } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n          this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n        }\n      }\n    }\n\n    if (isFragment(openingElement)) {\n      node.openingFragment = openingElement;\n      node.closingFragment = closingElement;\n    } else {\n      node.openingElement = openingElement;\n      node.closingElement = closingElement;\n    }\n\n    node.children = children;\n\n    if (this.isRelational(\"<\")) {\n      throw this.raise(this.state.start, JsxErrors.UnwrappedAdjacentJSXElements);\n    }\n\n    return isFragment(openingElement) ? this.finishNode(node, \"JSXFragment\") : this.finishNode(node, \"JSXElement\");\n  }\n\n  jsxParseElement() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    this.next();\n    return this.jsxParseElementAt(startPos, startLoc);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    if (this.match(types.jsxText)) {\n      return this.parseLiteral(this.state.value, \"JSXText\");\n    } else if (this.match(types.jsxTagStart)) {\n      return this.jsxParseElement();\n    } else if (this.isRelational(\"<\") && this.input.charCodeAt(this.state.pos) !== 33) {\n      this.finishToken(types.jsxTagStart);\n      return this.jsxParseElement();\n    } else {\n      return super.parseExprAtom(refExpressionErrors);\n    }\n  }\n\n  getTokenFromCode(code) {\n    if (this.state.inPropertyName) return super.getTokenFromCode(code);\n    const context = this.curContext();\n\n    if (context === types$1.j_expr) {\n      return this.jsxReadToken();\n    }\n\n    if (context === types$1.j_oTag || context === types$1.j_cTag) {\n      if (isIdentifierStart(code)) {\n        return this.jsxReadWord();\n      }\n\n      if (code === 62) {\n        ++this.state.pos;\n        return this.finishToken(types.jsxTagEnd);\n      }\n\n      if ((code === 34 || code === 39) && context === types$1.j_oTag) {\n        return this.jsxReadString(code);\n      }\n    }\n\n    if (code === 60 && this.state.exprAllowed && this.input.charCodeAt(this.state.pos + 1) !== 33) {\n      ++this.state.pos;\n      return this.finishToken(types.jsxTagStart);\n    }\n\n    return super.getTokenFromCode(code);\n  }\n\n  updateContext(prevType) {\n    if (this.match(types.braceL)) {\n      const curContext = this.curContext();\n\n      if (curContext === types$1.j_oTag) {\n        this.state.context.push(types$1.braceExpression);\n      } else if (curContext === types$1.j_expr) {\n        this.state.context.push(types$1.templateQuasi);\n      } else {\n        super.updateContext(prevType);\n      }\n\n      this.state.exprAllowed = true;\n    } else if (this.match(types.slash) && prevType === types.jsxTagStart) {\n      this.state.context.length -= 2;\n      this.state.context.push(types$1.j_cTag);\n      this.state.exprAllowed = false;\n    } else {\n      return super.updateContext(prevType);\n    }\n  }\n\n});\n\nclass Scope {\n  constructor(flags) {\n    this.flags = void 0;\n    this.var = [];\n    this.lexical = [];\n    this.functions = [];\n    this.flags = flags;\n  }\n\n}\nclass ScopeHandler {\n  constructor(raise, inModule) {\n    this.scopeStack = [];\n    this.raise = void 0;\n    this.inModule = void 0;\n    this.undefinedExports = new Map();\n    this.undefinedPrivateNames = new Map();\n    this.raise = raise;\n    this.inModule = inModule;\n  }\n\n  get inFunction() {\n    return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0;\n  }\n\n  get allowSuper() {\n    return (this.currentThisScope().flags & SCOPE_SUPER) > 0;\n  }\n\n  get allowDirectSuper() {\n    return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0;\n  }\n\n  get inClass() {\n    return (this.currentThisScope().flags & SCOPE_CLASS) > 0;\n  }\n\n  get inNonArrowFunction() {\n    return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0;\n  }\n\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags) {\n    return new Scope(flags);\n  }\n\n  enter(flags) {\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit() {\n    this.scopeStack.pop();\n  }\n\n  treatFunctionsAsVarInScope(scope) {\n    return !!(scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_PROGRAM);\n  }\n\n  declareName(name, bindingType, pos) {\n    let scope = this.currentScope();\n\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.push(name);\n      } else {\n        scope.lexical.push(name);\n      }\n\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        scope.var.push(name);\n        this.maybeExportDefined(scope, name);\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope, name) {\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(scope, name, bindingType, pos) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.raise(pos, ErrorMessages.VarRedeclaration, name);\n    }\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n    }\n\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return scope.lexical.indexOf(name) > -1 || !this.treatFunctionsAsVarInScope(scope) && scope.var.indexOf(name) > -1;\n    }\n\n    return scope.lexical.indexOf(name) > -1 && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical[0] === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.indexOf(name) > -1;\n  }\n\n  checkLocalExport(id) {\n    if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && this.scopeStack[0].var.indexOf(id.name) === -1 && this.scopeStack[0].functions.indexOf(id.name) === -1) {\n      this.undefinedExports.set(id.name, id.start);\n    }\n  }\n\n  currentScope() {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScope() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const scope = this.scopeStack[i];\n\n      if (scope.flags & SCOPE_VAR) {\n        return scope;\n      }\n    }\n  }\n\n  currentThisScope() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const scope = this.scopeStack[i];\n\n      if ((scope.flags & SCOPE_VAR || scope.flags & SCOPE_CLASS) && !(scope.flags & SCOPE_ARROW)) {\n        return scope;\n      }\n    }\n  }\n\n}\n\nclass TypeScriptScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.types = [];\n    this.enums = [];\n    this.constEnums = [];\n    this.classes = [];\n    this.exportOnlyBindings = [];\n  }\n\n}\n\nclass TypeScriptScopeHandler extends ScopeHandler {\n  createScope(flags) {\n    return new TypeScriptScope(flags);\n  }\n\n  declareName(name, bindingType, pos) {\n    const scope = this.currentScope();\n\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.push(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        this.maybeExportDefined(scope, name);\n      }\n\n      scope.types.push(name);\n    }\n\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.push(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.push(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.push(name);\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (scope.enums.indexOf(name) > -1) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.indexOf(name) > -1;\n        return isConst !== wasConst;\n      }\n\n      return true;\n    }\n\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.indexOf(name) > -1) {\n      if (scope.lexical.indexOf(name) > -1) {\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        return false;\n      }\n    }\n\n    if (bindingType & BIND_KIND_TYPE && scope.types.indexOf(name) > -1) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(...arguments);\n  }\n\n  checkLocalExport(id) {\n    if (this.scopeStack[0].types.indexOf(id.name) === -1 && this.scopeStack[0].exportOnlyBindings.indexOf(id.name) === -1) {\n      super.checkLocalExport(id);\n    }\n  }\n\n}\n\nconst PARAM = 0b0000,\n      PARAM_YIELD = 0b0001,\n      PARAM_AWAIT = 0b0010,\n      PARAM_RETURN = 0b0100,\n      PARAM_IN = 0b1000;\nclass ProductionParameterHandler {\n  constructor() {\n    this.stacks = [];\n  }\n\n  enter(flags) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags() {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait() {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n\n  get hasYield() {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n\n  get hasReturn() {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n\n  get hasIn() {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n\n}\nfunction functionFlags(isAsync, isGenerator) {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n\nfunction nonNull(x) {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n\n  return x;\n}\n\nfunction assert(x) {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\nconst TSErrors = Object.freeze({\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier\",\n  ConstructorHasTypeParameters: \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareClassFieldHasInitializer: \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation: \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateModifier: \"Duplicate modifier: '%0'\",\n  EmptyHeritageClauseType: \"'%0' list cannot be empty.\",\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  IndexSignatureHasAbstract: \"Index signatures cannot have the 'abstract' modifier\",\n  IndexSignatureHasAccessibility: \"Index signatures cannot have an accessibility modifier ('%0')\",\n  IndexSignatureHasStatic: \"Index signatures cannot have the 'static' modifier\",\n  IndexSignatureHasDeclare: \"Index signatures cannot have the 'declare' modifier\",\n  InvalidTupleMemberLabel: \"Tuple members must be labeled with a simple identifier.\",\n  MixedLabeledAndUnlabeledElements: \"Tuple members must all have names or all not have names.\",\n  OptionalTypeBeforeRequired: \"A required element cannot follow an optional element.\",\n  PatternIsOptional: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract: \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: \"Private elements cannot have an accessibility modifier ('%0')\",\n  TypeAnnotationAfterAssign: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`\",\n  UnexpectedParameterModifier: \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly: \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument: \"Argument in a type import must be a string literal\",\n  UnsupportedParameterPropertyKind: \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0\"\n});\n\nfunction keywordTypeFromName(value) {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n\n    case \"never\":\n      return \"TSNeverKeyword\";\n\n    case \"number\":\n      return \"TSNumberKeyword\";\n\n    case \"object\":\n      return \"TSObjectKeyword\";\n\n    case \"string\":\n      return \"TSStringKeyword\";\n\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n\n    default:\n      return undefined;\n  }\n}\n\nvar typescript = (superClass => class extends superClass {\n  getScopeHandler() {\n    return TypeScriptScopeHandler;\n  }\n\n  tsIsIdentifier() {\n    return this.match(types.name);\n  }\n\n  tsNextTokenCanFollowModifier() {\n    this.next();\n    return !this.hasPrecedingLineBreak() && !this.match(types.parenL) && !this.match(types.parenR) && !this.match(types.colon) && !this.match(types.eq) && !this.match(types.question) && !this.match(types.bang);\n  }\n\n  tsParseModifier(allowedModifiers) {\n    if (!this.match(types.name)) {\n      return undefined;\n    }\n\n    const modifier = this.state.value;\n\n    if (allowedModifiers.indexOf(modifier) !== -1 && this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n      return modifier;\n    }\n\n    return undefined;\n  }\n\n  tsParseModifiers(modified, allowedModifiers) {\n    for (;;) {\n      const startPos = this.state.start;\n      const modifier = this.tsParseModifier(allowedModifiers);\n      if (!modifier) break;\n\n      if (Object.hasOwnProperty.call(modified, modifier)) {\n        this.raise(startPos, TSErrors.DuplicateModifier, modifier);\n      }\n\n      modified[modifier] = true;\n    }\n  }\n\n  tsIsListTerminator(kind) {\n    switch (kind) {\n      case \"EnumMembers\":\n      case \"TypeMembers\":\n        return this.match(types.braceR);\n\n      case \"HeritageClauseElement\":\n        return this.match(types.braceL);\n\n      case \"TupleElementTypes\":\n        return this.match(types.bracketR);\n\n      case \"TypeParametersOrArguments\":\n        return this.isRelational(\">\");\n    }\n\n    throw new Error(\"Unreachable\");\n  }\n\n  tsParseList(kind, parseElement) {\n    const result = [];\n\n    while (!this.tsIsListTerminator(kind)) {\n      result.push(parseElement());\n    }\n\n    return result;\n  }\n\n  tsParseDelimitedList(kind, parseElement) {\n    return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true));\n  }\n\n  tsParseDelimitedListWorker(kind, parseElement, expectSuccess) {\n    const result = [];\n\n    for (;;) {\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n\n      const element = parseElement();\n\n      if (element == null) {\n        return undefined;\n      }\n\n      result.push(element);\n\n      if (this.eat(types.comma)) {\n        continue;\n      }\n\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n\n      if (expectSuccess) {\n        this.expect(types.comma);\n      }\n\n      return undefined;\n    }\n\n    return result;\n  }\n\n  tsParseBracketedList(kind, parseElement, bracket, skipFirstToken) {\n    if (!skipFirstToken) {\n      if (bracket) {\n        this.expect(types.bracketL);\n      } else {\n        this.expectRelational(\"<\");\n      }\n    }\n\n    const result = this.tsParseDelimitedList(kind, parseElement);\n\n    if (bracket) {\n      this.expect(types.bracketR);\n    } else {\n      this.expectRelational(\">\");\n    }\n\n    return result;\n  }\n\n  tsParseImportType() {\n    const node = this.startNode();\n    this.expect(types._import);\n    this.expect(types.parenL);\n\n    if (!this.match(types.string)) {\n      this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);\n    }\n\n    node.argument = this.parseExprAtom();\n    this.expect(types.parenR);\n\n    if (this.eat(types.dot)) {\n      node.qualifier = this.tsParseEntityName(true);\n    }\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSImportType\");\n  }\n\n  tsParseEntityName(allowReservedWords) {\n    let entity = this.parseIdentifier();\n\n    while (this.eat(types.dot)) {\n      const node = this.startNodeAtNode(entity);\n      node.left = entity;\n      node.right = this.parseIdentifier(allowReservedWords);\n      entity = this.finishNode(node, \"TSQualifiedName\");\n    }\n\n    return entity;\n  }\n\n  tsParseTypeReference() {\n    const node = this.startNode();\n    node.typeName = this.tsParseEntityName(false);\n\n    if (!this.hasPrecedingLineBreak() && this.isRelational(\"<\")) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSTypeReference\");\n  }\n\n  tsParseThisTypePredicate(lhs) {\n    this.next();\n    const node = this.startNodeAtNode(lhs);\n    node.parameterName = lhs;\n    node.typeAnnotation = this.tsParseTypeAnnotation(false);\n    return this.finishNode(node, \"TSTypePredicate\");\n  }\n\n  tsParseThisTypeNode() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"TSThisType\");\n  }\n\n  tsParseTypeQuery() {\n    const node = this.startNode();\n    this.expect(types._typeof);\n\n    if (this.match(types._import)) {\n      node.exprName = this.tsParseImportType();\n    } else {\n      node.exprName = this.tsParseEntityName(true);\n    }\n\n    return this.finishNode(node, \"TSTypeQuery\");\n  }\n\n  tsParseTypeParameter() {\n    const node = this.startNode();\n    node.name = this.parseIdentifierName(node.start);\n    node.constraint = this.tsEatThenParseType(types._extends);\n    node.default = this.tsEatThenParseType(types.eq);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n\n  tsTryParseTypeParameters() {\n    if (this.isRelational(\"<\")) {\n      return this.tsParseTypeParameters();\n    }\n  }\n\n  tsParseTypeParameters() {\n    const node = this.startNode();\n\n    if (this.isRelational(\"<\") || this.match(types.jsxTagStart)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n\n    node.params = this.tsParseBracketedList(\"TypeParametersOrArguments\", this.tsParseTypeParameter.bind(this), false, true);\n\n    if (node.params.length === 0) {\n      this.raise(node.start, TSErrors.EmptyTypeParameters);\n    }\n\n    return this.finishNode(node, \"TSTypeParameterDeclaration\");\n  }\n\n  tsTryNextParseConstantContext() {\n    if (this.lookahead().type === types._const) {\n      this.next();\n      return this.tsParseTypeReference();\n    }\n\n    return null;\n  }\n\n  tsFillSignature(returnToken, signature) {\n    const returnTokenRequired = returnToken === types.arrow;\n    signature.typeParameters = this.tsTryParseTypeParameters();\n    this.expect(types.parenL);\n    signature.parameters = this.tsParseBindingListForSignature();\n\n    if (returnTokenRequired) {\n      signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    } else if (this.match(returnToken)) {\n      signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    }\n  }\n\n  tsParseBindingListForSignature() {\n    return this.parseBindingList(types.parenR, 41).map(pattern => {\n      if (pattern.type !== \"Identifier\" && pattern.type !== \"RestElement\" && pattern.type !== \"ObjectPattern\" && pattern.type !== \"ArrayPattern\") {\n        this.raise(pattern.start, TSErrors.UnsupportedSignatureParameterKind, pattern.type);\n      }\n\n      return pattern;\n    });\n  }\n\n  tsParseTypeMemberSemicolon() {\n    if (!this.eat(types.comma)) {\n      this.semicolon();\n    }\n  }\n\n  tsParseSignatureMember(kind, node) {\n    this.tsFillSignature(types.colon, node);\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, kind);\n  }\n\n  tsIsUnambiguouslyIndexSignature() {\n    this.next();\n    return this.eat(types.name) && this.match(types.colon);\n  }\n\n  tsTryParseIndexSignature(node) {\n    if (!(this.match(types.bracketL) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {\n      return undefined;\n    }\n\n    this.expect(types.bracketL);\n    const id = this.parseIdentifier();\n    id.typeAnnotation = this.tsParseTypeAnnotation();\n    this.resetEndLocation(id);\n    this.expect(types.bracketR);\n    node.parameters = [id];\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, \"TSIndexSignature\");\n  }\n\n  tsParsePropertyOrMethodSignature(node, readonly) {\n    if (this.eat(types.question)) node.optional = true;\n    const nodeAny = node;\n\n    if (!readonly && (this.match(types.parenL) || this.isRelational(\"<\"))) {\n      const method = nodeAny;\n      this.tsFillSignature(types.colon, method);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(method, \"TSMethodSignature\");\n    } else {\n      const property = nodeAny;\n      if (readonly) property.readonly = true;\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) property.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(property, \"TSPropertySignature\");\n    }\n  }\n\n  tsParseTypeMember() {\n    const node = this.startNode();\n\n    if (this.match(types.parenL) || this.isRelational(\"<\")) {\n      return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n    }\n\n    if (this.match(types._new)) {\n      const id = this.startNode();\n      this.next();\n\n      if (this.match(types.parenL) || this.isRelational(\"<\")) {\n        return this.tsParseSignatureMember(\"TSConstructSignatureDeclaration\", node);\n      } else {\n        node.key = this.createIdentifier(id, \"new\");\n        return this.tsParsePropertyOrMethodSignature(node, false);\n      }\n    }\n\n    const readonly = !!this.tsParseModifier([\"readonly\"]);\n    const idx = this.tsTryParseIndexSignature(node);\n\n    if (idx) {\n      if (readonly) node.readonly = true;\n      return idx;\n    }\n\n    this.parsePropertyName(node, false);\n    return this.tsParsePropertyOrMethodSignature(node, readonly);\n  }\n\n  tsParseTypeLiteral() {\n    const node = this.startNode();\n    node.members = this.tsParseObjectTypeMembers();\n    return this.finishNode(node, \"TSTypeLiteral\");\n  }\n\n  tsParseObjectTypeMembers() {\n    this.expect(types.braceL);\n    const members = this.tsParseList(\"TypeMembers\", this.tsParseTypeMember.bind(this));\n    this.expect(types.braceR);\n    return members;\n  }\n\n  tsIsStartOfMappedType() {\n    this.next();\n\n    if (this.eat(types.plusMin)) {\n      return this.isContextual(\"readonly\");\n    }\n\n    if (this.isContextual(\"readonly\")) {\n      this.next();\n    }\n\n    if (!this.match(types.bracketL)) {\n      return false;\n    }\n\n    this.next();\n\n    if (!this.tsIsIdentifier()) {\n      return false;\n    }\n\n    this.next();\n    return this.match(types._in);\n  }\n\n  tsParseMappedTypeParameter() {\n    const node = this.startNode();\n    node.name = this.parseIdentifierName(node.start);\n    node.constraint = this.tsExpectThenParseType(types._in);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n\n  tsParseMappedType() {\n    const node = this.startNode();\n    this.expect(types.braceL);\n\n    if (this.match(types.plusMin)) {\n      node.readonly = this.state.value;\n      this.next();\n      this.expectContextual(\"readonly\");\n    } else if (this.eatContextual(\"readonly\")) {\n      node.readonly = true;\n    }\n\n    this.expect(types.bracketL);\n    node.typeParameter = this.tsParseMappedTypeParameter();\n    node.nameType = this.eatContextual(\"as\") ? this.tsParseType() : null;\n    this.expect(types.bracketR);\n\n    if (this.match(types.plusMin)) {\n      node.optional = this.state.value;\n      this.next();\n      this.expect(types.question);\n    } else if (this.eat(types.question)) {\n      node.optional = true;\n    }\n\n    node.typeAnnotation = this.tsTryParseType();\n    this.semicolon();\n    this.expect(types.braceR);\n    return this.finishNode(node, \"TSMappedType\");\n  }\n\n  tsParseTupleType() {\n    const node = this.startNode();\n    node.elementTypes = this.tsParseBracketedList(\"TupleElementTypes\", this.tsParseTupleElementType.bind(this), true, false);\n    let seenOptionalElement = false;\n    let labeledElements = null;\n    node.elementTypes.forEach(elementNode => {\n      var _labeledElements;\n\n      let {\n        type\n      } = elementNode;\n\n      if (seenOptionalElement && type !== \"TSRestType\" && type !== \"TSOptionalType\" && !(type === \"TSNamedTupleMember\" && elementNode.optional)) {\n        this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);\n      }\n\n      seenOptionalElement = seenOptionalElement || type === \"TSNamedTupleMember\" && elementNode.optional || type === \"TSOptionalType\";\n\n      if (type === \"TSRestType\") {\n        elementNode = elementNode.typeAnnotation;\n        type = elementNode.type;\n      }\n\n      const isLabeled = type === \"TSNamedTupleMember\";\n      labeledElements = (_labeledElements = labeledElements) != null ? _labeledElements : isLabeled;\n\n      if (labeledElements !== isLabeled) {\n        this.raise(elementNode.start, TSErrors.MixedLabeledAndUnlabeledElements);\n      }\n    });\n    return this.finishNode(node, \"TSTupleType\");\n  }\n\n  tsParseTupleElementType() {\n    const {\n      start: startPos,\n      startLoc\n    } = this.state;\n    const rest = this.eat(types.ellipsis);\n    let type = this.tsParseType();\n    const optional = this.eat(types.question);\n    const labeled = this.eat(types.colon);\n\n    if (labeled) {\n      const labeledNode = this.startNodeAtNode(type);\n      labeledNode.optional = optional;\n\n      if (type.type === \"TSTypeReference\" && !type.typeParameters && type.typeName.type === \"Identifier\") {\n        labeledNode.label = type.typeName;\n      } else {\n        this.raise(type.start, TSErrors.InvalidTupleMemberLabel);\n        labeledNode.label = type;\n      }\n\n      labeledNode.elementType = this.tsParseType();\n      type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n    } else if (optional) {\n      const optionalTypeNode = this.startNodeAtNode(type);\n      optionalTypeNode.typeAnnotation = type;\n      type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n    }\n\n    if (rest) {\n      const restNode = this.startNodeAt(startPos, startLoc);\n      restNode.typeAnnotation = type;\n      type = this.finishNode(restNode, \"TSRestType\");\n    }\n\n    return type;\n  }\n\n  tsParseParenthesizedType() {\n    const node = this.startNode();\n    this.expect(types.parenL);\n    node.typeAnnotation = this.tsParseType();\n    this.expect(types.parenR);\n    return this.finishNode(node, \"TSParenthesizedType\");\n  }\n\n  tsParseFunctionOrConstructorType(type) {\n    const node = this.startNode();\n\n    if (type === \"TSConstructorType\") {\n      this.expect(types._new);\n    }\n\n    this.tsFillSignature(types.arrow, node);\n    return this.finishNode(node, type);\n  }\n\n  tsParseLiteralTypeNode() {\n    const node = this.startNode();\n\n    node.literal = (() => {\n      switch (this.state.type) {\n        case types.num:\n        case types.bigint:\n        case types.string:\n        case types._true:\n        case types._false:\n          return this.parseExprAtom();\n\n        default:\n          throw this.unexpected();\n      }\n    })();\n\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n\n  tsParseTemplateLiteralType() {\n    const node = this.startNode();\n    node.literal = this.parseTemplate(false);\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n\n  parseTemplateSubstitution() {\n    if (this.state.inType) return this.tsParseType();\n    return super.parseTemplateSubstitution();\n  }\n\n  tsParseThisTypeOrThisTypePredicate() {\n    const thisKeyword = this.tsParseThisTypeNode();\n\n    if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n      return this.tsParseThisTypePredicate(thisKeyword);\n    } else {\n      return thisKeyword;\n    }\n  }\n\n  tsParseNonArrayType() {\n    switch (this.state.type) {\n      case types.name:\n      case types._void:\n      case types._null:\n        {\n          const type = this.match(types._void) ? \"TSVoidKeyword\" : this.match(types._null) ? \"TSNullKeyword\" : keywordTypeFromName(this.state.value);\n\n          if (type !== undefined && this.lookaheadCharCode() !== 46) {\n            const node = this.startNode();\n            this.next();\n            return this.finishNode(node, type);\n          }\n\n          return this.tsParseTypeReference();\n        }\n\n      case types.string:\n      case types.num:\n      case types.bigint:\n      case types._true:\n      case types._false:\n        return this.tsParseLiteralTypeNode();\n\n      case types.plusMin:\n        if (this.state.value === \"-\") {\n          const node = this.startNode();\n          const nextToken = this.lookahead();\n\n          if (nextToken.type !== types.num && nextToken.type !== types.bigint) {\n            throw this.unexpected();\n          }\n\n          node.literal = this.parseMaybeUnary();\n          return this.finishNode(node, \"TSLiteralType\");\n        }\n\n        break;\n\n      case types._this:\n        return this.tsParseThisTypeOrThisTypePredicate();\n\n      case types._typeof:\n        return this.tsParseTypeQuery();\n\n      case types._import:\n        return this.tsParseImportType();\n\n      case types.braceL:\n        return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();\n\n      case types.bracketL:\n        return this.tsParseTupleType();\n\n      case types.parenL:\n        return this.tsParseParenthesizedType();\n\n      case types.backQuote:\n        return this.tsParseTemplateLiteralType();\n    }\n\n    throw this.unexpected();\n  }\n\n  tsParseArrayTypeOrHigher() {\n    let type = this.tsParseNonArrayType();\n\n    while (!this.hasPrecedingLineBreak() && this.eat(types.bracketL)) {\n      if (this.match(types.bracketR)) {\n        const node = this.startNodeAtNode(type);\n        node.elementType = type;\n        this.expect(types.bracketR);\n        type = this.finishNode(node, \"TSArrayType\");\n      } else {\n        const node = this.startNodeAtNode(type);\n        node.objectType = type;\n        node.indexType = this.tsParseType();\n        this.expect(types.bracketR);\n        type = this.finishNode(node, \"TSIndexedAccessType\");\n      }\n    }\n\n    return type;\n  }\n\n  tsParseTypeOperator(operator) {\n    const node = this.startNode();\n    this.expectContextual(operator);\n    node.operator = operator;\n    node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n    if (operator === \"readonly\") {\n      this.tsCheckTypeAnnotationForReadOnly(node);\n    }\n\n    return this.finishNode(node, \"TSTypeOperator\");\n  }\n\n  tsCheckTypeAnnotationForReadOnly(node) {\n    switch (node.typeAnnotation.type) {\n      case \"TSTupleType\":\n      case \"TSArrayType\":\n        return;\n\n      default:\n        this.raise(node.start, TSErrors.UnexpectedReadonly);\n    }\n  }\n\n  tsParseInferType() {\n    const node = this.startNode();\n    this.expectContextual(\"infer\");\n    const typeParameter = this.startNode();\n    typeParameter.name = this.parseIdentifierName(typeParameter.start);\n    node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n    return this.finishNode(node, \"TSInferType\");\n  }\n\n  tsParseTypeOperatorOrHigher() {\n    const operator = [\"keyof\", \"unique\", \"readonly\"].find(kw => this.isContextual(kw));\n    return operator ? this.tsParseTypeOperator(operator) : this.isContextual(\"infer\") ? this.tsParseInferType() : this.tsParseArrayTypeOrHigher();\n  }\n\n  tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {\n    this.eat(operator);\n    let type = parseConstituentType();\n\n    if (this.match(operator)) {\n      const types = [type];\n\n      while (this.eat(operator)) {\n        types.push(parseConstituentType());\n      }\n\n      const node = this.startNodeAtNode(type);\n      node.types = types;\n      type = this.finishNode(node, kind);\n    }\n\n    return type;\n  }\n\n  tsParseIntersectionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSIntersectionType\", this.tsParseTypeOperatorOrHigher.bind(this), types.bitwiseAND);\n  }\n\n  tsParseUnionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSUnionType\", this.tsParseIntersectionTypeOrHigher.bind(this), types.bitwiseOR);\n  }\n\n  tsIsStartOfFunctionType() {\n    if (this.isRelational(\"<\")) {\n      return true;\n    }\n\n    return this.match(types.parenL) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));\n  }\n\n  tsSkipParameterStart() {\n    if (this.match(types.name) || this.match(types._this)) {\n      this.next();\n      return true;\n    }\n\n    if (this.match(types.braceL)) {\n      let braceStackCounter = 1;\n      this.next();\n\n      while (braceStackCounter > 0) {\n        if (this.match(types.braceL)) {\n          ++braceStackCounter;\n        } else if (this.match(types.braceR)) {\n          --braceStackCounter;\n        }\n\n        this.next();\n      }\n\n      return true;\n    }\n\n    if (this.match(types.bracketL)) {\n      let braceStackCounter = 1;\n      this.next();\n\n      while (braceStackCounter > 0) {\n        if (this.match(types.bracketL)) {\n          ++braceStackCounter;\n        } else if (this.match(types.bracketR)) {\n          --braceStackCounter;\n        }\n\n        this.next();\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  tsIsUnambiguouslyStartOfFunctionType() {\n    this.next();\n\n    if (this.match(types.parenR) || this.match(types.ellipsis)) {\n      return true;\n    }\n\n    if (this.tsSkipParameterStart()) {\n      if (this.match(types.colon) || this.match(types.comma) || this.match(types.question) || this.match(types.eq)) {\n        return true;\n      }\n\n      if (this.match(types.parenR)) {\n        this.next();\n\n        if (this.match(types.arrow)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  tsParseTypeOrTypePredicateAnnotation(returnToken) {\n    return this.tsInType(() => {\n      const t = this.startNode();\n      this.expect(returnToken);\n      const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));\n\n      if (asserts && this.match(types._this)) {\n        let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n\n        if (thisTypePredicate.type === \"TSThisType\") {\n          const node = this.startNodeAtNode(t);\n          node.parameterName = thisTypePredicate;\n          node.asserts = true;\n          thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n        } else {\n          thisTypePredicate.asserts = true;\n        }\n\n        t.typeAnnotation = thisTypePredicate;\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n\n      const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n      if (!typePredicateVariable) {\n        if (!asserts) {\n          return this.tsParseTypeAnnotation(false, t);\n        }\n\n        const node = this.startNodeAtNode(t);\n        node.parameterName = this.parseIdentifier();\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n\n      const type = this.tsParseTypeAnnotation(false);\n      const node = this.startNodeAtNode(t);\n      node.parameterName = typePredicateVariable;\n      node.typeAnnotation = type;\n      node.asserts = asserts;\n      t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    });\n  }\n\n  tsTryParseTypeOrTypePredicateAnnotation() {\n    return this.match(types.colon) ? this.tsParseTypeOrTypePredicateAnnotation(types.colon) : undefined;\n  }\n\n  tsTryParseTypeAnnotation() {\n    return this.match(types.colon) ? this.tsParseTypeAnnotation() : undefined;\n  }\n\n  tsTryParseType() {\n    return this.tsEatThenParseType(types.colon);\n  }\n\n  tsParseTypePredicatePrefix() {\n    const id = this.parseIdentifier();\n\n    if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n      this.next();\n      return id;\n    }\n  }\n\n  tsParseTypePredicateAsserts() {\n    if (!this.match(types.name) || this.state.value !== \"asserts\" || this.hasPrecedingLineBreak()) {\n      return false;\n    }\n\n    const containsEsc = this.state.containsEsc;\n    this.next();\n\n    if (!this.match(types.name) && !this.match(types._this)) {\n      return false;\n    }\n\n    if (containsEsc) {\n      this.raise(this.state.lastTokStart, ErrorMessages.InvalidEscapedReservedWord, \"asserts\");\n    }\n\n    return true;\n  }\n\n  tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {\n    this.tsInType(() => {\n      if (eatColon) this.expect(types.colon);\n      t.typeAnnotation = this.tsParseType();\n    });\n    return this.finishNode(t, \"TSTypeAnnotation\");\n  }\n\n  tsParseType() {\n    assert(this.state.inType);\n    const type = this.tsParseNonConditionalType();\n\n    if (this.hasPrecedingLineBreak() || !this.eat(types._extends)) {\n      return type;\n    }\n\n    const node = this.startNodeAtNode(type);\n    node.checkType = type;\n    node.extendsType = this.tsParseNonConditionalType();\n    this.expect(types.question);\n    node.trueType = this.tsParseType();\n    this.expect(types.colon);\n    node.falseType = this.tsParseType();\n    return this.finishNode(node, \"TSConditionalType\");\n  }\n\n  tsParseNonConditionalType() {\n    if (this.tsIsStartOfFunctionType()) {\n      return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n    }\n\n    if (this.match(types._new)) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n    }\n\n    return this.tsParseUnionTypeOrHigher();\n  }\n\n  tsParseTypeAssertion() {\n    const node = this.startNode();\n\n    const _const = this.tsTryNextParseConstantContext();\n\n    node.typeAnnotation = _const || this.tsNextThenParseType();\n    this.expectRelational(\">\");\n    node.expression = this.parseMaybeUnary();\n    return this.finishNode(node, \"TSTypeAssertion\");\n  }\n\n  tsParseHeritageClause(descriptor) {\n    const originalStart = this.state.start;\n    const delimitedList = this.tsParseDelimitedList(\"HeritageClauseElement\", this.tsParseExpressionWithTypeArguments.bind(this));\n\n    if (!delimitedList.length) {\n      this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);\n    }\n\n    return delimitedList;\n  }\n\n  tsParseExpressionWithTypeArguments() {\n    const node = this.startNode();\n    node.expression = this.tsParseEntityName(false);\n\n    if (this.isRelational(\"<\")) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n  }\n\n  tsParseInterfaceDeclaration(node) {\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, BIND_TS_INTERFACE, undefined, \"typescript interface declaration\");\n    node.typeParameters = this.tsTryParseTypeParameters();\n\n    if (this.eat(types._extends)) {\n      node.extends = this.tsParseHeritageClause(\"extends\");\n    }\n\n    const body = this.startNode();\n    body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n    node.body = this.finishNode(body, \"TSInterfaceBody\");\n    return this.finishNode(node, \"TSInterfaceDeclaration\");\n  }\n\n  tsParseTypeAliasDeclaration(node) {\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, BIND_TS_TYPE, undefined, \"typescript type alias\");\n    node.typeParameters = this.tsTryParseTypeParameters();\n    node.typeAnnotation = this.tsInType(() => {\n      this.expect(types.eq);\n\n      if (this.isContextual(\"intrinsic\") && this.lookahead().type !== types.dot) {\n        const node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"TSIntrinsicKeyword\");\n      }\n\n      return this.tsParseType();\n    });\n    this.semicolon();\n    return this.finishNode(node, \"TSTypeAliasDeclaration\");\n  }\n\n  tsInNoContext(cb) {\n    const oldContext = this.state.context;\n    this.state.context = [oldContext[0]];\n\n    try {\n      return cb();\n    } finally {\n      this.state.context = oldContext;\n    }\n  }\n\n  tsInType(cb) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n\n    try {\n      return cb();\n    } finally {\n      this.state.inType = oldInType;\n    }\n  }\n\n  tsEatThenParseType(token) {\n    return !this.match(token) ? undefined : this.tsNextThenParseType();\n  }\n\n  tsExpectThenParseType(token) {\n    return this.tsDoThenParseType(() => this.expect(token));\n  }\n\n  tsNextThenParseType() {\n    return this.tsDoThenParseType(() => this.next());\n  }\n\n  tsDoThenParseType(cb) {\n    return this.tsInType(() => {\n      cb();\n      return this.tsParseType();\n    });\n  }\n\n  tsParseEnumMember() {\n    const node = this.startNode();\n    node.id = this.match(types.string) ? this.parseExprAtom() : this.parseIdentifier(true);\n\n    if (this.eat(types.eq)) {\n      node.initializer = this.parseMaybeAssignAllowIn();\n    }\n\n    return this.finishNode(node, \"TSEnumMember\");\n  }\n\n  tsParseEnumDeclaration(node, isConst) {\n    if (isConst) node.const = true;\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM, undefined, \"typescript enum declaration\");\n    this.expect(types.braceL);\n    node.members = this.tsParseDelimitedList(\"EnumMembers\", this.tsParseEnumMember.bind(this));\n    this.expect(types.braceR);\n    return this.finishNode(node, \"TSEnumDeclaration\");\n  }\n\n  tsParseModuleBlock() {\n    const node = this.startNode();\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(types.braceL);\n    this.parseBlockOrModuleBlockBody(node.body = [], undefined, true, types.braceR);\n    this.scope.exit();\n    return this.finishNode(node, \"TSModuleBlock\");\n  }\n\n  tsParseModuleOrNamespaceDeclaration(node, nested = false) {\n    node.id = this.parseIdentifier();\n\n    if (!nested) {\n      this.checkLVal(node.id, BIND_TS_NAMESPACE, null, \"module or namespace declaration\");\n    }\n\n    if (this.eat(types.dot)) {\n      const inner = this.startNode();\n      this.tsParseModuleOrNamespaceDeclaration(inner, true);\n      node.body = inner;\n    } else {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    }\n\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n\n  tsParseAmbientExternalModuleDeclaration(node) {\n    if (this.isContextual(\"global\")) {\n      node.global = true;\n      node.id = this.parseIdentifier();\n    } else if (this.match(types.string)) {\n      node.id = this.parseExprAtom();\n    } else {\n      this.unexpected();\n    }\n\n    if (this.match(types.braceL)) {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    } else {\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n\n  tsParseImportEqualsDeclaration(node, isExport) {\n    node.isExport = isExport || false;\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, BIND_LEXICAL, undefined, \"import equals declaration\");\n    this.expect(types.eq);\n    node.moduleReference = this.tsParseModuleReference();\n    this.semicolon();\n    return this.finishNode(node, \"TSImportEqualsDeclaration\");\n  }\n\n  tsIsExternalModuleReference() {\n    return this.isContextual(\"require\") && this.lookaheadCharCode() === 40;\n  }\n\n  tsParseModuleReference() {\n    return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);\n  }\n\n  tsParseExternalModuleReference() {\n    const node = this.startNode();\n    this.expectContextual(\"require\");\n    this.expect(types.parenL);\n\n    if (!this.match(types.string)) {\n      throw this.unexpected();\n    }\n\n    node.expression = this.parseExprAtom();\n    this.expect(types.parenR);\n    return this.finishNode(node, \"TSExternalModuleReference\");\n  }\n\n  tsLookAhead(f) {\n    const state = this.state.clone();\n    const res = f();\n    this.state = state;\n    return res;\n  }\n\n  tsTryParseAndCatch(f) {\n    const result = this.tryParse(abort => f() || abort());\n    if (result.aborted || !result.node) return undefined;\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n\n  tsTryParse(f) {\n    const state = this.state.clone();\n    const result = f();\n\n    if (result !== undefined && result !== false) {\n      return result;\n    } else {\n      this.state = state;\n      return undefined;\n    }\n  }\n\n  tsTryParseDeclare(nany) {\n    if (this.isLineTerminator()) {\n      return;\n    }\n\n    let starttype = this.state.type;\n    let kind;\n\n    if (this.isContextual(\"let\")) {\n      starttype = types._var;\n      kind = \"let\";\n    }\n\n    return this.tsInDeclareContext(() => {\n      switch (starttype) {\n        case types._function:\n          nany.declare = true;\n          return this.parseFunctionStatement(nany, false, true);\n\n        case types._class:\n          nany.declare = true;\n          return this.parseClass(nany, true, false);\n\n        case types._const:\n          if (this.match(types._const) && this.isLookaheadContextual(\"enum\")) {\n            this.expect(types._const);\n            this.expectContextual(\"enum\");\n            return this.tsParseEnumDeclaration(nany, true);\n          }\n\n        case types._var:\n          kind = kind || this.state.value;\n          return this.parseVarStatement(nany, kind);\n\n        case types.name:\n          {\n            const value = this.state.value;\n\n            if (value === \"global\") {\n              return this.tsParseAmbientExternalModuleDeclaration(nany);\n            } else {\n              return this.tsParseDeclaration(nany, value, true);\n            }\n          }\n      }\n    });\n  }\n\n  tsTryParseExportDeclaration() {\n    return this.tsParseDeclaration(this.startNode(), this.state.value, true);\n  }\n\n  tsParseExpressionStatement(node, expr) {\n    switch (expr.name) {\n      case \"declare\":\n        {\n          const declaration = this.tsTryParseDeclare(node);\n\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n\n          break;\n        }\n\n      case \"global\":\n        if (this.match(types.braceL)) {\n          this.scope.enter(SCOPE_TS_MODULE);\n          this.prodParam.enter(PARAM);\n          const mod = node;\n          mod.global = true;\n          mod.id = expr;\n          mod.body = this.tsParseModuleBlock();\n          this.scope.exit();\n          this.prodParam.exit();\n          return this.finishNode(mod, \"TSModuleDeclaration\");\n        }\n\n        break;\n\n      default:\n        return this.tsParseDeclaration(node, expr.name, false);\n    }\n  }\n\n  tsParseDeclaration(node, value, next) {\n    switch (value) {\n      case \"abstract\":\n        if (this.tsCheckLineTerminatorAndMatch(types._class, next)) {\n          const cls = node;\n          cls.abstract = true;\n\n          if (next) {\n            this.next();\n\n            if (!this.match(types._class)) {\n              this.unexpected(null, types._class);\n            }\n          }\n\n          return this.parseClass(cls, true, false);\n        }\n\n        break;\n\n      case \"enum\":\n        if (next || this.match(types.name)) {\n          if (next) this.next();\n          return this.tsParseEnumDeclaration(node, false);\n        }\n\n        break;\n\n      case \"interface\":\n        if (this.tsCheckLineTerminatorAndMatch(types.name, next)) {\n          if (next) this.next();\n          return this.tsParseInterfaceDeclaration(node);\n        }\n\n        break;\n\n      case \"module\":\n        if (next) this.next();\n\n        if (this.match(types.string)) {\n          return this.tsParseAmbientExternalModuleDeclaration(node);\n        } else if (this.tsCheckLineTerminatorAndMatch(types.name, next)) {\n          return this.tsParseModuleOrNamespaceDeclaration(node);\n        }\n\n        break;\n\n      case \"namespace\":\n        if (this.tsCheckLineTerminatorAndMatch(types.name, next)) {\n          if (next) this.next();\n          return this.tsParseModuleOrNamespaceDeclaration(node);\n        }\n\n        break;\n\n      case \"type\":\n        if (this.tsCheckLineTerminatorAndMatch(types.name, next)) {\n          if (next) this.next();\n          return this.tsParseTypeAliasDeclaration(node);\n        }\n\n        break;\n    }\n  }\n\n  tsCheckLineTerminatorAndMatch(tokenType, next) {\n    return (next || this.match(tokenType)) && !this.isLineTerminator();\n  }\n\n  tsTryParseGenericAsyncArrowFunction(startPos, startLoc) {\n    if (!this.isRelational(\"<\")) {\n      return undefined;\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    const res = this.tsTryParseAndCatch(() => {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.typeParameters = this.tsParseTypeParameters();\n      super.parseFunctionParams(node);\n      node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n      this.expect(types.arrow);\n      return node;\n    });\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n\n    if (!res) {\n      return undefined;\n    }\n\n    return this.parseArrowExpression(res, null, true);\n  }\n\n  tsParseTypeArguments() {\n    const node = this.startNode();\n    node.params = this.tsInType(() => this.tsInNoContext(() => {\n      this.expectRelational(\"<\");\n      return this.tsParseDelimitedList(\"TypeParametersOrArguments\", this.tsParseType.bind(this));\n    }));\n\n    if (node.params.length === 0) {\n      this.raise(node.start, TSErrors.EmptyTypeArguments);\n    }\n\n    this.state.exprAllowed = false;\n    this.expectRelational(\">\");\n    return this.finishNode(node, \"TSTypeParameterInstantiation\");\n  }\n\n  tsIsDeclarationStart() {\n    if (this.match(types.name)) {\n      switch (this.state.value) {\n        case \"abstract\":\n        case \"declare\":\n        case \"enum\":\n        case \"interface\":\n        case \"module\":\n        case \"namespace\":\n        case \"type\":\n          return true;\n      }\n    }\n\n    return false;\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.tsIsDeclarationStart()) return false;\n    return super.isExportDefaultSpecifier();\n  }\n\n  parseAssignableListItem(allowModifiers, decorators) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let accessibility;\n    let readonly = false;\n\n    if (allowModifiers !== undefined) {\n      accessibility = this.parseAccessModifier();\n      readonly = !!this.tsParseModifier([\"readonly\"]);\n\n      if (allowModifiers === false && (accessibility || readonly)) {\n        this.raise(startPos, TSErrors.UnexpectedParameterModifier);\n      }\n    }\n\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n    if (accessibility || readonly) {\n      const pp = this.startNodeAt(startPos, startLoc);\n\n      if (decorators.length) {\n        pp.decorators = decorators;\n      }\n\n      if (accessibility) pp.accessibility = accessibility;\n      if (readonly) pp.readonly = readonly;\n\n      if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n        this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);\n      }\n\n      pp.parameter = elt;\n      return this.finishNode(pp, \"TSParameterProperty\");\n    }\n\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n\n    return elt;\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(types.colon)) {\n      node.returnType = this.tsParseTypeOrTypePredicateAnnotation(types.colon);\n    }\n\n    const bodilessType = type === \"FunctionDeclaration\" ? \"TSDeclareFunction\" : type === \"ClassMethod\" ? \"TSDeclareMethod\" : undefined;\n\n    if (bodilessType && !this.match(types.braceL) && this.isLineTerminator()) {\n      this.finishNode(node, bodilessType);\n      return;\n    }\n\n    if (bodilessType === \"TSDeclareFunction\" && this.state.isDeclareContext) {\n      this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);\n\n      if (node.declare) {\n        super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        return;\n      }\n    }\n\n    super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n\n  registerFunctionStatementId(node) {\n    if (!node.body && node.id) {\n      this.checkLVal(node.id, BIND_TS_AMBIENT, null, \"function name\");\n    } else {\n      super.registerFunctionStatementId(...arguments);\n    }\n  }\n\n  tsCheckForInvalidTypeCasts(items) {\n    items.forEach(node => {\n      if ((node == null ? void 0 : node.type) === \"TSTypeCastExpression\") {\n        this.raise(node.typeAnnotation.start, TSErrors.UnexpectedTypeAnnotation);\n      }\n    });\n  }\n\n  toReferencedList(exprList, isInParens) {\n    this.tsCheckForInvalidTypeCasts(exprList);\n    return exprList;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    if (!this.hasPrecedingLineBreak() && this.match(types.bang)) {\n      this.state.exprAllowed = false;\n      this.next();\n      const nonNullExpression = this.startNodeAt(startPos, startLoc);\n      nonNullExpression.expression = base;\n      return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n    }\n\n    if (this.isRelational(\"<\")) {\n      const result = this.tsTryParseAndCatch(() => {\n        if (!noCalls && this.atPossibleAsyncArrow(base)) {\n          const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startPos, startLoc);\n\n          if (asyncArrowFn) {\n            return asyncArrowFn;\n          }\n        }\n\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        const typeArguments = this.tsParseTypeArguments();\n\n        if (typeArguments) {\n          if (!noCalls && this.eat(types.parenL)) {\n            node.arguments = this.parseCallExpressionArguments(types.parenR, false);\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n            node.typeParameters = typeArguments;\n            return this.finishCallExpression(node, state.optionalChainMember);\n          } else if (this.match(types.backQuote)) {\n            const result = this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n            result.typeParameters = typeArguments;\n            return result;\n          }\n        }\n\n        this.unexpected();\n      });\n      if (result) return result;\n    }\n\n    return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n  }\n\n  parseNewArguments(node) {\n    if (this.isRelational(\"<\")) {\n      const typeParameters = this.tsTryParseAndCatch(() => {\n        const args = this.tsParseTypeArguments();\n        if (!this.match(types.parenL)) this.unexpected();\n        return args;\n      });\n\n      if (typeParameters) {\n        node.typeParameters = typeParameters;\n      }\n    }\n\n    super.parseNewArguments(node);\n  }\n\n  parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n    if (nonNull(types._in.binop) > minPrec && !this.hasPrecedingLineBreak() && this.isContextual(\"as\")) {\n      const node = this.startNodeAt(leftStartPos, leftStartLoc);\n      node.expression = left;\n\n      const _const = this.tsTryNextParseConstantContext();\n\n      if (_const) {\n        node.typeAnnotation = _const;\n      } else {\n        node.typeAnnotation = this.tsNextThenParseType();\n      }\n\n      this.finishNode(node, \"TSAsExpression\");\n      this.reScan_lt_gt();\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n    }\n\n    return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);\n  }\n\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {}\n\n  checkDuplicateExports() {}\n\n  parseImport(node) {\n    if (this.match(types.name) || this.match(types.star) || this.match(types.braceL)) {\n      const ahead = this.lookahead();\n\n      if (this.match(types.name) && ahead.type === types.eq) {\n        return this.tsParseImportEqualsDeclaration(node);\n      }\n\n      if (this.isContextual(\"type\") && ahead.type !== types.comma && !(ahead.type === types.name && ahead.value === \"from\")) {\n        node.importKind = \"type\";\n        this.next();\n      } else {\n        node.importKind = \"value\";\n      }\n    }\n\n    const importNode = super.parseImport(node);\n\n    if (importNode.importKind === \"type\" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === \"ImportDefaultSpecifier\") {\n      this.raise(importNode.start, \"A type-only import can specify a default import or named bindings, but not both.\");\n    }\n\n    return importNode;\n  }\n\n  parseExport(node) {\n    if (this.match(types._import)) {\n      this.expect(types._import);\n      return this.tsParseImportEqualsDeclaration(node, true);\n    } else if (this.eat(types.eq)) {\n      const assign = node;\n      assign.expression = this.parseExpression();\n      this.semicolon();\n      return this.finishNode(assign, \"TSExportAssignment\");\n    } else if (this.eatContextual(\"as\")) {\n      const decl = node;\n      this.expectContextual(\"namespace\");\n      decl.id = this.parseIdentifier();\n      this.semicolon();\n      return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n    } else {\n      if (this.isContextual(\"type\") && this.lookahead().type === types.braceL) {\n        this.next();\n        node.exportKind = \"type\";\n      } else {\n        node.exportKind = \"value\";\n      }\n\n      return super.parseExport(node);\n    }\n  }\n\n  isAbstractClass() {\n    return this.isContextual(\"abstract\") && this.lookahead().type === types._class;\n  }\n\n  parseExportDefaultExpression() {\n    if (this.isAbstractClass()) {\n      const cls = this.startNode();\n      this.next();\n      this.parseClass(cls, true, true);\n      cls.abstract = true;\n      return cls;\n    }\n\n    if (this.state.value === \"interface\") {\n      const result = this.tsParseDeclaration(this.startNode(), this.state.value, true);\n      if (result) return result;\n    }\n\n    return super.parseExportDefaultExpression();\n  }\n\n  parseStatementContent(context, topLevel) {\n    if (this.state.type === types._const) {\n      const ahead = this.lookahead();\n\n      if (ahead.type === types.name && ahead.value === \"enum\") {\n        const node = this.startNode();\n        this.expect(types._const);\n        this.expectContextual(\"enum\");\n        return this.tsParseEnumDeclaration(node, true);\n      }\n    }\n\n    return super.parseStatementContent(context, topLevel);\n  }\n\n  parseAccessModifier() {\n    return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n  }\n\n  parseClassMember(classBody, member, state) {\n    this.tsParseModifiers(member, [\"declare\"]);\n    const accessibility = this.parseAccessModifier();\n    if (accessibility) member.accessibility = accessibility;\n    this.tsParseModifiers(member, [\"declare\"]);\n\n    const callParseClassMember = () => {\n      super.parseClassMember(classBody, member, state);\n    };\n\n    if (member.declare) {\n      this.tsInDeclareContext(callParseClassMember);\n    } else {\n      callParseClassMember();\n    }\n  }\n\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    this.tsParseModifiers(member, [\"abstract\", \"readonly\", \"declare\"]);\n    const idx = this.tsTryParseIndexSignature(member);\n\n    if (idx) {\n      classBody.body.push(idx);\n\n      if (member.abstract) {\n        this.raise(member.start, TSErrors.IndexSignatureHasAbstract);\n      }\n\n      if (isStatic) {\n        this.raise(member.start, TSErrors.IndexSignatureHasStatic);\n      }\n\n      if (member.accessibility) {\n        this.raise(member.start, TSErrors.IndexSignatureHasAccessibility, member.accessibility);\n      }\n\n      if (member.declare) {\n        this.raise(member.start, TSErrors.IndexSignatureHasDeclare);\n      }\n\n      return;\n    }\n\n    super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parsePostMemberNameModifiers(methodOrProp) {\n    const optional = this.eat(types.question);\n    if (optional) methodOrProp.optional = true;\n\n    if (methodOrProp.readonly && this.match(types.parenL)) {\n      this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);\n    }\n\n    if (methodOrProp.declare && this.match(types.parenL)) {\n      this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);\n    }\n  }\n\n  parseExpressionStatement(node, expr) {\n    const decl = expr.type === \"Identifier\" ? this.tsParseExpressionStatement(node, expr) : undefined;\n    return decl || super.parseExpressionStatement(node, expr);\n  }\n\n  shouldParseExportDeclaration() {\n    if (this.tsIsDeclarationStart()) return true;\n    return super.shouldParseExportDeclaration();\n  }\n\n  parseConditional(expr, startPos, startLoc, refNeedsArrowPos) {\n    if (!refNeedsArrowPos || !this.match(types.question)) {\n      return super.parseConditional(expr, startPos, startLoc, refNeedsArrowPos);\n    }\n\n    const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n    if (!result.node) {\n      refNeedsArrowPos.start = result.error.pos || this.state.start;\n      return expr;\n    }\n\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    node = super.parseParenItem(node, startPos, startLoc);\n\n    if (this.eat(types.question)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n\n    if (this.match(types.colon)) {\n      const typeCastNode = this.startNodeAt(startPos, startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n    }\n\n    return node;\n  }\n\n  parseExportDeclaration(node) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const isDeclare = this.eatContextual(\"declare\");\n    let declaration;\n\n    if (this.match(types.name)) {\n      declaration = this.tsTryParseExportDeclaration();\n    }\n\n    if (!declaration) {\n      declaration = super.parseExportDeclaration(node);\n    }\n\n    if (declaration && (declaration.type === \"TSInterfaceDeclaration\" || declaration.type === \"TSTypeAliasDeclaration\" || isDeclare)) {\n      node.exportKind = \"type\";\n    }\n\n    if (declaration && isDeclare) {\n      this.resetStartLocation(declaration, startPos, startLoc);\n      declaration.declare = true;\n    }\n\n    return declaration;\n  }\n\n  parseClassId(node, isStatement, optionalId) {\n    if ((!isStatement || optionalId) && this.isContextual(\"implements\")) {\n      return;\n    }\n\n    super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) node.typeParameters = typeParameters;\n  }\n\n  parseClassPropertyAnnotation(node) {\n    if (!node.optional && this.eat(types.bang)) {\n      node.definite = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n  }\n\n  parseClassProperty(node) {\n    this.parseClassPropertyAnnotation(node);\n\n    if (this.state.isDeclareContext && this.match(types.eq)) {\n      this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);\n    }\n\n    return super.parseClassProperty(node);\n  }\n\n  parseClassPrivateProperty(node) {\n    if (node.abstract) {\n      this.raise(node.start, TSErrors.PrivateElementHasAbstract);\n    }\n\n    if (node.accessibility) {\n      this.raise(node.start, TSErrors.PrivateElementHasAccessibility, node.accessibility);\n    }\n\n    this.parseClassPropertyAnnotation(node);\n    return super.parseClassPrivateProperty(node);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    const typeParameters = this.tsTryParseTypeParameters();\n\n    if (typeParameters && isConstructor) {\n      this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);\n    }\n\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n\n    if (node.superClass && this.isRelational(\"<\")) {\n      node.superTypeParameters = this.tsParseTypeArguments();\n    }\n\n    if (this.eatContextual(\"implements\")) {\n      node.implements = this.tsParseHeritageClause(\"implements\");\n    }\n  }\n\n  parseObjPropValue(prop, ...args) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) prop.typeParameters = typeParameters;\n    super.parseObjPropValue(prop, ...args);\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) node.typeParameters = typeParameters;\n    super.parseFunctionParams(node, allowModifiers);\n  }\n\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n\n    if (decl.id.type === \"Identifier\" && this.eat(types.bang)) {\n      decl.definite = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n\n    if (type) {\n      decl.id.typeAnnotation = type;\n      this.resetEndLocation(decl.id);\n    }\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(types.colon)) {\n      node.returnType = this.tsParseTypeAnnotation();\n    }\n\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n\n  parseMaybeAssign(...args) {\n    var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;\n\n    let state;\n    let jsx;\n    let typeCast;\n\n    if (this.match(types.jsxTagStart)) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n\n      if (context[context.length - 1] === types$1.j_oTag) {\n        context.length -= 2;\n      } else if (context[context.length - 1] === types$1.j_expr) {\n        context.length -= 1;\n      }\n    }\n\n    if (!((_jsx = jsx) == null ? void 0 : _jsx.error) && !this.isRelational(\"<\")) {\n      return super.parseMaybeAssign(...args);\n    }\n\n    let typeParameters;\n    state = state || this.state.clone();\n    const arrow = this.tryParse(abort => {\n      var _typeParameters;\n\n      typeParameters = this.tsParseTypeParameters();\n      const expr = super.parseMaybeAssign(...args);\n\n      if (expr.type !== \"ArrowFunctionExpression\" || expr.extra && expr.extra.parenthesized) {\n        abort();\n      }\n\n      if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {\n        this.resetStartLocationFromNode(expr, typeParameters);\n      }\n\n      expr.typeParameters = typeParameters;\n      return expr;\n    }, state);\n    if (!arrow.error && !arrow.aborted) return arrow.node;\n\n    if (!jsx) {\n      assert(!this.hasPlugin(\"jsx\"));\n      typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n      if (!typeCast.error) return typeCast.node;\n    }\n\n    if ((_jsx2 = jsx) == null ? void 0 : _jsx2.node) {\n      this.state = jsx.failState;\n      return jsx.node;\n    }\n\n    if (arrow.node) {\n      this.state = arrow.failState;\n      return arrow.node;\n    }\n\n    if ((_typeCast = typeCast) == null ? void 0 : _typeCast.node) {\n      this.state = typeCast.failState;\n      return typeCast.node;\n    }\n\n    if ((_jsx3 = jsx) == null ? void 0 : _jsx3.thrown) throw jsx.error;\n    if (arrow.thrown) throw arrow.error;\n    if ((_typeCast2 = typeCast) == null ? void 0 : _typeCast2.thrown) throw typeCast.error;\n    throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);\n  }\n\n  parseMaybeUnary(refExpressionErrors) {\n    if (!this.hasPlugin(\"jsx\") && this.isRelational(\"<\")) {\n      return this.tsParseTypeAssertion();\n    } else {\n      return super.parseMaybeUnary(refExpressionErrors);\n    }\n  }\n\n  parseArrow(node) {\n    if (this.match(types.colon)) {\n      const result = this.tryParse(abort => {\n        const returnType = this.tsParseTypeOrTypePredicateAnnotation(types.colon);\n        if (this.canInsertSemicolon() || !this.match(types.arrow)) abort();\n        return returnType;\n      });\n      if (result.aborted) return;\n\n      if (!result.thrown) {\n        if (result.error) this.state = result.failState;\n        node.returnType = result.node;\n      }\n    }\n\n    return super.parseArrow(node);\n  }\n\n  parseAssignableListItemTypes(param) {\n    if (this.eat(types.question)) {\n      if (param.type !== \"Identifier\" && !this.state.isDeclareContext) {\n        this.raise(param.start, TSErrors.PatternIsOptional);\n      }\n\n      param.optional = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) param.typeAnnotation = type;\n    this.resetEndLocation(param);\n    return param;\n  }\n\n  toAssignable(node) {\n    switch (node.type) {\n      case \"TSTypeCastExpression\":\n        return super.toAssignable(this.typeCastToParameter(node));\n\n      case \"TSParameterProperty\":\n        return super.toAssignable(node);\n\n      case \"TSAsExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n        node.expression = this.toAssignable(node.expression);\n        return node;\n\n      default:\n        return super.toAssignable(node);\n    }\n  }\n\n  checkLVal(expr, bindingType = BIND_NONE, checkClashes, contextDescription) {\n    switch (expr.type) {\n      case \"TSTypeCastExpression\":\n        return;\n\n      case \"TSParameterProperty\":\n        this.checkLVal(expr.parameter, bindingType, checkClashes, \"parameter property\");\n        return;\n\n      case \"TSAsExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n        this.checkLVal(expr.expression, bindingType, checkClashes, contextDescription);\n        return;\n\n      default:\n        super.checkLVal(expr, bindingType, checkClashes, contextDescription);\n        return;\n    }\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case types._this:\n        return this.parseIdentifier(true);\n\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n\n  parseMaybeDecoratorArguments(expr) {\n    if (this.isRelational(\"<\")) {\n      const typeArguments = this.tsParseTypeArguments();\n\n      if (this.match(types.parenL)) {\n        const call = super.parseMaybeDecoratorArguments(expr);\n        call.typeParameters = typeArguments;\n        return call;\n      }\n\n      this.unexpected(this.state.start, types.parenL);\n    }\n\n    return super.parseMaybeDecoratorArguments(expr);\n  }\n\n  isClassMethod() {\n    return this.isRelational(\"<\") || super.isClassMethod();\n  }\n\n  isClassProperty() {\n    return this.match(types.bang) || this.match(types.colon) || super.isClassProperty();\n  }\n\n  parseMaybeDefault(...args) {\n    const node = super.parseMaybeDefault(...args);\n\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(node.typeAnnotation.start, TSErrors.TypeAnnotationAfterAssign);\n    }\n\n    return node;\n  }\n\n  getTokenFromCode(code) {\n    if (this.state.inType && (code === 62 || code === 60)) {\n      return this.finishOp(types.relational, 1);\n    } else {\n      return super.getTokenFromCode(code);\n    }\n  }\n\n  reScan_lt_gt() {\n    if (this.match(types.relational)) {\n      const code = this.input.charCodeAt(this.state.start);\n\n      if (code === 60 || code === 62) {\n        this.state.pos -= 1;\n        this.readToken_lt_gt(code);\n      }\n    }\n  }\n\n  toAssignableList(exprList) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n      if (!expr) continue;\n\n      switch (expr.type) {\n        case \"TSTypeCastExpression\":\n          exprList[i] = this.typeCastToParameter(expr);\n          break;\n\n        case \"TSAsExpression\":\n        case \"TSTypeAssertion\":\n          if (!this.state.maybeInArrowParameters) {\n            exprList[i] = this.typeCastToParameter(expr);\n          } else {\n            this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);\n          }\n\n          break;\n      }\n    }\n\n    return super.toAssignableList(...arguments);\n  }\n\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n\n  shouldParseArrow() {\n    return this.match(types.colon) || super.shouldParseArrow();\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(types.colon) || super.shouldParseAsyncArrow();\n  }\n\n  canHaveLeadingDecorator() {\n    return super.canHaveLeadingDecorator() || this.isAbstractClass();\n  }\n\n  jsxParseOpeningElementAfterName(node) {\n    if (this.isRelational(\"<\")) {\n      const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArguments());\n      if (typeArguments) node.typeParameters = typeArguments;\n    }\n\n    return super.jsxParseOpeningElementAfterName(node);\n  }\n\n  getGetterSetterExpectedParamCount(method) {\n    const baseCount = super.getGetterSetterExpectedParamCount(method);\n    const firstParam = method.params[0];\n    const hasContextParam = firstParam && firstParam.type === \"Identifier\" && firstParam.name === \"this\";\n    return hasContextParam ? baseCount + 1 : baseCount;\n  }\n\n  parseCatchClauseParam() {\n    const param = super.parseCatchClauseParam();\n    const type = this.tsTryParseTypeAnnotation();\n\n    if (type) {\n      param.typeAnnotation = type;\n      this.resetEndLocation(param);\n    }\n\n    return param;\n  }\n\n  tsInDeclareContext(cb) {\n    const oldIsDeclareContext = this.state.isDeclareContext;\n    this.state.isDeclareContext = true;\n\n    try {\n      return cb();\n    } finally {\n      this.state.isDeclareContext = oldIsDeclareContext;\n    }\n  }\n\n});\n\ntypes.placeholder = new TokenType(\"%%\", {\n  startsExpr: true\n});\nvar placeholders = (superClass => class extends superClass {\n  parsePlaceholder(expectedNode) {\n    if (this.match(types.placeholder)) {\n      const node = this.startNode();\n      this.next();\n      this.assertNoSpace(\"Unexpected space in placeholder.\");\n      node.name = super.parseIdentifier(true);\n      this.assertNoSpace(\"Unexpected space in placeholder.\");\n      this.expect(types.placeholder);\n      return this.finishPlaceholder(node, expectedNode);\n    }\n  }\n\n  finishPlaceholder(node, expectedNode) {\n    const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n    node.expectedNode = expectedNode;\n    return isFinished ? node : this.finishNode(node, \"Placeholder\");\n  }\n\n  getTokenFromCode(code) {\n    if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {\n      return this.finishOp(types.placeholder, 2);\n    }\n\n    return super.getTokenFromCode(...arguments);\n  }\n\n  parseExprAtom() {\n    return this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments);\n  }\n\n  parseIdentifier() {\n    return this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(...arguments);\n  }\n\n  checkReservedWord(word) {\n    if (word !== undefined) super.checkReservedWord(...arguments);\n  }\n\n  parseBindingAtom() {\n    return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments);\n  }\n\n  checkLVal(expr) {\n    if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n  }\n\n  toAssignable(node) {\n    if (node && node.type === \"Placeholder\" && node.expectedNode === \"Expression\") {\n      node.expectedNode = \"Pattern\";\n      return node;\n    }\n\n    return super.toAssignable(...arguments);\n  }\n\n  verifyBreakContinue(node) {\n    if (node.label && node.label.type === \"Placeholder\") return;\n    super.verifyBreakContinue(...arguments);\n  }\n\n  parseExpressionStatement(node, expr) {\n    if (expr.type !== \"Placeholder\" || expr.extra && expr.extra.parenthesized) {\n      return super.parseExpressionStatement(...arguments);\n    }\n\n    if (this.match(types.colon)) {\n      const stmt = node;\n      stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n      this.next();\n      stmt.body = this.parseStatement(\"label\");\n      return this.finishNode(stmt, \"LabeledStatement\");\n    }\n\n    this.semicolon();\n    node.name = expr.name;\n    return this.finishPlaceholder(node, \"Statement\");\n  }\n\n  parseBlock() {\n    return this.parsePlaceholder(\"BlockStatement\") || super.parseBlock(...arguments);\n  }\n\n  parseFunctionId() {\n    return this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(...arguments);\n  }\n\n  parseClass(node, isStatement, optionalId) {\n    const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n    this.next();\n    this.takeDecorators(node);\n    const oldStrict = this.state.strict;\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n\n    if (placeholder) {\n      if (this.match(types._extends) || this.match(types.placeholder) || this.match(types.braceL)) {\n        node.id = placeholder;\n      } else if (optionalId || !isStatement) {\n        node.id = null;\n        node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n        return this.finishNode(node, type);\n      } else {\n        this.unexpected(null, \"A class name is required\");\n      }\n    } else {\n      this.parseClassId(node, isStatement, optionalId);\n    }\n\n    this.parseClassSuper(node);\n    node.body = this.parsePlaceholder(\"ClassBody\") || this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, type);\n  }\n\n  parseExport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseExport(...arguments);\n\n    if (!this.isContextual(\"from\") && !this.match(types.comma)) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    this.expectPlugin(\"exportDefaultFrom\");\n    const specifier = this.startNode();\n    specifier.exported = placeholder;\n    node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n    return super.parseExport(node);\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.match(types._default)) {\n      const next = this.nextTokenStart();\n\n      if (this.isUnparsedContextual(next, \"from\")) {\n        if (this.input.startsWith(types.placeholder.label, this.nextTokenStartSince(next + 4))) {\n          return true;\n        }\n      }\n    }\n\n    return super.isExportDefaultSpecifier();\n  }\n\n  maybeParseExportDefaultSpecifier(node) {\n    if (node.specifiers && node.specifiers.length > 0) {\n      return true;\n    }\n\n    return super.maybeParseExportDefaultSpecifier(...arguments);\n  }\n\n  checkExport(node) {\n    const {\n      specifiers\n    } = node;\n\n    if (specifiers == null ? void 0 : specifiers.length) {\n      node.specifiers = specifiers.filter(node => node.exported.type === \"Placeholder\");\n    }\n\n    super.checkExport(node);\n    node.specifiers = specifiers;\n  }\n\n  parseImport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseImport(...arguments);\n    node.specifiers = [];\n\n    if (!this.isContextual(\"from\") && !this.match(types.comma)) {\n      node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    const specifier = this.startNodeAtNode(placeholder);\n    specifier.local = placeholder;\n    this.finishNode(specifier, \"ImportDefaultSpecifier\");\n    node.specifiers.push(specifier);\n\n    if (this.eat(types.comma)) {\n      const hasStarImport = this.maybeParseStarImportSpecifier(node);\n      if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n    }\n\n    this.expectContextual(\"from\");\n    node.source = this.parseImportSource();\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource() {\n    return this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource(...arguments);\n  }\n\n});\n\nvar v8intrinsic = (superClass => class extends superClass {\n  parseV8Intrinsic() {\n    if (this.match(types.modulo)) {\n      const v8IntrinsicStart = this.state.start;\n      const node = this.startNode();\n      this.eat(types.modulo);\n\n      if (this.match(types.name)) {\n        const name = this.parseIdentifierName(this.state.start);\n        const identifier = this.createIdentifier(node, name);\n        identifier.type = \"V8IntrinsicIdentifier\";\n\n        if (this.match(types.parenL)) {\n          return identifier;\n        }\n      }\n\n      this.unexpected(v8IntrinsicStart);\n    }\n  }\n\n  parseExprAtom() {\n    return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n  }\n\n});\n\nfunction hasPlugin(plugins, name) {\n  return plugins.some(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n}\nfunction getPluginOption(plugins, name, option) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n\n  if (plugin && Array.isArray(plugin)) {\n    return plugin[1][option];\n  }\n\n  return null;\n}\nconst PIPELINE_PROPOSALS = [\"minimal\", \"smart\", \"fsharp\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\nfunction validatePlugins(plugins) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\"Cannot use the decorators and decorators-legacy plugin together\");\n    }\n\n    const decoratorsBeforeExport = getPluginOption(plugins, \"decorators\", \"decoratorsBeforeExport\");\n\n    if (decoratorsBeforeExport == null) {\n      throw new Error(\"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" + \" whose value must be a boolean. If you are migrating from\" + \" Babylon/Babel 6 or want to use the old decorators proposal, you\" + \" should use the 'decorators-legacy' plugin instead of 'decorators'.\");\n    } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"pipelineOperator\") && !PIPELINE_PROPOSALS.includes(getPluginOption(plugins, \"pipelineOperator\", \"proposal\"))) {\n    throw new Error(\"'pipelineOperator' requires 'proposal' option whose value should be one of: \" + PIPELINE_PROPOSALS.map(p => `'${p}'`).join(\", \"));\n  }\n\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    if (hasPlugin(plugins, \"importAssertions\")) {\n      throw new Error(\"Cannot combine importAssertions and moduleAttributes plugins.\");\n    }\n\n    const moduleAttributesVerionPluginOption = getPluginOption(plugins, \"moduleAttributes\", \"version\");\n\n    if (moduleAttributesVerionPluginOption !== \"may-2020\") {\n      throw new Error(\"The 'moduleAttributes' plugin requires a 'version' option,\" + \" representing the last proposal update. Currently, the\" + \" only supported value is 'may-2020'.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"recordAndTuple\") && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"))) {\n    throw new Error(\"'recordAndTuple' requires 'syntaxType' option whose value should be one of: \" + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"));\n  }\n}\nconst mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders\n};\nconst mixinPluginNames = Object.keys(mixinPlugins);\n\nconst defaultOptions = {\n  sourceType: \"script\",\n  sourceFilename: undefined,\n  startLine: 1,\n  allowAwaitOutsideFunction: false,\n  allowReturnOutsideFunction: false,\n  allowImportExportEverywhere: false,\n  allowSuperOutsideMethod: false,\n  allowUndeclaredExports: false,\n  plugins: [],\n  strictMode: null,\n  ranges: false,\n  tokens: false,\n  createParenthesizedExpressions: false,\n  errorRecovery: false\n};\nfunction getOptions(opts) {\n  const options = {};\n\n  for (let _i = 0, _Object$keys = Object.keys(defaultOptions); _i < _Object$keys.length; _i++) {\n    const key = _Object$keys[_i];\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n\n  return options;\n}\n\nclass State {\n  constructor() {\n    this.strict = void 0;\n    this.curLine = void 0;\n    this.startLoc = void 0;\n    this.endLoc = void 0;\n    this.errors = [];\n    this.potentialArrowAt = -1;\n    this.noArrowAt = [];\n    this.noArrowParamsConversionAt = [];\n    this.inParameters = false;\n    this.maybeInArrowParameters = false;\n    this.maybeInAsyncArrowHead = false;\n    this.inPipeline = false;\n    this.inType = false;\n    this.noAnonFunctionType = false;\n    this.inPropertyName = false;\n    this.hasFlowComment = false;\n    this.isIterator = false;\n    this.isDeclareContext = false;\n    this.topicContext = {\n      maxNumOfResolvableTopics: 0,\n      maxTopicIndex: null\n    };\n    this.soloAwait = false;\n    this.inFSharpPipelineDirectBody = false;\n    this.labels = [];\n    this.decoratorStack = [[]];\n    this.yieldPos = -1;\n    this.awaitPos = -1;\n    this.comments = [];\n    this.trailingComments = [];\n    this.leadingComments = [];\n    this.commentStack = [];\n    this.commentPreviousNode = null;\n    this.pos = 0;\n    this.lineStart = 0;\n    this.type = types.eof;\n    this.value = null;\n    this.start = 0;\n    this.end = 0;\n    this.lastTokEndLoc = null;\n    this.lastTokStartLoc = null;\n    this.lastTokStart = 0;\n    this.lastTokEnd = 0;\n    this.context = [types$1.braceStatement];\n    this.exprAllowed = true;\n    this.containsEsc = false;\n    this.octalPositions = [];\n    this.exportedIdentifiers = [];\n    this.tokensLength = 0;\n  }\n\n  init(options) {\n    this.strict = options.strictMode === false ? false : options.sourceType === \"module\";\n    this.curLine = options.startLine;\n    this.startLoc = this.endLoc = this.curPosition();\n  }\n\n  curPosition() {\n    return new Position(this.curLine, this.pos - this.lineStart);\n  }\n\n  clone(skipArrays) {\n    const state = new State();\n    const keys = Object.keys(this);\n\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      let val = this[key];\n\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n\n      state[key] = val;\n    }\n\n    return state;\n  }\n\n}\n\nvar _isDigit = function isDigit(code) {\n  return code >= 48 && code <= 57;\n};\nconst VALID_REGEX_FLAGS = new Set([\"g\", \"m\", \"s\", \"i\", \"y\", \"u\"]);\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: [46, 66, 69, 79, 95, 98, 101, 111],\n  hex: [46, 88, 95, 120]\n};\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [48, 49];\nallowedNumericSeparatorSiblings.oct = [...allowedNumericSeparatorSiblings.bin, 50, 51, 52, 53, 54, 55];\nallowedNumericSeparatorSiblings.dec = [...allowedNumericSeparatorSiblings.oct, 56, 57];\nallowedNumericSeparatorSiblings.hex = [...allowedNumericSeparatorSiblings.dec, 65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102];\nclass Token {\n  constructor(state) {\n    this.type = void 0;\n    this.value = void 0;\n    this.start = void 0;\n    this.end = void 0;\n    this.loc = void 0;\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n}\nclass Tokenizer extends ParserError {\n  constructor(options, input) {\n    super();\n    this.isLookahead = void 0;\n    this.tokens = [];\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n\n  pushToken(token) {\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  next() {\n    if (!this.isLookahead) {\n      this.checkKeywordEscapes();\n\n      if (this.options.tokens) {\n        this.pushToken(new Token(this.state));\n      }\n    }\n\n    this.state.lastTokEnd = this.state.end;\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type) {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  match(type) {\n    return this.state.type === type;\n  }\n\n  lookahead() {\n    const old = this.state;\n    this.state = old.clone(true);\n    this.isLookahead = true;\n    this.next();\n    this.isLookahead = false;\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart() {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos) {\n    skipWhiteSpace.lastIndex = pos;\n    const skip = skipWhiteSpace.exec(this.input);\n    return pos + skip[0].length;\n  }\n\n  lookaheadCharCode() {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  setStrict(strict) {\n    this.state.strict = strict;\n    if (!this.match(types.num) && !this.match(types.string)) return;\n    this.state.pos = this.state.start;\n\n    while (this.state.pos < this.state.lineStart) {\n      this.state.lineStart = this.input.lastIndexOf(\"\\n\", this.state.lineStart - 2) + 1;\n      --this.state.curLine;\n    }\n\n    this.nextToken();\n  }\n\n  curContext() {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  nextToken() {\n    const curContext = this.curContext();\n    if (!(curContext == null ? void 0 : curContext.preserveSpace)) this.skipSpace();\n    this.state.octalPositions = [];\n    this.state.start = this.state.pos;\n    this.state.startLoc = this.state.curPosition();\n\n    if (this.state.pos >= this.length) {\n      this.finishToken(types.eof);\n      return;\n    }\n\n    const override = curContext == null ? void 0 : curContext.override;\n\n    if (override) {\n      override(this);\n    } else {\n      this.getTokenFromCode(this.input.codePointAt(this.state.pos));\n    }\n  }\n\n  pushComment(block, text, start, end, startLoc, endLoc) {\n    const comment = {\n      type: block ? \"CommentBlock\" : \"CommentLine\",\n      value: text,\n      start: start,\n      end: end,\n      loc: new SourceLocation(startLoc, endLoc)\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    this.state.comments.push(comment);\n    this.addComment(comment);\n  }\n\n  skipBlockComment() {\n    const startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(\"*/\", this.state.pos + 2);\n    if (end === -1) throw this.raise(start, ErrorMessages.UnterminatedComment);\n    this.state.pos = end + 2;\n    lineBreakG.lastIndex = start;\n    let match;\n\n    while ((match = lineBreakG.exec(this.input)) && match.index < this.state.pos) {\n      ++this.state.curLine;\n      this.state.lineStart = match.index + match[0].length;\n    }\n\n    if (this.isLookahead) return;\n    this.pushComment(true, this.input.slice(start + 2, end), start, this.state.pos, startLoc, this.state.curPosition());\n  }\n\n  skipLineComment(startSkip) {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt(this.state.pos += startSkip);\n\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    if (this.isLookahead) return;\n    this.pushComment(false, this.input.slice(start + startSkip, this.state.pos), start, this.state.pos, startLoc, this.state.curPosition());\n  }\n\n  skipSpace() {\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      switch (ch) {\n        case 32:\n        case 160:\n        case 9:\n          ++this.state.pos;\n          break;\n\n        case 13:\n          if (this.input.charCodeAt(this.state.pos + 1) === 10) {\n            ++this.state.pos;\n          }\n\n        case 10:\n        case 8232:\n        case 8233:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case 47:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case 42:\n              this.skipBlockComment();\n              break;\n\n            case 47:\n              this.skipLineComment(2);\n              break;\n\n            default:\n              break loop;\n          }\n\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else {\n            break loop;\n          }\n\n      }\n    }\n  }\n\n  finishToken(type, val) {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n    if (!this.isLookahead) this.updateContext(prevType);\n  }\n\n  readToken_numberSign() {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.input.charCodeAt(nextPos);\n\n    if (next >= 48 && next <= 57) {\n      throw this.raise(this.state.pos, ErrorMessages.UnexpectedDigitAfterHash);\n    }\n\n    if (next === 123 || next === 91 && this.hasPlugin(\"recordAndTuple\")) {\n      this.expectPlugin(\"recordAndTuple\");\n\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"hash\") {\n        throw this.raise(this.state.pos, next === 123 ? ErrorMessages.RecordExpressionHashIncorrectStartSyntaxType : ErrorMessages.TupleExpressionHashIncorrectStartSyntaxType);\n      }\n\n      if (next === 123) {\n        this.finishToken(types.braceHashL);\n      } else {\n        this.finishToken(types.bracketHashL);\n      }\n\n      this.state.pos += 2;\n    } else {\n      this.finishOp(types.hash, 1);\n    }\n  }\n\n  readToken_dot() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next >= 48 && next <= 57) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {\n      this.state.pos += 3;\n      this.finishToken(types.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(types.dot);\n    }\n  }\n\n  readToken_slash() {\n    if (this.state.exprAllowed && !this.state.inType) {\n      ++this.state.pos;\n      this.readRegexp();\n      return;\n    }\n\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(types.assign, 2);\n    } else {\n      this.finishOp(types.slash, 1);\n    }\n  }\n\n  readToken_interpreter() {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== 33) return false;\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n    this.finishToken(types.interpreterDirective, value);\n    return true;\n  }\n\n  readToken_mult_modulo(code) {\n    let type = code === 42 ? types.star : types.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n    const exprAllowed = this.state.exprAllowed;\n\n    if (code === 42 && next === 42) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = types.exponent;\n    }\n\n    if (next === 61 && !exprAllowed) {\n      width++;\n      type = types.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === 61) {\n        this.finishOp(types.assign, 3);\n      } else {\n        this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2);\n      }\n\n      return;\n    }\n\n    if (code === 124) {\n      if (next === 62) {\n        this.finishOp(types.pipeline, 2);\n        return;\n      }\n\n      if (this.hasPlugin(\"recordAndTuple\") && next === 125) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectEndSyntaxType);\n        }\n\n        this.finishOp(types.braceBarR, 2);\n        return;\n      }\n\n      if (this.hasPlugin(\"recordAndTuple\") && next === 93) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectEndSyntaxType);\n        }\n\n        this.finishOp(types.bracketBarR, 2);\n        return;\n      }\n    }\n\n    if (next === 61) {\n      this.finishOp(types.assign, 2);\n      return;\n    }\n\n    this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1);\n  }\n\n  readToken_caret() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(types.assign, 2);\n    } else {\n      this.finishOp(types.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_plus_min(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (next === 45 && !this.inModule && this.input.charCodeAt(this.state.pos + 2) === 62 && (this.state.lastTokEnd === 0 || this.hasPrecedingLineBreak())) {\n        this.skipLineComment(3);\n        this.skipSpace();\n        this.nextToken();\n        return;\n      }\n\n      this.finishOp(types.incDec, 2);\n      return;\n    }\n\n    if (next === 61) {\n      this.finishOp(types.assign, 2);\n    } else {\n      this.finishOp(types.plusMin, 1);\n    }\n  }\n\n  readToken_lt_gt(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    let size = 1;\n\n    if (next === code) {\n      size = code === 62 && this.input.charCodeAt(this.state.pos + 2) === 62 ? 3 : 2;\n\n      if (this.input.charCodeAt(this.state.pos + size) === 61) {\n        this.finishOp(types.assign, size + 1);\n        return;\n      }\n\n      this.finishOp(types.bitShift, size);\n      return;\n    }\n\n    if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.state.pos + 2) === 45 && this.input.charCodeAt(this.state.pos + 3) === 45) {\n      this.skipLineComment(4);\n      this.skipSpace();\n      this.nextToken();\n      return;\n    }\n\n    if (next === 61) {\n      size = 2;\n    }\n\n    this.finishOp(types.relational, size);\n  }\n\n  readToken_eq_excl(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(types.equality, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);\n      return;\n    }\n\n    if (code === 61 && next === 62) {\n      this.state.pos += 2;\n      this.finishToken(types.arrow);\n      return;\n    }\n\n    this.finishOp(code === 61 ? types.eq : types.bang, 1);\n  }\n\n  readToken_question() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n\n    if (next === 63) {\n      if (next2 === 61) {\n        this.finishOp(types.assign, 3);\n      } else {\n        this.finishOp(types.nullishCoalescing, 2);\n      }\n    } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {\n      this.state.pos += 2;\n      this.finishToken(types.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(types.question);\n    }\n  }\n\n  getTokenFromCode(code) {\n    switch (code) {\n      case 46:\n        this.readToken_dot();\n        return;\n\n      case 40:\n        ++this.state.pos;\n        this.finishToken(types.parenL);\n        return;\n\n      case 41:\n        ++this.state.pos;\n        this.finishToken(types.parenR);\n        return;\n\n      case 59:\n        ++this.state.pos;\n        this.finishToken(types.semi);\n        return;\n\n      case 44:\n        ++this.state.pos;\n        this.finishToken(types.comma);\n        return;\n\n      case 91:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectStartSyntaxType);\n          }\n\n          this.finishToken(types.bracketBarL);\n          this.state.pos += 2;\n        } else {\n          ++this.state.pos;\n          this.finishToken(types.bracketL);\n        }\n\n        return;\n\n      case 93:\n        ++this.state.pos;\n        this.finishToken(types.bracketR);\n        return;\n\n      case 123:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectStartSyntaxType);\n          }\n\n          this.finishToken(types.braceBarL);\n          this.state.pos += 2;\n        } else {\n          ++this.state.pos;\n          this.finishToken(types.braceL);\n        }\n\n        return;\n\n      case 125:\n        ++this.state.pos;\n        this.finishToken(types.braceR);\n        return;\n\n      case 58:\n        if (this.hasPlugin(\"functionBind\") && this.input.charCodeAt(this.state.pos + 1) === 58) {\n          this.finishOp(types.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(types.colon);\n        }\n\n        return;\n\n      case 63:\n        this.readToken_question();\n        return;\n\n      case 96:\n        ++this.state.pos;\n        this.finishToken(types.backQuote);\n        return;\n\n      case 48:\n        {\n          const next = this.input.charCodeAt(this.state.pos + 1);\n\n          if (next === 120 || next === 88) {\n            this.readRadixNumber(16);\n            return;\n          }\n\n          if (next === 111 || next === 79) {\n            this.readRadixNumber(8);\n            return;\n          }\n\n          if (next === 98 || next === 66) {\n            this.readRadixNumber(2);\n            return;\n          }\n        }\n\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        this.readNumber(false);\n        return;\n\n      case 34:\n      case 39:\n        this.readString(code);\n        return;\n\n      case 47:\n        this.readToken_slash();\n        return;\n\n      case 37:\n      case 42:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case 124:\n      case 38:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case 94:\n        this.readToken_caret();\n        return;\n\n      case 43:\n      case 45:\n        this.readToken_plus_min(code);\n        return;\n\n      case 60:\n      case 62:\n        this.readToken_lt_gt(code);\n        return;\n\n      case 61:\n      case 33:\n        this.readToken_eq_excl(code);\n        return;\n\n      case 126:\n        this.finishOp(types.tilde, 1);\n        return;\n\n      case 64:\n        ++this.state.pos;\n        this.finishToken(types.at);\n        return;\n\n      case 35:\n        this.readToken_numberSign();\n        return;\n\n      case 92:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord();\n          return;\n        }\n\n    }\n\n    throw this.raise(this.state.pos, ErrorMessages.InvalidOrUnexpectedToken, String.fromCodePoint(code));\n  }\n\n  finishOp(type, size) {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp() {\n    const start = this.state.pos;\n    let escaped, inClass;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n      }\n\n      const ch = this.input.charAt(this.state.pos);\n\n      if (lineBreak.test(ch)) {\n        throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n      }\n\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === \"[\") {\n          inClass = true;\n        } else if (ch === \"]\" && inClass) {\n          inClass = false;\n        } else if (ch === \"/\" && !inClass) {\n          break;\n        }\n\n        escaped = ch === \"\\\\\";\n      }\n\n      ++this.state.pos;\n    }\n\n    const content = this.input.slice(start, this.state.pos);\n    ++this.state.pos;\n    let mods = \"\";\n\n    while (this.state.pos < this.length) {\n      const char = this.input[this.state.pos];\n      const charCode = this.input.codePointAt(this.state.pos);\n\n      if (VALID_REGEX_FLAGS.has(char)) {\n        if (mods.indexOf(char) > -1) {\n          this.raise(this.state.pos + 1, ErrorMessages.DuplicateRegExpFlags);\n        }\n      } else if (isIdentifierChar(charCode) || charCode === 92) {\n        this.raise(this.state.pos + 1, ErrorMessages.MalformedRegExpFlags);\n      } else {\n        break;\n      }\n\n      ++this.state.pos;\n      mods += char;\n    }\n\n    this.finishToken(types.regexp, {\n      pattern: content,\n      flags: mods\n    });\n  }\n\n  readInt(radix, len, forceLen, allowNumSeparator = true) {\n    const start = this.state.pos;\n    const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;\n    const allowedSiblings = radix === 16 ? allowedNumericSeparatorSiblings.hex : radix === 10 ? allowedNumericSeparatorSiblings.dec : radix === 8 ? allowedNumericSeparatorSiblings.oct : allowedNumericSeparatorSiblings.bin;\n    let invalid = false;\n    let total = 0;\n\n    for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n      const code = this.input.charCodeAt(this.state.pos);\n      let val;\n\n      if (code === 95) {\n        const prev = this.input.charCodeAt(this.state.pos - 1);\n        const next = this.input.charCodeAt(this.state.pos + 1);\n\n        if (allowedSiblings.indexOf(next) === -1) {\n          this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n        } else if (forbiddenSiblings.indexOf(prev) > -1 || forbiddenSiblings.indexOf(next) > -1 || Number.isNaN(next)) {\n          this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n        }\n\n        if (!allowNumSeparator) {\n          this.raise(this.state.pos, ErrorMessages.NumericSeparatorInEscapeSequence);\n        }\n\n        ++this.state.pos;\n        continue;\n      }\n\n      if (code >= 97) {\n        val = code - 97 + 10;\n      } else if (code >= 65) {\n        val = code - 65 + 10;\n      } else if (_isDigit(code)) {\n        val = code - 48;\n      } else {\n        val = Infinity;\n      }\n\n      if (val >= radix) {\n        if (this.options.errorRecovery && val <= 9) {\n          val = 0;\n          this.raise(this.state.start + i + 2, ErrorMessages.InvalidDigit, radix);\n        } else if (forceLen) {\n          val = 0;\n          invalid = true;\n        } else {\n          break;\n        }\n      }\n\n      ++this.state.pos;\n      total = total * radix + val;\n    }\n\n    if (this.state.pos === start || len != null && this.state.pos - start !== len || invalid) {\n      return null;\n    }\n\n    return total;\n  }\n\n  readRadixNumber(radix) {\n    const start = this.state.pos;\n    let isBigInt = false;\n    this.state.pos += 2;\n    const val = this.readInt(radix);\n\n    if (val == null) {\n      this.raise(this.state.start + 2, ErrorMessages.InvalidDigit, radix);\n    }\n\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === 110) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === 109) {\n      throw this.raise(start, ErrorMessages.InvalidDecimal);\n    }\n\n    if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {\n      throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(types.bigint, str);\n      return;\n    }\n\n    this.finishToken(types.num, val);\n  }\n\n  readNumber(startsWithDot) {\n    const start = this.state.pos;\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(start, ErrorMessages.InvalidNumber);\n    }\n\n    const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n\n      if (this.state.strict) {\n        this.raise(start, ErrorMessages.StrictOctalLiteral);\n      } else {\n        const underscorePos = integer.indexOf(\"_\");\n\n        if (underscorePos > 0) {\n          this.raise(underscorePos + start, ErrorMessages.ZeroDigitNumericSeparator);\n        }\n      }\n\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n\n    if (next === 46 && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if ((next === 69 || next === 101) && !isOctal) {\n      next = this.input.charCodeAt(++this.state.pos);\n\n      if (next === 43 || next === 45) {\n        ++this.state.pos;\n      }\n\n      if (this.readInt(10) === null) {\n        this.raise(start, ErrorMessages.InvalidOrMissingExponent);\n      }\n\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === 110) {\n      if (isFloat || hasLeadingZero) {\n        this.raise(start, ErrorMessages.InvalidBigIntLiteral);\n      }\n\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === 109) {\n      this.expectPlugin(\"decimal\", this.state.pos);\n\n      if (hasExponent || hasLeadingZero) {\n        this.raise(start, ErrorMessages.InvalidDecimal);\n      }\n\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {\n      throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n    }\n\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(types.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(types.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(types.num, val);\n  }\n\n  readCodePoint(throwOnInvalid) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let code;\n\n    if (ch === 123) {\n      const codePos = ++this.state.pos;\n      code = this.readHexChar(this.input.indexOf(\"}\", this.state.pos) - this.state.pos, true, throwOnInvalid);\n      ++this.state.pos;\n\n      if (code !== null && code > 0x10ffff) {\n        if (throwOnInvalid) {\n          this.raise(codePos, ErrorMessages.InvalidCodePoint);\n        } else {\n          return null;\n        }\n      }\n    } else {\n      code = this.readHexChar(4, false, throwOnInvalid);\n    }\n\n    return code;\n  }\n\n  readString(quote) {\n    let out = \"\",\n        chunkStart = ++this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n\n      if (ch === 92) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.readEscapedChar(false);\n        chunkStart = this.state.pos;\n      } else if (ch === 8232 || ch === 8233) {\n        ++this.state.pos;\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      } else {\n        ++this.state.pos;\n      }\n    }\n\n    out += this.input.slice(chunkStart, this.state.pos++);\n    this.finishToken(types.string, out);\n  }\n\n  readTmplToken() {\n    let out = \"\",\n        chunkStart = this.state.pos,\n        containsInvalid = false;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedTemplate);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      if (ch === 96 || ch === 36 && this.input.charCodeAt(this.state.pos + 1) === 123) {\n        if (this.state.pos === this.state.start && this.match(types.template)) {\n          if (ch === 36) {\n            this.state.pos += 2;\n            this.finishToken(types.dollarBraceL);\n            return;\n          } else {\n            ++this.state.pos;\n            this.finishToken(types.backQuote);\n            return;\n          }\n        }\n\n        out += this.input.slice(chunkStart, this.state.pos);\n        this.finishToken(types.template, containsInvalid ? null : out);\n        return;\n      }\n\n      if (ch === 92) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        const escaped = this.readEscapedChar(true);\n\n        if (escaped === null) {\n          containsInvalid = true;\n        } else {\n          out += escaped;\n        }\n\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        ++this.state.pos;\n\n        switch (ch) {\n          case 13:\n            if (this.input.charCodeAt(this.state.pos) === 10) {\n              ++this.state.pos;\n            }\n\n          case 10:\n            out += \"\\n\";\n            break;\n\n          default:\n            out += String.fromCharCode(ch);\n            break;\n        }\n\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n  }\n\n  readEscapedChar(inTemplate) {\n    const throwOnInvalid = !inTemplate;\n    const ch = this.input.charCodeAt(++this.state.pos);\n    ++this.state.pos;\n\n    switch (ch) {\n      case 110:\n        return \"\\n\";\n\n      case 114:\n        return \"\\r\";\n\n      case 120:\n        {\n          const code = this.readHexChar(2, false, throwOnInvalid);\n          return code === null ? null : String.fromCharCode(code);\n        }\n\n      case 117:\n        {\n          const code = this.readCodePoint(throwOnInvalid);\n          return code === null ? null : String.fromCodePoint(code);\n        }\n\n      case 116:\n        return \"\\t\";\n\n      case 98:\n        return \"\\b\";\n\n      case 118:\n        return \"\\u000b\";\n\n      case 102:\n        return \"\\f\";\n\n      case 13:\n        if (this.input.charCodeAt(this.state.pos) === 10) {\n          ++this.state.pos;\n        }\n\n      case 10:\n        this.state.lineStart = this.state.pos;\n        ++this.state.curLine;\n\n      case 8232:\n      case 8233:\n        return \"\";\n\n      case 56:\n      case 57:\n        if (inTemplate) {\n          return null;\n        } else if (this.state.strict) {\n          this.raise(this.state.pos - 1, ErrorMessages.StrictNumericEscape);\n        }\n\n      default:\n        if (ch >= 48 && ch <= 55) {\n          const codePos = this.state.pos - 1;\n          const match = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/);\n          let octalStr = match[0];\n          let octal = parseInt(octalStr, 8);\n\n          if (octal > 255) {\n            octalStr = octalStr.slice(0, -1);\n            octal = parseInt(octalStr, 8);\n          }\n\n          this.state.pos += octalStr.length - 1;\n          const next = this.input.charCodeAt(this.state.pos);\n\n          if (octalStr !== \"0\" || next === 56 || next === 57) {\n            if (inTemplate) {\n              return null;\n            } else if (this.state.strict) {\n              this.raise(codePos, ErrorMessages.StrictNumericEscape);\n            } else {\n              this.state.octalPositions.push(codePos);\n            }\n          }\n\n          return String.fromCharCode(octal);\n        }\n\n        return String.fromCharCode(ch);\n    }\n  }\n\n  readHexChar(len, forceLen, throwOnInvalid) {\n    const codePos = this.state.pos;\n    const n = this.readInt(16, len, forceLen, false);\n\n    if (n === null) {\n      if (throwOnInvalid) {\n        this.raise(codePos, ErrorMessages.InvalidEscapeSequence);\n      } else {\n        this.state.pos = codePos - 1;\n      }\n    }\n\n    return n;\n  }\n\n  readWord1() {\n    let word = \"\";\n    this.state.containsEsc = false;\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n\n    while (this.state.pos < this.length) {\n      const ch = this.input.codePointAt(this.state.pos);\n\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (this.state.isIterator && ch === 64) {\n        ++this.state.pos;\n      } else if (ch === 92) {\n        this.state.containsEsc = true;\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.pos;\n        const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== 117) {\n          this.raise(this.state.pos, ErrorMessages.MissingUnicodeEscape);\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(escStart, ErrorMessages.EscapedCharNotAnIdentifier);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  isIterator(word) {\n    return word === \"@@iterator\" || word === \"@@asyncIterator\";\n  }\n\n  readWord() {\n    const word = this.readWord1();\n    const type = keywords.get(word) || types.name;\n\n    if (this.state.isIterator && (!this.isIterator(word) || !this.state.inType)) {\n      this.raise(this.state.pos, ErrorMessages.InvalidIdentifier, word);\n    }\n\n    this.finishToken(type, word);\n  }\n\n  checkKeywordEscapes() {\n    const kw = this.state.type.keyword;\n\n    if (kw && this.state.containsEsc) {\n      this.raise(this.state.start, ErrorMessages.InvalidEscapedReservedWord, kw);\n    }\n  }\n\n  braceIsBlock(prevType) {\n    const parent = this.curContext();\n\n    if (parent === types$1.functionExpression || parent === types$1.functionStatement) {\n      return true;\n    }\n\n    if (prevType === types.colon && (parent === types$1.braceStatement || parent === types$1.braceExpression)) {\n      return !parent.isExpr;\n    }\n\n    if (prevType === types._return || prevType === types.name && this.state.exprAllowed) {\n      return this.hasPrecedingLineBreak();\n    }\n\n    if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow) {\n      return true;\n    }\n\n    if (prevType === types.braceL) {\n      return parent === types$1.braceStatement;\n    }\n\n    if (prevType === types._var || prevType === types._const || prevType === types.name) {\n      return false;\n    }\n\n    if (prevType === types.relational) {\n      return true;\n    }\n\n    return !this.state.exprAllowed;\n  }\n\n  updateContext(prevType) {\n    const type = this.state.type;\n    let update;\n\n    if (type.keyword && (prevType === types.dot || prevType === types.questionDot)) {\n      this.state.exprAllowed = false;\n    } else if (update = type.updateContext) {\n      update.call(this, prevType);\n    } else {\n      this.state.exprAllowed = type.beforeExpr;\n    }\n  }\n\n}\n\nclass UtilParser extends Tokenizer {\n  addExtra(node, key, val) {\n    if (!node) return;\n    const extra = node.extra = node.extra || {};\n    extra[key] = val;\n  }\n\n  isRelational(op) {\n    return this.match(types.relational) && this.state.value === op;\n  }\n\n  expectRelational(op) {\n    if (this.isRelational(op)) {\n      this.next();\n    } else {\n      this.unexpected(null, types.relational);\n    }\n  }\n\n  isContextual(name) {\n    return this.match(types.name) && this.state.value === name && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart, name) {\n    const nameEnd = nameStart + name.length;\n    return this.input.slice(nameStart, nameEnd) === name && (nameEnd === this.input.length || !isIdentifierChar(this.input.charCodeAt(nameEnd)));\n  }\n\n  isLookaheadContextual(name) {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  eatContextual(name) {\n    return this.isContextual(name) && this.eat(types.name);\n  }\n\n  expectContextual(name, message) {\n    if (!this.eatContextual(name)) this.unexpected(null, message);\n  }\n\n  canInsertSemicolon() {\n    return this.match(types.eof) || this.match(types.braceR) || this.hasPrecedingLineBreak();\n  }\n\n  hasPrecedingLineBreak() {\n    return lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start));\n  }\n\n  isLineTerminator() {\n    return this.eat(types.semi) || this.canInsertSemicolon();\n  }\n\n  semicolon() {\n    if (!this.isLineTerminator()) this.unexpected(null, types.semi);\n  }\n\n  expect(type, pos) {\n    this.eat(type) || this.unexpected(pos, type);\n  }\n\n  assertNoSpace(message = \"Unexpected space.\") {\n    if (this.state.start > this.state.lastTokEnd) {\n      this.raise(this.state.lastTokEnd, message);\n    }\n  }\n\n  unexpected(pos, messageOrType = \"Unexpected token\") {\n    if (typeof messageOrType !== \"string\") {\n      messageOrType = `Unexpected token, expected \"${messageOrType.label}\"`;\n    }\n\n    throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n  }\n\n  expectPlugin(name, pos) {\n    if (!this.hasPlugin(name)) {\n      throw this.raiseWithData(pos != null ? pos : this.state.start, {\n        missingPlugin: [name]\n      }, `This experimental syntax requires enabling the parser plugin: '${name}'`);\n    }\n\n    return true;\n  }\n\n  expectOnePlugin(names, pos) {\n    if (!names.some(n => this.hasPlugin(n))) {\n      throw this.raiseWithData(pos != null ? pos : this.state.start, {\n        missingPlugin: names\n      }, `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\", \")}'`);\n    }\n  }\n\n  checkYieldAwaitInDefaultParams() {\n    if (this.state.yieldPos !== -1 && (this.state.awaitPos === -1 || this.state.yieldPos < this.state.awaitPos)) {\n      this.raise(this.state.yieldPos, ErrorMessages.YieldBindingIdentifier);\n    }\n\n    if (this.state.awaitPos !== -1) {\n      this.raise(this.state.awaitPos, ErrorMessages.AwaitBindingIdentifier);\n    }\n  }\n\n  tryParse(fn, oldState = this.state.clone()) {\n    const abortSignal = {\n      node: null\n    };\n\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n\n      if (error instanceof SyntaxError) {\n        return {\n          node: null,\n          error,\n          thrown: true,\n          aborted: false,\n          failState\n        };\n      }\n\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(refExpressionErrors, andThrow) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssign,\n      doubleProto\n    } = refExpressionErrors;\n    if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0;\n\n    if (shorthandAssign >= 0) {\n      this.unexpected(shorthandAssign);\n    }\n\n    if (doubleProto >= 0) {\n      this.raise(doubleProto, ErrorMessages.DuplicateProto);\n    }\n  }\n\n  isLiteralPropertyName() {\n    return this.match(types.name) || !!this.state.type.keyword || this.match(types.string) || this.match(types.num) || this.match(types.bigint) || this.match(types.decimal);\n  }\n\n}\nclass ExpressionErrors {\n  constructor() {\n    this.shorthandAssign = -1;\n    this.doubleProto = -1;\n  }\n\n}\n\nclass Node {\n  constructor(parser, pos, loc) {\n    this.type = void 0;\n    this.start = void 0;\n    this.end = void 0;\n    this.loc = void 0;\n    this.range = void 0;\n    this.leadingComments = void 0;\n    this.trailingComments = void 0;\n    this.innerComments = void 0;\n    this.extra = void 0;\n    this.type = \"\";\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser == null ? void 0 : parser.options.ranges) this.range = [pos, 0];\n    if (parser == null ? void 0 : parser.filename) this.loc.filename = parser.filename;\n  }\n\n  __clone() {\n    const newNode = new Node();\n    const keys = Object.keys(this);\n\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n\n      if (key !== \"leadingComments\" && key !== \"trailingComments\" && key !== \"innerComments\") {\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  }\n\n}\n\nclass NodeUtils extends UtilParser {\n  startNode() {\n    return new Node(this, this.state.start, this.state.startLoc);\n  }\n\n  startNodeAt(pos, loc) {\n    return new Node(this, pos, loc);\n  }\n\n  startNodeAtNode(type) {\n    return this.startNodeAt(type.start, type.loc.start);\n  }\n\n  finishNode(node, type) {\n    return this.finishNodeAt(node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);\n  }\n\n  finishNodeAt(node, type, pos, loc) {\n\n    node.type = type;\n    node.end = pos;\n    node.loc.end = loc;\n    if (this.options.ranges) node.range[1] = pos;\n    this.processComment(node);\n    return node;\n  }\n\n  resetStartLocation(node, start, startLoc) {\n    node.start = start;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = start;\n  }\n\n  resetEndLocation(node, end = this.state.lastTokEnd, endLoc = this.state.lastTokEndLoc) {\n    node.end = end;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = end;\n  }\n\n  resetStartLocationFromNode(node, locationNode) {\n    this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n  }\n\n}\n\nconst unwrapParenthesizedExpression = node => {\n  return node.type === \"ParenthesizedExpression\" ? unwrapParenthesizedExpression(node.expression) : node;\n};\n\nclass LValParser extends NodeUtils {\n  toAssignable(node) {\n    var _node$extra, _node$extra3;\n\n    let parenthesized = undefined;\n\n    if (node.type === \"ParenthesizedExpression\" || ((_node$extra = node.extra) == null ? void 0 : _node$extra.parenthesized)) {\n      parenthesized = unwrapParenthesizedExpression(node);\n\n      if (parenthesized.type !== \"Identifier\" && parenthesized.type !== \"MemberExpression\") {\n        this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n\n        for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {\n          var _node$extra2;\n\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast);\n\n          if (isLast && prop.type === \"RestElement\" && ((_node$extra2 = node.extra) == null ? void 0 : _node$extra2.trailingComma)) {\n            this.raiseRestNotLast(node.extra.trailingComma);\n          }\n        }\n\n        break;\n\n      case \"ObjectProperty\":\n        this.toAssignable(node.value);\n        break;\n\n      case \"SpreadElement\":\n        {\n          this.checkToRestConversion(node);\n          node.type = \"RestElement\";\n          const arg = node.argument;\n          this.toAssignable(arg);\n          break;\n        }\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingComma);\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(node.left.end, ErrorMessages.MissingEqInAssignment);\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left);\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.toAssignable(parenthesized);\n        break;\n    }\n\n    return node;\n  }\n\n  toAssignableObjectExpressionProp(prop, isLast) {\n    if (prop.type === \"ObjectMethod\") {\n      const error = prop.kind === \"get\" || prop.kind === \"set\" ? ErrorMessages.PatternHasAccessor : ErrorMessages.PatternHasMethod;\n      this.raise(prop.key.start, error);\n    } else if (prop.type === \"SpreadElement\" && !isLast) {\n      this.raiseRestNotLast(prop.start);\n    } else {\n      this.toAssignable(prop);\n    }\n  }\n\n  toAssignableList(exprList, trailingCommaPos) {\n    let end = exprList.length;\n\n    if (end) {\n      const last = exprList[end - 1];\n\n      if ((last == null ? void 0 : last.type) === \"RestElement\") {\n        --end;\n      } else if ((last == null ? void 0 : last.type) === \"SpreadElement\") {\n        last.type = \"RestElement\";\n        const arg = last.argument;\n        this.toAssignable(arg);\n\n        if (arg.type !== \"Identifier\" && arg.type !== \"MemberExpression\" && arg.type !== \"ArrayPattern\" && arg.type !== \"ObjectPattern\") {\n          this.unexpected(arg.start);\n        }\n\n        if (trailingCommaPos) {\n          this.raiseTrailingCommaAfterRest(trailingCommaPos);\n        }\n\n        --end;\n      }\n    }\n\n    for (let i = 0; i < end; i++) {\n      const elt = exprList[i];\n\n      if (elt) {\n        this.toAssignable(elt);\n\n        if (elt.type === \"RestElement\") {\n          this.raiseRestNotLast(elt.start);\n        }\n      }\n    }\n\n    return exprList;\n  }\n\n  toReferencedList(exprList, isParenthesizedExpr) {\n    return exprList;\n  }\n\n  toReferencedListDeep(exprList, isParenthesizedExpr) {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (let _i = 0; _i < exprList.length; _i++) {\n      const expr = exprList[_i];\n\n      if ((expr == null ? void 0 : expr.type) === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  parseSpread(refExpressionErrors, refNeedsArrowPos) {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined, refNeedsArrowPos);\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  parseRestBinding() {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case types.bracketL:\n        {\n          const node = this.startNode();\n          this.next();\n          node.elements = this.parseBindingList(types.bracketR, 93, true);\n          return this.finishNode(node, \"ArrayPattern\");\n        }\n\n      case types.braceL:\n        return this.parseObjectLike(types.braceR, true);\n    }\n\n    return this.parseIdentifier();\n  }\n\n  parseBindingList(close, closeCharCode, allowEmpty, allowModifiers) {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types.comma);\n      }\n\n      if (allowEmpty && this.match(types.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(types.ellipsis)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n        this.checkCommaAfterRest(closeCharCode);\n        this.expect(close);\n        break;\n      } else {\n        const decorators = [];\n\n        if (this.match(types.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(this.state.start, ErrorMessages.UnsupportedParameterDecorator);\n        }\n\n        while (this.match(types.at)) {\n          decorators.push(this.parseDecorator());\n        }\n\n        elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n      }\n    }\n\n    return elts;\n  }\n\n  parseAssignableListItem(allowModifiers, decorators) {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n\n    return elt;\n  }\n\n  parseAssignableListItemTypes(param) {\n    return param;\n  }\n\n  parseMaybeDefault(startPos, startLoc, left) {\n    var _startLoc, _startPos, _left;\n\n    startLoc = (_startLoc = startLoc) != null ? _startLoc : this.state.startLoc;\n    startPos = (_startPos = startPos) != null ? _startPos : this.state.start;\n    left = (_left = left) != null ? _left : this.parseBindingAtom();\n    if (!this.eat(types.eq)) return left;\n    const node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n\n  checkLVal(expr, bindingType = BIND_NONE, checkClashes, contextDescription, disallowLetBinding, strictModeChanged = false) {\n    switch (expr.type) {\n      case \"Identifier\":\n        if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(expr.name, this.inModule) : isStrictBindOnlyReservedWord(expr.name))) {\n          this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.StrictEvalArguments : ErrorMessages.StrictEvalArgumentsBinding, expr.name);\n        }\n\n        if (checkClashes) {\n          const key = `_${expr.name}`;\n\n          if (checkClashes[key]) {\n            this.raise(expr.start, ErrorMessages.ParamDupe);\n          } else {\n            checkClashes[key] = true;\n          }\n        }\n\n        if (disallowLetBinding && expr.name === \"let\") {\n          this.raise(expr.start, ErrorMessages.LetInLexicalBinding);\n        }\n\n        if (!(bindingType & BIND_NONE)) {\n          this.scope.declareName(expr.name, bindingType, expr.start);\n        }\n\n        break;\n\n      case \"MemberExpression\":\n        if (bindingType !== BIND_NONE) {\n          this.raise(expr.start, ErrorMessages.InvalidPropertyBindingPattern);\n        }\n\n        break;\n\n      case \"ObjectPattern\":\n        for (let _i2 = 0, _expr$properties = expr.properties; _i2 < _expr$properties.length; _i2++) {\n          let prop = _expr$properties[_i2];\n          if (prop.type === \"ObjectProperty\") prop = prop.value;else if (prop.type === \"ObjectMethod\") continue;\n          this.checkLVal(prop, bindingType, checkClashes, \"object destructuring pattern\", disallowLetBinding);\n        }\n\n        break;\n\n      case \"ArrayPattern\":\n        for (let _i3 = 0, _expr$elements = expr.elements; _i3 < _expr$elements.length; _i3++) {\n          const elem = _expr$elements[_i3];\n\n          if (elem) {\n            this.checkLVal(elem, bindingType, checkClashes, \"array destructuring pattern\", disallowLetBinding);\n          }\n        }\n\n        break;\n\n      case \"AssignmentPattern\":\n        this.checkLVal(expr.left, bindingType, checkClashes, \"assignment pattern\");\n        break;\n\n      case \"RestElement\":\n        this.checkLVal(expr.argument, bindingType, checkClashes, \"rest element\");\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.checkLVal(expr.expression, bindingType, checkClashes, \"parenthesized expression\");\n        break;\n\n      default:\n        {\n          this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.InvalidLhs : ErrorMessages.InvalidLhsBinding, contextDescription);\n        }\n    }\n  }\n\n  checkToRestConversion(node) {\n    if (node.argument.type !== \"Identifier\" && node.argument.type !== \"MemberExpression\") {\n      this.raise(node.argument.start, ErrorMessages.InvalidRestAssignmentPattern);\n    }\n  }\n\n  checkCommaAfterRest(close) {\n    if (this.match(types.comma)) {\n      if (this.lookaheadCharCode() === close) {\n        this.raiseTrailingCommaAfterRest(this.state.start);\n      } else {\n        this.raiseRestNotLast(this.state.start);\n      }\n    }\n  }\n\n  raiseRestNotLast(pos) {\n    throw this.raise(pos, ErrorMessages.ElementAfterRest);\n  }\n\n  raiseTrailingCommaAfterRest(pos) {\n    this.raise(pos, ErrorMessages.RestTrailingComma);\n  }\n\n}\n\nclass ExpressionParser extends LValParser {\n  checkProto(prop, isRecord, protoRef, refExpressionErrors) {\n    if (prop.type === \"SpreadElement\" || prop.type === \"ObjectMethod\" || prop.computed || prop.shorthand) {\n      return;\n    }\n\n    const key = prop.key;\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(key.start, ErrorMessages.RecordNoProto);\n        return;\n      }\n\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          if (refExpressionErrors.doubleProto === -1) {\n            refExpressionErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raise(key.start, ErrorMessages.DuplicateProto);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(expr, potentialArrowAt) {\n    return expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt;\n  }\n\n  getExpression() {\n    let paramFlags = PARAM;\n\n    if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n    this.nextToken();\n    const expr = this.parseExpression();\n\n    if (!this.match(types.eof)) {\n      this.unexpected();\n    }\n\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n    return expr;\n  }\n\n  parseExpression(disallowIn, refExpressionErrors) {\n    if (disallowIn) {\n      return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n    }\n\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  parseExpressionBase(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n\n    if (this.match(types.comma)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.expressions = [expr];\n\n      while (this.eat(types.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n\n    return expr;\n  }\n\n  parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse, refNeedsArrowPos) {\n    return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos));\n  }\n\n  parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse, refNeedsArrowPos) {\n    return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos));\n  }\n\n  parseMaybeAssign(refExpressionErrors, afterLeftParse, refNeedsArrowPos) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    if (this.isContextual(\"yield\")) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startPos, startLoc);\n        }\n\n        return left;\n      } else {\n        this.state.exprAllowed = false;\n      }\n    }\n\n    let ownExpressionErrors;\n\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n\n    if (this.match(types.parenL) || this.match(types.name)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors, refNeedsArrowPos);\n\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startPos, startLoc);\n    }\n\n    if (this.state.type.isAssign) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(types.eq)) {\n        node.left = this.toAssignable(left);\n        refExpressionErrors.doubleProto = -1;\n      } else {\n        node.left = left;\n      }\n\n      if (refExpressionErrors.shorthandAssign >= node.left.start) {\n        refExpressionErrors.shorthandAssign = -1;\n      }\n\n      this.checkLVal(left, undefined, undefined, \"assignment expression\");\n      this.next();\n      node.right = this.parseMaybeAssign();\n      return this.finishNode(node, \"AssignmentExpression\");\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  parseMaybeConditional(refExpressionErrors, refNeedsArrowPos) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startPos, startLoc, refNeedsArrowPos);\n  }\n\n  parseConditional(expr, startPos, startLoc, refNeedsArrowPos) {\n    if (this.eat(types.question)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(types.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    return expr;\n  }\n\n  parseExprOps(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnary(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startPos, startLoc, -1);\n  }\n\n  parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n    let prec = this.state.type.binop;\n\n    if (prec != null && (this.prodParam.hasIn || !this.match(types._in))) {\n      if (prec > minPrec) {\n        const op = this.state.type;\n\n        if (op === types.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n\n          this.state.inPipeline = true;\n          this.checkPipelineAtInfixOperator(left, leftStartPos);\n        }\n\n        const node = this.startNodeAt(leftStartPos, leftStartLoc);\n        node.left = left;\n        node.operator = this.state.value;\n\n        if (op === types.exponent && left.type === \"UnaryExpression\" && (this.options.createParenthesizedExpressions || !(left.extra && left.extra.parenthesized))) {\n          this.raise(left.argument.start, ErrorMessages.UnexpectedTokenUnaryExponentiation);\n        }\n\n        const logical = op === types.logicalOR || op === types.logicalAND;\n        const coalesce = op === types.nullishCoalescing;\n\n        if (coalesce) {\n          prec = types.logicalAND.binop;\n        }\n\n        this.next();\n\n        if (op === types.pipeline && this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\") {\n          if (this.match(types.name) && this.state.value === \"await\" && this.prodParam.hasAwait) {\n            throw this.raise(this.state.start, ErrorMessages.UnexpectedAwaitAfterPipelineBody);\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        this.finishNode(node, logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\");\n        const nextOp = this.state.type;\n\n        if (coalesce && (nextOp === types.logicalOR || nextOp === types.logicalAND) || logical && nextOp === types.nullishCoalescing) {\n          throw this.raise(this.state.start, ErrorMessages.MixingCoalesceWithLogical);\n        }\n\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n    }\n\n    return left;\n  }\n\n  parseExprOpRightExpr(op, prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    switch (op) {\n      case types.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"smart\":\n            return this.withTopicPermittingContext(() => {\n              return this.parseSmartPipelineBody(this.parseExprOpBaseRightExpr(op, prec), startPos, startLoc);\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  parseExprOpBaseRightExpr(op, prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, op.rightAssociative ? prec - 1 : prec);\n  }\n\n  parseMaybeUnary(refExpressionErrors) {\n    if (this.isContextual(\"await\") && this.isAwaitAllowed()) {\n      return this.parseAwait();\n    }\n\n    const update = this.match(types.incDec);\n    const node = this.startNode();\n\n    if (this.state.type.prefix) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(types._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n\n      const isDelete = this.match(types._delete);\n      this.next();\n      node.argument = this.parseMaybeUnary();\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(node.start, ErrorMessages.StrictDelete);\n        } else if ((arg.type === \"MemberExpression\" || arg.type === \"OptionalMemberExpression\") && arg.property.type === \"PrivateName\") {\n          this.raise(node.start, ErrorMessages.DeletePrivateField);\n        }\n      }\n\n      if (!update) {\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    return this.parseUpdate(node, update, refExpressionErrors);\n  }\n\n  parseUpdate(node, update, refExpressionErrors) {\n    if (update) {\n      this.checkLVal(node.argument, undefined, undefined, \"prefix operation\");\n      return this.finishNode(node, \"UpdateExpression\");\n    }\n\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n\n    while (this.state.type.postfix && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.checkLVal(expr, undefined, undefined, \"postfix operation\");\n      this.next();\n      expr = this.finishNode(node, \"UpdateExpression\");\n    }\n\n    return expr;\n  }\n\n  parseExprSubscripts(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startPos, startLoc);\n  }\n\n  parseSubscripts(base, startPos, startLoc, noCalls) {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false\n    };\n\n    do {\n      const oldMaybeInAsyncArrowHead = this.state.maybeInAsyncArrowHead;\n\n      if (state.maybeAsyncArrow) {\n        this.state.maybeInAsyncArrowHead = true;\n      }\n\n      base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n      state.maybeAsyncArrow = false;\n      this.state.maybeInAsyncArrowHead = oldMaybeInAsyncArrowHead;\n    } while (!state.stop);\n\n    return base;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    if (!noCalls && this.eat(types.doubleColon)) {\n      return this.parseBind(base, startPos, startLoc, noCalls, state);\n    } else if (this.match(types.backQuote)) {\n      return this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (this.match(types.questionDot)) {\n      state.optionalChainMember = optional = true;\n\n      if (noCalls && this.lookaheadCharCode() === 40) {\n        state.stop = true;\n        return base;\n      }\n\n      this.next();\n    }\n\n    if (!noCalls && this.match(types.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional);\n    } else if (optional || this.match(types.bracketL) || this.eat(types.dot)) {\n      return this.parseMember(base, startPos, startLoc, state, optional);\n    } else {\n      state.stop = true;\n      return base;\n    }\n  }\n\n  parseMember(base, startPos, startLoc, state, optional) {\n    const node = this.startNodeAt(startPos, startLoc);\n    const computed = this.eat(types.bracketL);\n    node.object = base;\n    node.computed = computed;\n    const property = computed ? this.parseExpression() : this.parseMaybePrivateName(true);\n\n    if (property.type === \"PrivateName\") {\n      if (node.object.type === \"Super\") {\n        this.raise(startPos, ErrorMessages.SuperPrivateField);\n      }\n\n      this.classScope.usePrivateName(property.id.name, property.start);\n    }\n\n    node.property = property;\n\n    if (computed) {\n      this.expect(types.bracketR);\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  parseBind(base, startPos, startLoc, noCalls, state) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(this.finishNode(node, \"BindExpression\"), startPos, startLoc, noCalls);\n  }\n\n  parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional) {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.next();\n    let node = this.startNodeAt(startPos, startLoc);\n    node.callee = base;\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(types.parenR, false);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(types.parenR, state.maybeAsyncArrow, base.type === \"Import\", base.type !== \"Super\", node);\n    }\n\n    this.finishCallExpression(node, state.optionalChainMember);\n\n    if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      state.stop = true;\n      node = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node);\n      this.checkYieldAwaitInDefaultParams();\n      this.state.yieldPos = oldYieldPos;\n      this.state.awaitPos = oldAwaitPos;\n    } else {\n      this.toReferencedListDeep(node.arguments);\n      if (oldYieldPos !== -1) this.state.yieldPos = oldYieldPos;\n\n      if (!this.isAwaitAllowed() && !oldMaybeInArrowParameters || oldAwaitPos !== -1) {\n        this.state.awaitPos = oldAwaitPos;\n      }\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n\n  parseTaggedTemplateExpression(base, startPos, startLoc, state) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n\n    if (state.optionalChainMember) {\n      this.raise(startPos, ErrorMessages.OptionalChainingNoTemplate);\n    }\n\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base) {\n    return base.type === \"Identifier\" && base.name === \"async\" && this.state.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;\n  }\n\n  finishCallExpression(node, optional) {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        if (!this.hasPlugin(\"moduleAttributes\")) {\n          this.expectPlugin(\"importAssertions\");\n        }\n      }\n\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(node.start, ErrorMessages.ImportCallArity, this.hasPlugin(\"importAssertions\") || this.hasPlugin(\"moduleAttributes\") ? \"one or two arguments\" : \"one argument\");\n      } else {\n        for (let _i = 0, _node$arguments = node.arguments; _i < _node$arguments.length; _i++) {\n          const arg = _node$arguments[_i];\n\n          if (arg.type === \"SpreadElement\") {\n            this.raise(arg.start, ErrorMessages.ImportCallSpreadArgument);\n          }\n        }\n      }\n    }\n\n    return this.finishNode(node, optional ? \"OptionalCallExpression\" : \"CallExpression\");\n  }\n\n  parseCallExpressionArguments(close, possibleAsyncArrow, dynamicImport, allowPlaceholder, nodeForExtra) {\n    const elts = [];\n    let innerParenStart;\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types.comma);\n\n        if (this.match(close)) {\n          if (dynamicImport && !this.hasPlugin(\"importAssertions\") && !this.hasPlugin(\"moduleAttributes\")) {\n            this.raise(this.state.lastTokStart, ErrorMessages.ImportCallArgumentTrailingComma);\n          }\n\n          if (nodeForExtra) {\n            this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n          }\n\n          this.next();\n          break;\n        }\n      }\n\n      if (this.match(types.parenL) && !innerParenStart) {\n        innerParenStart = this.state.start;\n      }\n\n      elts.push(this.parseExprListItem(false, possibleAsyncArrow ? new ExpressionErrors() : undefined, possibleAsyncArrow ? {\n        start: 0\n      } : undefined, allowPlaceholder));\n    }\n\n    if (possibleAsyncArrow && innerParenStart && this.shouldParseAsyncArrow()) {\n      this.unexpected();\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return elts;\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(types.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    var _call$extra;\n\n    this.expect(types.arrow);\n    this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingComma);\n    return node;\n  }\n\n  parseNoCallExpr() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    if (this.state.type === types.slash) this.readRegexp();\n    const canBeArrow = this.state.potentialArrowAt === this.state.start;\n    let node;\n\n    switch (this.state.type) {\n      case types._super:\n        return this.parseSuper();\n\n      case types._import:\n        node = this.startNode();\n        this.next();\n\n        if (this.match(types.dot)) {\n          return this.parseImportMetaProperty(node);\n        }\n\n        if (!this.match(types.parenL)) {\n          this.raise(this.state.lastTokStart, ErrorMessages.UnsupportedImport);\n        }\n\n        return this.finishNode(node, \"Import\");\n\n      case types._this:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case types.name:\n        {\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n            if (this.match(types._function)) {\n              const last = this.state.context.length - 1;\n\n              if (this.state.context[last] !== types$1.functionStatement) {\n                throw new Error(\"Internal error\");\n              }\n\n              this.state.context[last] = types$1.functionExpression;\n              this.next();\n              return this.parseFunction(this.startNodeAtNode(id), undefined, true);\n            } else if (this.match(types.name)) {\n              return this.parseAsyncArrowUnaryFunction(id);\n            }\n          }\n\n          if (canBeArrow && this.match(types.arrow) && !this.canInsertSemicolon()) {\n            this.next();\n            return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);\n          }\n\n          return id;\n        }\n\n      case types._do:\n        {\n          return this.parseDo();\n        }\n\n      case types.regexp:\n        {\n          const value = this.state.value;\n          node = this.parseLiteral(value.value, \"RegExpLiteral\");\n          node.pattern = value.pattern;\n          node.flags = value.flags;\n          return node;\n        }\n\n      case types.num:\n        return this.parseLiteral(this.state.value, \"NumericLiteral\");\n\n      case types.bigint:\n        return this.parseLiteral(this.state.value, \"BigIntLiteral\");\n\n      case types.decimal:\n        return this.parseLiteral(this.state.value, \"DecimalLiteral\");\n\n      case types.string:\n        return this.parseLiteral(this.state.value, \"StringLiteral\");\n\n      case types._null:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"NullLiteral\");\n\n      case types._true:\n      case types._false:\n        return this.parseBooleanLiteral();\n\n      case types.parenL:\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n\n      case types.bracketBarL:\n      case types.bracketHashL:\n        {\n          return this.parseArrayLike(this.state.type === types.bracketBarL ? types.bracketBarR : types.bracketR, false, true, refExpressionErrors);\n        }\n\n      case types.bracketL:\n        {\n          return this.parseArrayLike(types.bracketR, true, false, refExpressionErrors);\n        }\n\n      case types.braceBarL:\n      case types.braceHashL:\n        {\n          return this.parseObjectLike(this.state.type === types.braceBarL ? types.braceBarR : types.braceR, false, true, refExpressionErrors);\n        }\n\n      case types.braceL:\n        {\n          return this.parseObjectLike(types.braceR, false, false, refExpressionErrors);\n        }\n\n      case types._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case types.at:\n        this.parseDecorators();\n\n      case types._class:\n        node = this.startNode();\n        this.takeDecorators(node);\n        return this.parseClass(node, false);\n\n      case types._new:\n        return this.parseNewOrNewTarget();\n\n      case types.backQuote:\n        return this.parseTemplate(false);\n\n      case types.doubleColon:\n        {\n          node = this.startNode();\n          this.next();\n          node.object = null;\n          const callee = node.callee = this.parseNoCallExpr();\n\n          if (callee.type === \"MemberExpression\") {\n            return this.finishNode(node, \"BindExpression\");\n          } else {\n            throw this.raise(callee.start, ErrorMessages.UnsupportedBind);\n          }\n        }\n\n      case types.hash:\n        {\n          if (this.state.inPipeline) {\n            node = this.startNode();\n\n            if (this.getPluginOption(\"pipelineOperator\", \"proposal\") !== \"smart\") {\n              this.raise(node.start, ErrorMessages.PrimaryTopicRequiresSmartPipeline);\n            }\n\n            this.next();\n\n            if (!this.primaryTopicReferenceIsAllowedInCurrentTopicContext()) {\n              this.raise(node.start, ErrorMessages.PrimaryTopicNotAllowed);\n            }\n\n            this.registerTopicReference();\n            return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n          }\n\n          const nextCh = this.input.codePointAt(this.state.end);\n\n          if (isIdentifierStart(nextCh) || nextCh === 92) {\n            const start = this.state.start;\n            node = this.parseMaybePrivateName(true);\n\n            if (this.match(types._in)) {\n              this.expectPlugin(\"privateIn\");\n              this.classScope.usePrivateName(node.id.name, node.start);\n            } else if (this.hasPlugin(\"privateIn\")) {\n              this.raise(this.state.start, ErrorMessages.PrivateInExpectedIn, node.id.name);\n            } else {\n              throw this.unexpected(start);\n            }\n\n            return node;\n          }\n        }\n\n      case types.relational:\n        {\n          if (this.state.value === \"<\") {\n            const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n\n            if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {\n                this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n              }\n          }\n        }\n\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  parseAsyncArrowUnaryFunction(id) {\n    const node = this.startNodeAtNode(id);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldMaybeInAsyncArrowHead = this.state.maybeInAsyncArrowHead;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = true;\n    this.state.maybeInAsyncArrowHead = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    const params = [this.parseIdentifier()];\n\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.pos, ErrorMessages.LineTerminatorBeforeArrow);\n    }\n\n    this.expect(types.arrow);\n    this.checkYieldAwaitInDefaultParams();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.maybeInAsyncArrowHead = oldMaybeInAsyncArrowHead;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n    this.parseArrowExpression(node, params, true);\n    return node;\n  }\n\n  parseDo() {\n    this.expectPlugin(\"doExpressions\");\n    const node = this.startNode();\n    this.next();\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    node.body = this.parseBlock();\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  parseSuper() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.match(types.parenL) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(node.start, ErrorMessages.SuperNotAllowed);\n    } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(node.start, ErrorMessages.UnexpectedSuper);\n    }\n\n    if (!this.match(types.parenL) && !this.match(types.bracketL) && !this.match(types.dot)) {\n      this.raise(node.start, ErrorMessages.UnsupportedSuper);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parseBooleanLiteral() {\n    const node = this.startNode();\n    node.value = this.match(types._true);\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseMaybePrivateName(isPrivateNameAllowed) {\n    const isPrivate = this.match(types.hash);\n\n    if (isPrivate) {\n      this.expectOnePlugin([\"classPrivateProperties\", \"classPrivateMethods\"]);\n\n      if (!isPrivateNameAllowed) {\n        this.raise(this.state.pos, ErrorMessages.UnexpectedPrivateField);\n      }\n\n      const node = this.startNode();\n      this.next();\n      this.assertNoSpace(\"Unexpected space between # and identifier\");\n      node.id = this.parseIdentifier(true);\n      return this.finishNode(node, \"PrivateName\");\n    } else {\n      return this.parseIdentifier(true);\n    }\n  }\n\n  parseFunctionOrFunctionSent() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.prodParam.hasYield && this.match(types.dot)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"function\");\n      this.next();\n      return this.parseMetaProperty(node, meta, \"sent\");\n    }\n\n    return this.parseFunction(node);\n  }\n\n  parseMetaProperty(node, meta, propertyName) {\n    node.meta = meta;\n\n    if (meta.name === \"function\" && propertyName === \"sent\") {\n      if (this.isContextual(propertyName)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        this.unexpected();\n      }\n    }\n\n    const containsEsc = this.state.containsEsc;\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(node.property.start, ErrorMessages.UnsupportedMetaProperty, meta.name, propertyName);\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  parseImportMetaProperty(node) {\n    const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n    this.next();\n\n    if (this.isContextual(\"meta\")) {\n      if (!this.inModule) {\n        this.raiseWithData(id.start, {\n          code: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\"\n        }, ErrorMessages.ImportMetaOutsideModule);\n      }\n\n      this.sawUnambiguousESM = true;\n    }\n\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n\n  parseLiteral(value, type, startPos, startLoc) {\n    startPos = startPos || this.state.start;\n    startLoc = startLoc || this.state.startLoc;\n    const node = this.startNodeAt(startPos, startLoc);\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(startPos, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode(node, type);\n  }\n\n  parseParenAndDistinguishExpression(canBeArrow) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let val;\n    this.next();\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.state.inFSharpPipelineDirectBody = false;\n    const innerStartPos = this.state.start;\n    const innerStartLoc = this.state.startLoc;\n    const exprList = [];\n    const refExpressionErrors = new ExpressionErrors();\n    const refNeedsArrowPos = {\n      start: 0\n    };\n    let first = true;\n    let spreadStart;\n    let optionalCommaStart;\n\n    while (!this.match(types.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types.comma, refNeedsArrowPos.start || null);\n\n        if (this.match(types.parenR)) {\n          optionalCommaStart = this.state.start;\n          break;\n        }\n      }\n\n      if (this.match(types.ellipsis)) {\n        const spreadNodeStartPos = this.state.start;\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStart = this.state.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartPos, spreadNodeStartLoc));\n        this.checkCommaAfterRest(41);\n        break;\n      } else {\n        exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem, refNeedsArrowPos));\n      }\n    }\n\n    const innerEndPos = this.state.lastTokEnd;\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(types.parenR);\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let arrowNode = this.startNodeAt(startPos, startLoc);\n\n    if (canBeArrow && this.shouldParseArrow() && (arrowNode = this.parseArrow(arrowNode))) {\n      if (!this.isAwaitAllowed() && !this.state.maybeInAsyncArrowHead) {\n        this.state.awaitPos = oldAwaitPos;\n      }\n\n      this.checkYieldAwaitInDefaultParams();\n      this.state.yieldPos = oldYieldPos;\n      this.state.awaitPos = oldAwaitPos;\n\n      for (let _i2 = 0; _i2 < exprList.length; _i2++) {\n        const param = exprList[_i2];\n\n        if (param.extra && param.extra.parenthesized) {\n          this.unexpected(param.extra.parenStart);\n        }\n      }\n\n      this.parseArrowExpression(arrowNode, exprList, false);\n      return arrowNode;\n    }\n\n    if (oldYieldPos !== -1) this.state.yieldPos = oldYieldPos;\n    if (oldAwaitPos !== -1) this.state.awaitPos = oldAwaitPos;\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStart);\n    }\n\n    if (optionalCommaStart) this.unexpected(optionalCommaStart);\n    if (spreadStart) this.unexpected(spreadStart);\n    this.checkExpressionErrors(refExpressionErrors, true);\n    if (refNeedsArrowPos.start) this.unexpected(refNeedsArrowPos.start);\n    this.toReferencedListDeep(exprList, true);\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(val, \"parenthesized\", true);\n      this.addExtra(val, \"parenStart\", startPos);\n      return val;\n    }\n\n    const parenExpression = this.startNodeAt(startPos, startLoc);\n    parenExpression.expression = val;\n    this.finishNode(parenExpression, \"ParenthesizedExpression\");\n    return parenExpression;\n  }\n\n  shouldParseArrow() {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(node) {\n    if (this.eat(types.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    return node;\n  }\n\n  parseNewOrNewTarget() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.match(types.dot)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n      this.next();\n      const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n        let error = ErrorMessages.UnexpectedNewTarget;\n\n        if (this.hasPlugin(\"classProperties\")) {\n          error += \" or class properties\";\n        }\n\n        this.raise(metaProp.start, error);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node);\n  }\n\n  parseNew(node) {\n    node.callee = this.parseNoCallExpr();\n\n    if (node.callee.type === \"Import\") {\n      this.raise(node.callee.start, ErrorMessages.ImportCallNotNewExpression);\n    } else if (node.callee.type === \"OptionalMemberExpression\" || node.callee.type === \"OptionalCallExpression\") {\n      this.raise(this.state.lastTokEnd, ErrorMessages.OptionalChainingNoNew);\n    } else if (this.eat(types.questionDot)) {\n      this.raise(this.state.start, ErrorMessages.OptionalChainingNoNew);\n    }\n\n    this.parseNewArguments(node);\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewArguments(node) {\n    if (this.eat(types.parenL)) {\n      const args = this.parseExprList(types.parenR);\n      this.toReferencedList(args);\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n  }\n\n  parseTemplateElement(isTagged) {\n    const elem = this.startNode();\n\n    if (this.state.value === null) {\n      if (!isTagged) {\n        this.raise(this.state.start + 1, ErrorMessages.InvalidEscapeSequenceTemplate);\n      }\n    }\n\n    elem.value = {\n      raw: this.input.slice(this.state.start, this.state.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.state.value\n    };\n    this.next();\n    elem.tail = this.match(types.backQuote);\n    return this.finishNode(elem, \"TemplateElement\");\n  }\n\n  parseTemplate(isTagged) {\n    const node = this.startNode();\n    this.next();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n\n    while (!curElt.tail) {\n      this.expect(types.dollarBraceL);\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.expect(types.braceR);\n      node.quasis.push(curElt = this.parseTemplateElement(isTagged));\n    }\n\n    this.next();\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  parseTemplateSubstitution() {\n    return this.parseExpression();\n  }\n\n  parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash = Object.create(null);\n    let first = true;\n    const node = this.startNode();\n    node.properties = [];\n    this.next();\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types.comma);\n\n        if (this.match(close)) {\n          this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n          this.next();\n          break;\n        }\n      }\n\n      const prop = this.parsePropertyDefinition(isPattern, refExpressionErrors);\n\n      if (!isPattern) {\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (isRecord && prop.type !== \"ObjectProperty\" && prop.type !== \"SpreadElement\") {\n        this.raise(prop.start, ErrorMessages.InvalidRecordProperty);\n      }\n\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n\n      node.properties.push(prop);\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n\n    return this.finishNode(node, type);\n  }\n\n  maybeAsyncOrAccessorProp(prop) {\n    return !prop.computed && prop.key.type === \"Identifier\" && (this.isLiteralPropertyName() || this.match(types.bracketL) || this.match(types.star));\n  }\n\n  parsePropertyDefinition(isPattern, refExpressionErrors) {\n    let decorators = [];\n\n    if (this.match(types.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(this.state.start, ErrorMessages.UnsupportedPropertyDecorator);\n      }\n\n      while (this.match(types.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode();\n    let isGenerator = false;\n    let isAsync = false;\n    let isAccessor = false;\n    let startPos;\n    let startLoc;\n\n    if (this.match(types.ellipsis)) {\n      if (decorators.length) this.unexpected();\n\n      if (isPattern) {\n        this.next();\n        prop.argument = this.parseIdentifier();\n        this.checkCommaAfterRest(125);\n        return this.finishNode(prop, \"RestElement\");\n      }\n\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (isPattern || refExpressionErrors) {\n      startPos = this.state.start;\n      startLoc = this.state.startLoc;\n    }\n\n    if (!isPattern) {\n      isGenerator = this.eat(types.star);\n    }\n\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop, false);\n\n    if (!isPattern && !isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const keyName = key.name;\n\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        isGenerator = this.eat(types.star);\n        this.parsePropertyName(prop, false);\n      }\n\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        prop.kind = keyName;\n\n        if (this.match(types.star)) {\n          isGenerator = true;\n          this.raise(this.state.pos, ErrorMessages.AccessorIsGenerator, keyName);\n          this.next();\n        }\n\n        this.parsePropertyName(prop, false);\n      }\n    }\n\n    this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n    return prop;\n  }\n\n  getGetterSetterExpectedParamCount(method) {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  getObjectOrClassMethodParams(method) {\n    return method.params;\n  }\n\n  checkGetterSetterParams(method) {\n    var _params;\n\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    const start = method.start;\n\n    if (params.length !== paramCount) {\n      if (method.kind === \"get\") {\n        this.raise(start, ErrorMessages.BadGetterArity);\n      } else {\n        this.raise(start, ErrorMessages.BadSetterArity);\n      }\n    }\n\n    if (method.kind === \"set\" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === \"RestElement\") {\n      this.raise(start, ErrorMessages.BadSetterRestParameter);\n    }\n  }\n\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    if (isAccessor) {\n      this.parseMethod(prop, isGenerator, false, false, false, \"ObjectMethod\");\n      this.checkGetterSetterParams(prop);\n      return prop;\n    }\n\n    if (isAsync || isGenerator || this.match(types.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(prop, isGenerator, isAsync, false, false, \"ObjectMethod\");\n    }\n  }\n\n  parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n    prop.shorthand = false;\n\n    if (this.eat(types.colon)) {\n      prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      this.checkReservedWord(prop.key.name, prop.key.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key.__clone());\n      } else if (this.match(types.eq) && refExpressionErrors) {\n        if (refExpressionErrors.shorthandAssign === -1) {\n          refExpressionErrors.shorthandAssign = this.state.start;\n        }\n\n        prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key.__clone());\n      } else {\n        prop.value = prop.key.__clone();\n      }\n\n      prop.shorthand = true;\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n    if (!node) this.unexpected();\n    return node;\n  }\n\n  parsePropertyName(prop, isPrivateNameAllowed) {\n    if (this.eat(types.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(types.bracketR);\n    } else {\n      const oldInPropertyName = this.state.inPropertyName;\n      this.state.inPropertyName = true;\n      prop.key = this.match(types.num) || this.match(types.string) || this.match(types.bigint) || this.match(types.decimal) ? this.parseExprAtom() : this.parseMaybePrivateName(isPrivateNameAllowed);\n\n      if (prop.key.type !== \"PrivateName\") {\n        prop.computed = false;\n      }\n\n      this.state.inPropertyName = oldInPropertyName;\n    }\n\n    return prop.key;\n  }\n\n  initFunction(node, isAsync) {\n    node.id = null;\n    node.generator = false;\n    node.async = !!isAsync;\n  }\n\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.initFunction(node, isAsync);\n    node.generator = !!isGenerator;\n    const allowModifiers = isConstructor;\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, allowModifiers);\n    this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n    return node;\n  }\n\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);\n\n    if (canBePattern && !this.state.maybeInArrowParameters) {\n      this.toReferencedList(node.elements);\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(node, isTuple ? \"TupleExpression\" : \"ArrayExpression\");\n  }\n\n  parseArrowExpression(node, params, isAsync, trailingCommaPos) {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n\n    if (!this.match(types.bracketL) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaPos);\n    }\n\n    this.state.maybeInArrowParameters = false;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.parseFunctionBody(node, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(node, params, trailingCommaPos) {\n    node.params = this.toAssignableList(params, trailingCommaPos);\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    this.parseFunctionBody(node, false, isMethod);\n    this.finishNode(node, type);\n  }\n\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    const isExpression = allowExpression && !this.match(types.braceL);\n    const oldInParameters = this.state.inParameters;\n    this.state.inParameters = false;\n\n    if (isExpression) {\n      node.body = this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(true, false, hasStrictModeDirective => {\n        const nonSimple = !this.isSimpleParamList(node.params);\n\n        if (hasStrictModeDirective && nonSimple) {\n          const errorPos = (node.kind === \"method\" || node.kind === \"constructor\") && !!node.key ? node.key.end : node.start;\n          this.raise(errorPos, ErrorMessages.IllegalLanguageModeDirective);\n        }\n\n        const strictModeChanged = !oldStrict && this.state.strict;\n        this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);\n\n        if (this.state.strict && node.id) {\n          this.checkLVal(node.id, BIND_OUTSIDE, undefined, \"function name\", undefined, strictModeChanged);\n        }\n      });\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n\n    this.state.inParameters = oldInParameters;\n  }\n\n  isSimpleParamList(params) {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (params[i].type !== \"Identifier\") return false;\n    }\n\n    return true;\n  }\n\n  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {\n    const nameHash = Object.create(null);\n\n    for (let i = 0; i < node.params.length; i++) {\n      this.checkLVal(node.params[i], BIND_VAR, allowDuplicates ? null : nameHash, \"function parameter list\", undefined, strictModeChanged);\n    }\n  }\n\n  parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types.comma);\n\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n          }\n\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n\n    return elts;\n  }\n\n  parseExprListItem(allowEmpty, refExpressionErrors, refNeedsArrowPos, allowPlaceholder) {\n    let elt;\n\n    if (this.match(types.comma)) {\n      if (!allowEmpty) {\n        this.raise(this.state.pos, ErrorMessages.UnexpectedToken, \",\");\n      }\n\n      elt = null;\n    } else if (this.match(types.ellipsis)) {\n      const spreadNodeStartPos = this.state.start;\n      const spreadNodeStartLoc = this.state.startLoc;\n      elt = this.parseParenItem(this.parseSpread(refExpressionErrors, refNeedsArrowPos), spreadNodeStartPos, spreadNodeStartLoc);\n    } else if (this.match(types.question)) {\n      this.expectPlugin(\"partialApplication\");\n\n      if (!allowPlaceholder) {\n        this.raise(this.state.start, ErrorMessages.UnexpectedArgumentPlaceholder);\n      }\n\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem, refNeedsArrowPos);\n    }\n\n    return elt;\n  }\n\n  parseIdentifier(liberal) {\n    const node = this.startNode();\n    const name = this.parseIdentifierName(node.start, liberal);\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node, name) {\n    node.name = name;\n    node.loc.identifierName = name;\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(pos, liberal) {\n    let name;\n    const {\n      start,\n      type\n    } = this.state;\n\n    if (type === types.name) {\n      name = this.state.value;\n    } else if (type.keyword) {\n      name = type.keyword;\n      const curContext = this.curContext();\n\n      if ((type === types._class || type === types._function) && (curContext === types$1.functionStatement || curContext === types$1.functionExpression)) {\n        this.state.context.pop();\n      }\n    } else {\n      throw this.unexpected();\n    }\n\n    if (liberal) {\n      this.state.type = types.name;\n    } else {\n      this.checkReservedWord(name, start, !!type.keyword, false);\n    }\n\n    this.next();\n    return name;\n  }\n\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n    if (this.prodParam.hasYield && word === \"yield\") {\n      this.raise(startLoc, ErrorMessages.YieldBindingIdentifier);\n      return;\n    }\n\n    if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(startLoc, ErrorMessages.AwaitBindingIdentifier);\n        return;\n      }\n\n      if (this.state.awaitPos === -1 && (this.state.maybeInAsyncArrowHead || this.isAwaitAllowed())) {\n        this.state.awaitPos = this.state.start;\n      }\n    }\n\n    if (this.scope.inClass && !this.scope.inNonArrowFunction && word === \"arguments\") {\n      this.raise(startLoc, ErrorMessages.ArgumentsInClass);\n      return;\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(startLoc, ErrorMessages.UnexpectedKeyword, word);\n      return;\n    }\n\n    const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      if (!this.prodParam.hasAwait && word === \"await\") {\n        this.raise(startLoc, ErrorMessages.AwaitNotInAsyncFunction);\n      } else {\n        this.raise(startLoc, ErrorMessages.UnexpectedReservedWord, word);\n      }\n    }\n  }\n\n  isAwaitAllowed() {\n    if (this.scope.inFunction) return this.prodParam.hasAwait;\n    if (this.options.allowAwaitOutsideFunction) return true;\n\n    if (this.hasPlugin(\"topLevelAwait\")) {\n      return this.inModule && this.prodParam.hasAwait;\n    }\n\n    return false;\n  }\n\n  parseAwait() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.state.inParameters) {\n      this.raise(node.start, ErrorMessages.AwaitExpressionFormalParameter);\n    } else if (this.state.awaitPos === -1) {\n      this.state.awaitPos = node.start;\n    }\n\n    if (this.eat(types.star)) {\n      this.raise(node.start, ErrorMessages.ObsoleteAwaitStar);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.hasPrecedingLineBreak() || this.match(types.plusMin) || this.match(types.parenL) || this.match(types.bracketL) || this.match(types.backQuote) || this.match(types.regexp) || this.match(types.slash) || this.hasPlugin(\"v8intrinsic\") && this.match(types.modulo)) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary();\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  parseYield() {\n    const node = this.startNode();\n\n    if (this.state.inParameters) {\n      this.raise(node.start, ErrorMessages.YieldInParameter);\n    } else if (this.state.yieldPos === -1) {\n      this.state.yieldPos = node.start;\n    }\n\n    this.next();\n\n    if (this.match(types.semi) || !this.match(types.star) && !this.state.type.startsExpr || this.hasPrecedingLineBreak()) {\n      node.delegate = false;\n      node.argument = null;\n    } else {\n      node.delegate = this.eat(types.star);\n      node.argument = this.parseMaybeAssign();\n    }\n\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  checkPipelineAtInfixOperator(left, leftStartPos) {\n    if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n      if (left.type === \"SequenceExpression\") {\n        this.raise(leftStartPos, ErrorMessages.PipelineHeadSequenceExpression);\n      }\n    }\n  }\n\n  parseSmartPipelineBody(childExpression, startPos, startLoc) {\n    this.checkSmartPipelineBodyEarlyErrors(childExpression, startPos);\n    return this.parseSmartPipelineBodyInStyle(childExpression, startPos, startLoc);\n  }\n\n  checkSmartPipelineBodyEarlyErrors(childExpression, startPos) {\n    if (this.match(types.arrow)) {\n      throw this.raise(this.state.start, ErrorMessages.PipelineBodyNoArrow);\n    } else if (childExpression.type === \"SequenceExpression\") {\n      this.raise(startPos, ErrorMessages.PipelineBodySequenceExpression);\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpression, startPos, startLoc) {\n    const bodyNode = this.startNodeAt(startPos, startLoc);\n    const isSimpleReference = this.isSimpleReference(childExpression);\n\n    if (isSimpleReference) {\n      bodyNode.callee = childExpression;\n    } else {\n      if (!this.topicReferenceWasUsedInCurrentTopicContext()) {\n        this.raise(startPos, ErrorMessages.PipelineTopicUnused);\n      }\n\n      bodyNode.expression = childExpression;\n    }\n\n    return this.finishNode(bodyNode, isSimpleReference ? \"PipelineBareFunction\" : \"PipelineTopicExpression\");\n  }\n\n  isSimpleReference(expression) {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return !expression.computed && this.isSimpleReference(expression.object);\n\n      case \"Identifier\":\n        return true;\n\n      default:\n        return false;\n    }\n  }\n\n  withTopicPermittingContext(callback) {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      maxNumOfResolvableTopics: 1,\n      maxTopicIndex: null\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  withTopicForbiddingContext(callback) {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      maxNumOfResolvableTopics: 0,\n      maxTopicIndex: null\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  withSoloAwaitPermittingContext(callback) {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n\n    return callback();\n  }\n\n  disallowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n\n    return callback();\n  }\n\n  registerTopicReference() {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  primaryTopicReferenceIsAllowedInCurrentTopicContext() {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentTopicContext() {\n    return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;\n  }\n\n  parseFSharpPipelineBody(prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n    const ret = this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, prec);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return ret;\n  }\n\n}\n\nconst loopLabel = {\n  kind: \"loop\"\n},\n      switchLabel = {\n  kind: \"switch\"\n};\nconst FUNC_NO_FLAGS = 0b000,\n      FUNC_STATEMENT = 0b001,\n      FUNC_HANGING_STATEMENT = 0b010,\n      FUNC_NULLABLE_ID = 0b100;\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\nclass StatementParser extends ExpressionParser {\n  parseTopLevel(file, program) {\n    program.sourceType = this.options.sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, types.eof);\n\n    if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {\n      for (let _i = 0, _Array$from = Array.from(this.scope.undefinedExports); _i < _Array$from.length; _i++) {\n        const [name] = _Array$from[_i];\n        const pos = this.scope.undefinedExports.get(name);\n        this.raise(pos, ErrorMessages.ModuleExportUndefined, name);\n      }\n    }\n\n    file.program = this.finishNode(program, \"Program\");\n    file.comments = this.state.comments;\n    if (this.options.tokens) file.tokens = this.tokens;\n    return this.finishNode(file, \"File\");\n  }\n\n  stmtToDirective(stmt) {\n    const expr = stmt.expression;\n    const directiveLiteral = this.startNodeAt(expr.start, expr.loc.start);\n    const directive = this.startNodeAt(stmt.start, stmt.loc.start);\n    const raw = this.input.slice(expr.start, expr.end);\n    const val = directiveLiteral.value = raw.slice(1, -1);\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    directive.value = this.finishNodeAt(directiveLiteral, \"DirectiveLiteral\", expr.end, expr.loc.end);\n    return this.finishNodeAt(directive, \"Directive\", stmt.end, stmt.loc.end);\n  }\n\n  parseInterpreterDirective() {\n    if (!this.match(types.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(context) {\n    if (!this.isContextual(\"let\")) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const nextCh = this.input.charCodeAt(next);\n    if (nextCh === 91) return true;\n    if (context) return false;\n    if (nextCh === 123) return true;\n\n    if (isIdentifierStart(nextCh)) {\n      let pos = next + 1;\n\n      while (isIdentifierChar(this.input.charCodeAt(pos))) {\n        ++pos;\n      }\n\n      const ident = this.input.slice(next, pos);\n      if (!keywordRelationalOperator.test(ident)) return true;\n    }\n\n    return false;\n  }\n\n  parseStatement(context, topLevel) {\n    if (this.match(types.at)) {\n      this.parseDecorators(true);\n    }\n\n    return this.parseStatementContent(context, topLevel);\n  }\n\n  parseStatementContent(context, topLevel) {\n    let starttype = this.state.type;\n    const node = this.startNode();\n    let kind;\n\n    if (this.isLet(context)) {\n      starttype = types._var;\n      kind = \"let\";\n    }\n\n    switch (starttype) {\n      case types._break:\n      case types._continue:\n        return this.parseBreakContinueStatement(node, starttype.keyword);\n\n      case types._debugger:\n        return this.parseDebuggerStatement(node);\n\n      case types._do:\n        return this.parseDoStatement(node);\n\n      case types._for:\n        return this.parseForStatement(node);\n\n      case types._function:\n        if (this.lookaheadCharCode() === 46) break;\n\n        if (context) {\n          if (this.state.strict) {\n            this.raise(this.state.start, ErrorMessages.StrictFunction);\n          } else if (context !== \"if\" && context !== \"label\") {\n            this.raise(this.state.start, ErrorMessages.SloppyFunction);\n          }\n        }\n\n        return this.parseFunctionStatement(node, false, !context);\n\n      case types._class:\n        if (context) this.unexpected();\n        return this.parseClass(node, true);\n\n      case types._if:\n        return this.parseIfStatement(node);\n\n      case types._return:\n        return this.parseReturnStatement(node);\n\n      case types._switch:\n        return this.parseSwitchStatement(node);\n\n      case types._throw:\n        return this.parseThrowStatement(node);\n\n      case types._try:\n        return this.parseTryStatement(node);\n\n      case types._const:\n      case types._var:\n        kind = kind || this.state.value;\n\n        if (context && kind !== \"var\") {\n          this.raise(this.state.start, ErrorMessages.UnexpectedLexicalDeclaration);\n        }\n\n        return this.parseVarStatement(node, kind);\n\n      case types._while:\n        return this.parseWhileStatement(node);\n\n      case types._with:\n        return this.parseWithStatement(node);\n\n      case types.braceL:\n        return this.parseBlock();\n\n      case types.semi:\n        return this.parseEmptyStatement(node);\n\n      case types._import:\n        {\n          const nextTokenCharCode = this.lookaheadCharCode();\n\n          if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {\n              break;\n            }\n        }\n\n      case types._export:\n        {\n          if (!this.options.allowImportExportEverywhere && !topLevel) {\n            this.raise(this.state.start, ErrorMessages.UnexpectedImportExport);\n          }\n\n          this.next();\n          let result;\n\n          if (starttype === types._import) {\n            result = this.parseImport(node);\n\n            if (result.type === \"ImportDeclaration\" && (!result.importKind || result.importKind === \"value\")) {\n              this.sawUnambiguousESM = true;\n            }\n          } else {\n            result = this.parseExport(node);\n\n            if (result.type === \"ExportNamedDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportAllDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportDefaultDeclaration\") {\n              this.sawUnambiguousESM = true;\n            }\n          }\n\n          this.assertModuleNodeAllowed(node);\n          return result;\n        }\n\n      default:\n        {\n          if (this.isAsyncFunction()) {\n            if (context) {\n              this.raise(this.state.start, ErrorMessages.AsyncFunctionInSingleStatementContext);\n            }\n\n            this.next();\n            return this.parseFunctionStatement(node, true, !context);\n          }\n        }\n    }\n\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (starttype === types.name && expr.type === \"Identifier\" && this.eat(types.colon)) {\n      return this.parseLabeledStatement(node, maybeName, expr, context);\n    } else {\n      return this.parseExpressionStatement(node, expr);\n    }\n  }\n\n  assertModuleNodeAllowed(node) {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raiseWithData(node.start, {\n        code: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\"\n      }, ErrorMessages.ImportOutsideModule);\n    }\n  }\n\n  takeDecorators(node) {\n    const decorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    if (decorators.length) {\n      node.decorators = decorators;\n      this.resetStartLocationFromNode(node, decorators[0]);\n      this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n    }\n  }\n\n  canHaveLeadingDecorator() {\n    return this.match(types._class);\n  }\n\n  parseDecorators(allowExport) {\n    const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    while (this.match(types.at)) {\n      const decorator = this.parseDecorator();\n      currentContextDecorators.push(decorator);\n    }\n\n    if (this.match(types._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (this.hasPlugin(\"decorators\") && !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n        this.raise(this.state.start, ErrorMessages.DecoratorExportClass);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(this.state.start, ErrorMessages.UnexpectedLeadingDecorator);\n    }\n  }\n\n  parseDecorator() {\n    this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n    const node = this.startNode();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      this.state.decoratorStack.push([]);\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let expr;\n\n      if (this.eat(types.parenL)) {\n        expr = this.parseExpression();\n        this.expect(types.parenR);\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(types.dot)) {\n          const node = this.startNodeAt(startPos, startLoc);\n          node.object = expr;\n          node.property = this.parseIdentifier(true);\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n      }\n\n      node.expression = this.parseMaybeDecoratorArguments(expr);\n      this.state.decoratorStack.pop();\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(expr) {\n    if (this.eat(types.parenL)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(types.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(node, keyword) {\n    const isBreak = keyword === \"break\";\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, keyword);\n    return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n  }\n\n  verifyBreakContinue(node, keyword) {\n    const isBreak = keyword === \"break\";\n    let i;\n\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n\n    if (i === this.state.labels.length) {\n      this.raise(node.start, ErrorMessages.IllegalBreakContinue, keyword);\n    }\n  }\n\n  parseDebuggerStatement(node) {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression() {\n    this.expect(types.parenL);\n    const val = this.parseExpression();\n    this.expect(types.parenR);\n    return val;\n  }\n\n  parseDoStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"do\"));\n    this.state.labels.pop();\n    this.expect(types._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(types.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  parseForStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    let awaitAt = -1;\n\n    if (this.isAwaitAllowed() && this.eatContextual(\"await\")) {\n      awaitAt = this.state.lastTokStart;\n    }\n\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(types.parenL);\n\n    if (this.match(types.semi)) {\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n\n      return this.parseFor(node, null);\n    }\n\n    const isLet = this.isLet();\n\n    if (this.match(types._var) || this.match(types._const) || isLet) {\n      const init = this.startNode();\n      const kind = isLet ? \"let\" : this.state.value;\n      this.next();\n      this.parseVar(init, true, kind);\n      this.finishNode(init, \"VariableDeclaration\");\n\n      if ((this.match(types._in) || this.isContextual(\"of\")) && init.declarations.length === 1) {\n        return this.parseForIn(node, init, awaitAt);\n      }\n\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n\n      return this.parseFor(node, init);\n    }\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n\n    if (this.match(types._in) || this.isContextual(\"of\")) {\n      this.toAssignable(init);\n      const description = this.isContextual(\"of\") ? \"for-of statement\" : \"for-in statement\";\n      this.checkLVal(init, undefined, undefined, description);\n      return this.parseForIn(node, init, awaitAt);\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n\n    return this.parseFor(node, init);\n  }\n\n  parseFunctionStatement(node, isAsync, declarationPosition) {\n    this.next();\n    return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), isAsync);\n  }\n\n  parseIfStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    node.consequent = this.parseStatement(\"if\");\n    node.alternate = this.eat(types._else) ? this.parseStatement(\"if\") : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(node) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(this.state.start, ErrorMessages.IllegalReturn);\n    }\n\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  parseSwitchStatement(node) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases = node.cases = [];\n    this.expect(types.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n    let cur;\n\n    for (let sawDefault; !this.match(types.braceR);) {\n      if (this.match(types._case) || this.match(types._default)) {\n        const isCase = this.match(types._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        cases.push(cur = this.startNode());\n        cur.consequent = [];\n        this.next();\n\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(this.state.lastTokStart, ErrorMessages.MultipleDefaultsInSwitch);\n          }\n\n          sawDefault = true;\n          cur.test = null;\n        }\n\n        this.expect(types.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatement(null));\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next();\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(node) {\n    this.next();\n\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.lastTokEnd, ErrorMessages.NewlineAfterThrow);\n    }\n\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam() {\n    const param = this.parseBindingAtom();\n    const simple = param.type === \"Identifier\";\n    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, BIND_LEXICAL, null, \"catch clause\");\n    return param;\n  }\n\n  parseTryStatement(node) {\n    this.next();\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(types._catch)) {\n      const clause = this.startNode();\n      this.next();\n\n      if (this.match(types.parenL)) {\n        this.expect(types.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(types.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n\n      clause.body = this.withTopicForbiddingContext(() => this.parseBlock(false, false));\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(node.start, ErrorMessages.NoCatchOrFinally);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  parseVarStatement(node, kind) {\n    this.next();\n    this.parseVar(node, false, kind);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  parseWhileStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n    node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"while\"));\n    this.state.labels.pop();\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(node) {\n    if (this.state.strict) {\n      this.raise(this.state.start, ErrorMessages.StrictWith);\n    }\n\n    this.next();\n    node.object = this.parseHeaderExpression();\n    node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"with\"));\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node) {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  parseLabeledStatement(node, maybeName, expr, context) {\n    for (let _i2 = 0, _this$state$labels = this.state.labels; _i2 < _this$state$labels.length; _i2++) {\n      const label = _this$state$labels[_i2];\n\n      if (label.name === maybeName) {\n        this.raise(expr.start, ErrorMessages.LabelRedeclaration, maybeName);\n      }\n    }\n\n    const kind = this.state.type.isLoop ? \"loop\" : this.match(types._switch) ? \"switch\" : null;\n\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start\n    });\n    node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(node, expr) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {\n    const node = this.startNode();\n    this.expect(types.braceL);\n\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n\n    this.parseBlockBody(node, allowDirectives, false, types.braceR, afterBlockParse);\n\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt) {\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"StringLiteral\" && !stmt.expression.extra.parenthesized;\n  }\n\n  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {\n    const body = node.body = [];\n    const directives = node.directives = [];\n    this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);\n  }\n\n  parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {\n    const octalPositions = [];\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      if (!parsedNonDirective && this.state.octalPositions.length) {\n        octalPositions.push(...this.state.octalPositions);\n      }\n\n      const stmt = this.parseStatement(null, topLevel);\n\n      if (directives && !parsedNonDirective && this.isValidDirective(stmt)) {\n        const directive = this.stmtToDirective(stmt);\n        directives.push(directive);\n\n        if (!hasStrictModeDirective && directive.value.value === \"use strict\") {\n          hasStrictModeDirective = true;\n          this.setStrict(true);\n        }\n\n        continue;\n      }\n\n      parsedNonDirective = true;\n      body.push(stmt);\n    }\n\n    if (this.state.strict && octalPositions.length) {\n      for (let _i3 = 0; _i3 < octalPositions.length; _i3++) {\n        const pos = octalPositions[_i3];\n        this.raise(pos, ErrorMessages.StrictOctalLiteral);\n      }\n    }\n\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  parseFor(node, init) {\n    node.init = init;\n    this.expect(types.semi);\n    node.test = this.match(types.semi) ? null : this.parseExpression();\n    this.expect(types.semi);\n    node.update = this.match(types.parenR) ? null : this.parseExpression();\n    this.expect(types.parenR);\n    node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"for\"));\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  parseForIn(node, init, awaitAt) {\n    const isForIn = this.match(types._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt > -1) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt > -1;\n    }\n\n    if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) {\n      this.raise(init.start, ErrorMessages.ForInOfLoopInitializer, isForIn ? \"for-in\" : \"for-of\");\n    } else if (init.type === \"AssignmentPattern\") {\n      this.raise(init.start, ErrorMessages.InvalidLhs, \"for-loop\");\n    }\n\n    node.left = init;\n    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();\n    this.expect(types.parenR);\n    node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"for\"));\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  parseVar(node, isFor, kind) {\n    const declarations = node.declarations = [];\n    const isTypescript = this.hasPlugin(\"typescript\");\n    node.kind = kind;\n\n    for (;;) {\n      const decl = this.startNode();\n      this.parseVarId(decl, kind);\n\n      if (this.eat(types.eq)) {\n        decl.init = isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();\n      } else {\n        if (kind === \"const\" && !(this.match(types._in) || this.isContextual(\"of\"))) {\n          if (!isTypescript) {\n            this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Const declarations\");\n          }\n        } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.match(types._in) || this.isContextual(\"of\")))) {\n          this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Complex binding patterns\");\n        }\n\n        decl.init = null;\n      }\n\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(types.comma)) break;\n    }\n\n    return node;\n  }\n\n  parseVarId(decl, kind) {\n    decl.id = this.parseBindingAtom();\n    this.checkLVal(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, undefined, \"variable declaration\", kind !== \"var\");\n  }\n\n  parseFunction(node, statement = FUNC_NO_FLAGS, isAsync = false) {\n    const isStatement = statement & FUNC_STATEMENT;\n    const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n    const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n    this.initFunction(node, isAsync);\n\n    if (this.match(types.star) && isHangingStatement) {\n      this.raise(this.state.start, ErrorMessages.GeneratorInSingleStatementContext);\n    }\n\n    node.generator = this.eat(types.star);\n\n    if (isStatement) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldYieldPos = this.state.yieldPos;\n    const oldAwaitPos = this.state.awaitPos;\n    this.state.maybeInArrowParameters = false;\n    this.state.yieldPos = -1;\n    this.state.awaitPos = -1;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isStatement) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, false);\n    this.withTopicForbiddingContext(() => {\n      this.parseFunctionBodyAndFinish(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n    });\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isStatement && !isHangingStatement) {\n      this.registerFunctionStatementId(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.yieldPos = oldYieldPos;\n    this.state.awaitPos = oldAwaitPos;\n    return node;\n  }\n\n  parseFunctionId(requireId) {\n    return requireId || this.match(types.name) ? this.parseIdentifier() : null;\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    const oldInParameters = this.state.inParameters;\n    this.state.inParameters = true;\n    this.expect(types.parenL);\n    node.params = this.parseBindingList(types.parenR, 41, false, allowModifiers);\n    this.state.inParameters = oldInParameters;\n    this.checkYieldAwaitInDefaultParams();\n  }\n\n  registerFunctionStatementId(node) {\n    if (!node.id) return;\n    this.scope.declareName(node.id.name, this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.start);\n  }\n\n  parseClass(node, isStatement, optionalId) {\n    this.next();\n    this.takeDecorators(node);\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n  }\n\n  isClassProperty() {\n    return this.match(types.eq) || this.match(types.semi) || this.match(types.braceR);\n  }\n\n  isClassMethod() {\n    return this.match(types.parenL);\n  }\n\n  isNonstaticConstructor(method) {\n    return !method.computed && !method.static && (method.key.name === \"constructor\" || method.key.value === \"constructor\");\n  }\n\n  parseClassBody(constructorAllowsSuper, oldStrict) {\n    this.classScope.enter();\n    const state = {\n      constructorAllowsSuper,\n      hadConstructor: false,\n      hadStaticBlock: false\n    };\n    let decorators = [];\n    const classBody = this.startNode();\n    classBody.body = [];\n    this.expect(types.braceL);\n    this.withTopicForbiddingContext(() => {\n      while (!this.match(types.braceR)) {\n        if (this.eat(types.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(this.state.lastTokEnd, ErrorMessages.DecoratorSemicolon);\n          }\n\n          continue;\n        }\n\n        if (this.match(types.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode();\n\n        if (decorators.length) {\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (member.kind === \"constructor\" && member.decorators && member.decorators.length > 0) {\n          this.raise(member.start, ErrorMessages.DecoratorConstructor);\n        }\n      }\n    });\n    this.state.strict = oldStrict;\n    this.next();\n\n    if (decorators.length) {\n      throw this.raise(this.state.start, ErrorMessages.TrailingDecorator);\n    }\n\n    this.classScope.exit();\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  parseClassMemberFromModifier(classBody, member) {\n    const key = this.parseIdentifier(true);\n\n    if (this.isClassMethod()) {\n      const method = member;\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(classBody, method, false, false, false, false);\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop = member;\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n\n    return false;\n  }\n\n  parseClassMember(classBody, member, state) {\n    const isStatic = this.isContextual(\"static\");\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n\n      if (this.eat(types.braceL)) {\n        this.parseClassStaticBlock(classBody, member, state);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const publicMethod = member;\n    const privateMethod = member;\n    const publicProp = member;\n    const privateProp = member;\n    const method = publicMethod;\n    const publicMember = publicMethod;\n    member.static = isStatic;\n\n    if (this.eat(types.star)) {\n      method.kind = \"method\";\n      this.parseClassElementName(method);\n\n      if (method.key.type === \"PrivateName\") {\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsGenerator);\n      }\n\n      this.pushClassMethod(classBody, publicMethod, true, false, false, false);\n      return;\n    }\n\n    const containsEsc = this.state.containsEsc;\n    const key = this.parseClassElementName(member);\n    const isPrivate = key.type === \"PrivateName\";\n    const isSimple = key.type === \"Identifier\";\n    const maybeQuestionTokenStart = this.state.start;\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(key.start, ErrorMessages.DuplicateConstructor);\n        }\n\n        state.hadConstructor = true;\n        allowsDirectSuper = state.constructorAllowsSuper;\n      }\n\n      this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (isSimple && key.name === \"async\" && !containsEsc && !this.isLineTerminator()) {\n      const isGenerator = this.eat(types.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStart);\n      }\n\n      method.kind = \"method\";\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (method.key.type === \"PrivateName\") {\n        this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAsync);\n        }\n\n        this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);\n      }\n    } else if (isSimple && (key.name === \"get\" || key.name === \"set\") && !containsEsc && !(this.match(types.star) && this.isLineTerminator())) {\n      method.kind = key.name;\n      this.parseClassElementName(publicMethod);\n\n      if (method.key.type === \"PrivateName\") {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAccessor);\n        }\n\n        this.pushClassMethod(classBody, publicMethod, false, false, false, false);\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (this.isLineTerminator()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  parseClassElementName(member) {\n    const key = this.parsePropertyName(member, true);\n\n    if (!member.computed && member.static && (key.name === \"prototype\" || key.value === \"prototype\")) {\n      this.raise(key.start, ErrorMessages.StaticPrototype);\n    }\n\n    if (key.type === \"PrivateName\" && key.id.name === \"constructor\") {\n      this.raise(key.start, ErrorMessages.ConstructorClassPrivateField);\n    }\n\n    return key;\n  }\n\n  parseClassStaticBlock(classBody, member, state) {\n    var _member$decorators;\n\n    this.expectPlugin(\"classStaticBlock\", member.start);\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    this.prodParam.enter(PARAM);\n    const body = member.body = [];\n    this.parseBlockOrModuleBlockBody(body, undefined, false, types.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode(member, \"StaticBlock\"));\n\n    if (state.hadStaticBlock) {\n      this.raise(member.start, ErrorMessages.DuplicateStaticBlock);\n    }\n\n    if ((_member$decorators = member.decorators) == null ? void 0 : _member$decorators.length) {\n      this.raise(member.start, ErrorMessages.DecoratorStaticBlock);\n    }\n\n    state.hadStaticBlock = true;\n  }\n\n  pushClassProperty(classBody, prop) {\n    if (!prop.computed && (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")) {\n      this.raise(prop.key.start, ErrorMessages.ConstructorClassField);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(classBody, prop) {\n    this.expectPlugin(\"classPrivateProperties\", prop.key.start);\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n    this.classScope.declarePrivateName(node.key.id.name, CLASS_ELEMENT_OTHER, node.key.start);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true));\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    this.expectPlugin(\"classPrivateMethods\", method.key.start);\n    const node = this.parseMethod(method, isGenerator, isAsync, false, false, \"ClassPrivateMethod\", true);\n    classBody.body.push(node);\n    const kind = node.kind === \"get\" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === \"set\" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;\n    this.classScope.declarePrivateName(node.key.id.name, kind, node.key.start);\n  }\n\n  parsePostMemberNameModifiers(methodOrProp) {}\n\n  parseClassPrivateProperty(node) {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.prodParam.enter(PARAM);\n    node.value = this.eat(types.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.semicolon();\n    this.prodParam.exit();\n    this.scope.exit();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  parseClassProperty(node) {\n    if (!node.typeAnnotation) {\n      this.expectPlugin(\"classProperties\");\n    }\n\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.prodParam.enter(PARAM);\n\n    if (this.match(types.eq)) {\n      this.expectPlugin(\"classProperties\");\n      this.next();\n      node.value = this.parseMaybeAssignAllowIn();\n    } else {\n      node.value = null;\n    }\n\n    this.semicolon();\n    this.prodParam.exit();\n    this.scope.exit();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {\n    if (this.match(types.name)) {\n      node.id = this.parseIdentifier();\n\n      if (isStatement) {\n        this.checkLVal(node.id, bindingType, undefined, \"class name\");\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        this.unexpected(null, ErrorMessages.MissingClassName);\n      }\n    }\n  }\n\n  parseClassSuper(node) {\n    node.superClass = this.eat(types._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  parseExport(node) {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n    const parseAfterDefault = !hasDefault || this.eat(types.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(types.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      this.parseExportFrom(node, true);\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers || hasNamespace && parseAfterNamespace && !hasSpecifiers) {\n      throw this.unexpected(null, types.braceL);\n    }\n\n    let hasDeclaration;\n\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      this.parseExportFrom(node, isFromRequired);\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(node);\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      this.checkExport(node, true, false, !!node.source);\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(types._default)) {\n      node.declaration = this.parseExportDefaultExpression();\n      this.checkExport(node, true, true);\n      return this.finishNode(node, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, types.braceL);\n  }\n\n  eatExportStar(node) {\n    return this.eat(types.star);\n  }\n\n  maybeParseExportDefaultSpecifier(node) {\n    if (this.isExportDefaultSpecifier()) {\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node) {\n    if (this.isContextual(\"as\")) {\n      if (!node.specifiers) node.specifiers = [];\n      const specifier = this.startNodeAt(this.state.lastTokStart, this.state.lastTokStartLoc);\n      this.next();\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(this.finishNode(specifier, \"ExportNamespaceSpecifier\"));\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(node) {\n    if (this.match(types.braceL)) {\n      if (!node.specifiers) node.specifiers = [];\n      node.specifiers.push(...this.parseExportSpecifiers());\n      node.source = null;\n      node.declaration = null;\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportDeclaration(node) {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n\n    return false;\n  }\n\n  isAsyncFunction() {\n    if (!this.isContextual(\"async\")) return false;\n    const next = this.nextTokenStart();\n    return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression() {\n    const expr = this.startNode();\n    const isAsync = this.isAsyncFunction();\n\n    if (this.match(types._function) || isAsync) {\n      this.next();\n\n      if (isAsync) {\n        this.next();\n      }\n\n      return this.parseFunction(expr, FUNC_STATEMENT | FUNC_NULLABLE_ID, isAsync);\n    } else if (this.match(types._class)) {\n      return this.parseClass(expr, true, true);\n    } else if (this.match(types.at)) {\n      if (this.hasPlugin(\"decorators\") && this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n        this.raise(this.state.start, ErrorMessages.DecoratorBeforeExport);\n      }\n\n      this.parseDecorators(false);\n      return this.parseClass(expr, true, true);\n    } else if (this.match(types._const) || this.match(types._var) || this.isLet()) {\n      throw this.raise(this.state.start, ErrorMessages.UnsupportedDefaultExport);\n    } else {\n      const res = this.parseMaybeAssignAllowIn();\n      this.semicolon();\n      return res;\n    }\n  }\n\n  parseExportDeclaration(node) {\n    return this.parseStatement(null);\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.match(types.name)) {\n      const value = this.state.value;\n\n      if (value === \"async\" && !this.state.containsEsc || value === \"let\") {\n        return false;\n      }\n\n      if ((value === \"type\" || value === \"interface\") && !this.state.containsEsc) {\n        const l = this.lookahead();\n\n        if (l.type === types.name && l.value !== \"from\" || l.type === types.braceL) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(types._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n\n    if (this.input.charCodeAt(next) === 44 || this.match(types.name) && hasFrom) {\n      return true;\n    }\n\n    if (this.match(types._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));\n      return nextAfterFrom === 34 || nextAfterFrom === 39;\n    }\n\n    return false;\n  }\n\n  parseExportFrom(node, expect) {\n    if (this.eatContextual(\"from\")) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n    } else {\n      if (expect) {\n        this.unexpected();\n      } else {\n        node.source = null;\n      }\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration() {\n    if (this.match(types.at)) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n          this.unexpected(this.state.start, ErrorMessages.DecoratorBeforeExport);\n        } else {\n          return true;\n        }\n      }\n    }\n\n    return this.state.type.keyword === \"var\" || this.state.type.keyword === \"const\" || this.state.type.keyword === \"function\" || this.state.type.keyword === \"class\" || this.isLet() || this.isAsyncFunction();\n  }\n\n  checkExport(node, checkNames, isDefault, isFrom) {\n    if (checkNames) {\n      if (isDefault) {\n        this.checkDuplicateExports(node, \"default\");\n\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          var _declaration$extra;\n\n          const declaration = node.declaration;\n\n          if (declaration.type === \"Identifier\" && declaration.name === \"from\" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) == null ? void 0 : _declaration$extra.parenthesized)) {\n            this.raise(declaration.start, ErrorMessages.ExportDefaultFromAsIdentifier);\n          }\n        }\n      } else if (node.specifiers && node.specifiers.length) {\n        for (let _i4 = 0, _node$specifiers = node.specifiers; _i4 < _node$specifiers.length; _i4++) {\n          const specifier = _node$specifiers[_i4];\n          const {\n            exported\n          } = specifier;\n          const exportedName = exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportedName);\n\n          if (!isFrom && specifier.local) {\n            const {\n              local\n            } = specifier;\n\n            if (local.type === \"StringLiteral\") {\n              this.raise(specifier.start, ErrorMessages.ExportBindingIsString, local.extra.raw, exportedName);\n            } else {\n              this.checkReservedWord(local.name, local.start, true, false);\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        if (node.declaration.type === \"FunctionDeclaration\" || node.declaration.type === \"ClassDeclaration\") {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (let _i5 = 0, _node$declaration$dec = node.declaration.declarations; _i5 < _node$declaration$dec.length; _i5++) {\n            const declaration = _node$declaration$dec[_i5];\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n\n    const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    if (currentContextDecorators.length) {\n      throw this.raise(node.start, ErrorMessages.UnsupportedDecoratorExport);\n    }\n  }\n\n  checkDeclaration(node) {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (let _i6 = 0, _node$properties = node.properties; _i6 < _node$properties.length; _i6++) {\n        const prop = _node$properties[_i6];\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (let _i7 = 0, _node$elements = node.elements; _i7 < _node$elements.length; _i7++) {\n        const elem = _node$elements[_i7];\n\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(node, name) {\n    if (this.state.exportedIdentifiers.indexOf(name) > -1) {\n      this.raise(node.start, name === \"default\" ? ErrorMessages.DuplicateDefaultExport : ErrorMessages.DuplicateExport, name);\n    }\n\n    this.state.exportedIdentifiers.push(name);\n  }\n\n  parseExportSpecifiers() {\n    const nodes = [];\n    let first = true;\n    this.expect(types.braceL);\n\n    while (!this.eat(types.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(types.comma);\n        if (this.eat(types.braceR)) break;\n      }\n\n      const node = this.startNode();\n      node.local = this.parseModuleExportName();\n      node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local.__clone();\n      nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n    }\n\n    return nodes;\n  }\n\n  parseModuleExportName() {\n    if (this.match(types.string)) {\n      this.expectPlugin(\"moduleStringNames\");\n      const result = this.parseLiteral(this.state.value, \"StringLiteral\");\n      const surrogate = result.value.match(loneSurrogate);\n\n      if (surrogate) {\n        this.raise(result.start, ErrorMessages.ModuleExportNameHasLoneSurrogate, surrogate[0].charCodeAt(0).toString(16));\n      }\n\n      return result;\n    }\n\n    return this.parseIdentifier(true);\n  }\n\n  parseImport(node) {\n    node.specifiers = [];\n\n    if (!this.match(types.string)) {\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      const parseNext = !hasDefault || this.eat(types.comma);\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(\"from\");\n    }\n\n    node.source = this.parseImportSource();\n    const assertions = this.maybeParseImportAssertions();\n\n    if (assertions) {\n      node.assertions = assertions;\n    } else {\n        const attributes = this.maybeParseModuleAttributes();\n\n        if (attributes) {\n          node.attributes = attributes;\n        }\n      }\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource() {\n    if (!this.match(types.string)) this.unexpected();\n    return this.parseExprAtom();\n  }\n\n  shouldParseDefaultImport(node) {\n    return this.match(types.name);\n  }\n\n  parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n    specifier.local = this.parseIdentifier();\n    this.checkLVal(specifier.local, BIND_LEXICAL, undefined, contextDescription);\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  parseAssertEntries() {\n    this.expectPlugin(\"importAssertions\");\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(types.braceR)) {\n        break;\n      }\n\n      const node = this.startNode();\n      let assertionKeyNode;\n\n      if (this.match(types.string)) {\n        assertionKeyNode = this.parseLiteral(this.state.value, \"StringLiteral\");\n      } else {\n        assertionKeyNode = this.parseIdentifier(true);\n      }\n\n      this.next();\n      node.key = assertionKeyNode;\n\n      if (node.key.name !== \"type\") {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributeDifferentFromType, node.key.name);\n      }\n\n      if (attrNames.has(node.key.name)) {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, node.key.name);\n      }\n\n      attrNames.add(node.key.name);\n\n      if (!this.match(types.string)) {\n        throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n      }\n\n      node.value = this.parseLiteral(this.state.value, \"StringLiteral\");\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(types.comma));\n\n    return attrs;\n  }\n\n  maybeParseModuleAttributes() {\n    if (this.match(types._with) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n\n    const attrs = [];\n    const attributes = new Set();\n\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributeDifferentFromType, node.key.name);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, node.key.name);\n      }\n\n      attributes.add(node.key.name);\n      this.expect(types.colon);\n\n      if (!this.match(types.string)) {\n        throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n      }\n\n      node.value = this.parseLiteral(this.state.value, \"StringLiteral\");\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(types.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAssertions() {\n    if (this.match(types.name) && this.state.value === \"assert\" && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"importAssertions\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n\n    this.eat(types.braceL);\n    const attrs = this.parseAssertEntries();\n    this.eat(types.braceR);\n    return attrs;\n  }\n\n  maybeParseDefaultImportSpecifier(node) {\n    if (this.shouldParseDefaultImport(node)) {\n      this.parseImportSpecifierLocal(node, this.startNode(), \"ImportDefaultSpecifier\", \"default import specifier\");\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node) {\n    if (this.match(types.star)) {\n      const specifier = this.startNode();\n      this.next();\n      this.expectContextual(\"as\");\n      this.parseImportSpecifierLocal(node, specifier, \"ImportNamespaceSpecifier\", \"import namespace specifier\");\n      return true;\n    }\n\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node) {\n    let first = true;\n    this.expect(types.braceL);\n\n    while (!this.eat(types.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        if (this.eat(types.colon)) {\n          throw this.raise(this.state.start, ErrorMessages.DestructureNamedImport);\n        }\n\n        this.expect(types.comma);\n        if (this.eat(types.braceR)) break;\n      }\n\n      this.parseImportSpecifier(node);\n    }\n  }\n\n  parseImportSpecifier(node) {\n    const specifier = this.startNode();\n    specifier.imported = this.parseModuleExportName();\n\n    if (this.eatContextual(\"as\")) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const {\n        imported\n      } = specifier;\n\n      if (imported.type === \"StringLiteral\") {\n        throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, imported.value);\n      }\n\n      this.checkReservedWord(imported.name, specifier.start, true, true);\n      specifier.local = imported.__clone();\n    }\n\n    this.checkLVal(specifier.local, BIND_LEXICAL, undefined, \"import specifier\");\n    node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n  }\n\n}\n\nclass ClassScope {\n  constructor() {\n    this.privateNames = new Set();\n    this.loneAccessors = new Map();\n    this.undefinedPrivateNames = new Map();\n  }\n\n}\nclass ClassScopeHandler {\n  constructor(raise) {\n    this.stack = [];\n    this.raise = void 0;\n    this.undefinedPrivateNames = new Map();\n    this.raise = raise;\n  }\n\n  current() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n    const current = this.current();\n\n    for (let _i = 0, _Array$from = Array.from(oldClassScope.undefinedPrivateNames); _i < _Array$from.length; _i++) {\n      const [name, pos] = _Array$from[_i];\n\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, pos);\n        }\n      } else {\n        this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n      }\n    }\n  }\n\n  declarePrivateName(name, elementType, pos) {\n    const classScope = this.current();\n    let redefined = classScope.privateNames.has(name);\n\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && classScope.loneAccessors.get(name);\n\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n        if (!redefined) classScope.loneAccessors.delete(name);\n      } else if (!redefined) {\n        classScope.loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.raise(pos, ErrorMessages.PrivateNameRedeclaration, name);\n    }\n\n    classScope.privateNames.add(name);\n    classScope.undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name, pos) {\n    let classScope;\n\n    for (let _i2 = 0, _this$stack = this.stack; _i2 < _this$stack.length; _i2++) {\n      classScope = _this$stack[_i2];\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, pos);\n    } else {\n      this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n    }\n  }\n\n}\n\nclass Parser extends StatementParser {\n  constructor(options, input) {\n    options = getOptions(options);\n    super(options, input);\n    const ScopeHandler = this.getScopeHandler();\n    this.options = options;\n    this.inModule = this.options.sourceType === \"module\";\n    this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n    this.prodParam = new ProductionParameterHandler();\n    this.classScope = new ClassScopeHandler(this.raise.bind(this));\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n\n  getScopeHandler() {\n    return ScopeHandler;\n  }\n\n  parse() {\n    let paramFlags = PARAM;\n\n    if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n    const file = this.startNode();\n    const program = this.startNode();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n\n}\n\nfunction pluginsMap(plugins) {\n  const pluginMap = new Map();\n\n  for (let _i = 0; _i < plugins.length; _i++) {\n    const plugin = plugins[_i];\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n\n  return pluginMap;\n}\n\nfunction parse(input, options) {\n  var _options;\n\n  if (((_options = options) == null ? void 0 : _options.sourceType) === \"unambiguous\") {\n    options = Object.assign({}, options);\n\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch (_unused) {}\n      } else {\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch (_unused2) {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\nfunction parseExpression(input, options) {\n  const parser = getParser(options, input);\n\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n\n  return parser.getExpression();\n}\n\nfunction getParser(options, input) {\n  let cls = Parser;\n\n  if (options == null ? void 0 : options.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n\n  return new cls(options, input);\n}\n\nconst parserClassCache = {};\n\nfunction getParserClass(pluginsFromOptions) {\n  const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n\n  if (!cls) {\n    cls = Parser;\n\n    for (let _i = 0; _i < pluginList.length; _i++) {\n      const plugin = pluginList[_i];\n      cls = mixinPlugins[plugin](cls);\n    }\n\n    parserClassCache[key] = cls;\n  }\n\n  return cls;\n}\n\nexports.parse = parse;\nexports.parseExpression = parseExpression;\nexports.tokTypes = types;\n//# sourceMappingURL=index.js.map\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = shallowEqual;\n\nfunction shallowEqual(actual, expected) {\n  const keys = Object.keys(expected);\n\n  for (const key of keys) {\n    if (actual[key] !== expected[key]) {\n      return false;\n    }\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isArrayExpression = isArrayExpression;\nexports.isAssignmentExpression = isAssignmentExpression;\nexports.isBinaryExpression = isBinaryExpression;\nexports.isInterpreterDirective = isInterpreterDirective;\nexports.isDirective = isDirective;\nexports.isDirectiveLiteral = isDirectiveLiteral;\nexports.isBlockStatement = isBlockStatement;\nexports.isBreakStatement = isBreakStatement;\nexports.isCallExpression = isCallExpression;\nexports.isCatchClause = isCatchClause;\nexports.isConditionalExpression = isConditionalExpression;\nexports.isContinueStatement = isContinueStatement;\nexports.isDebuggerStatement = isDebuggerStatement;\nexports.isDoWhileStatement = isDoWhileStatement;\nexports.isEmptyStatement = isEmptyStatement;\nexports.isExpressionStatement = isExpressionStatement;\nexports.isFile = isFile;\nexports.isForInStatement = isForInStatement;\nexports.isForStatement = isForStatement;\nexports.isFunctionDeclaration = isFunctionDeclaration;\nexports.isFunctionExpression = isFunctionExpression;\nexports.isIdentifier = isIdentifier;\nexports.isIfStatement = isIfStatement;\nexports.isLabeledStatement = isLabeledStatement;\nexports.isStringLiteral = isStringLiteral;\nexports.isNumericLiteral = isNumericLiteral;\nexports.isNullLiteral = isNullLiteral;\nexports.isBooleanLiteral = isBooleanLiteral;\nexports.isRegExpLiteral = isRegExpLiteral;\nexports.isLogicalExpression = isLogicalExpression;\nexports.isMemberExpression = isMemberExpression;\nexports.isNewExpression = isNewExpression;\nexports.isProgram = isProgram;\nexports.isObjectExpression = isObjectExpression;\nexports.isObjectMethod = isObjectMethod;\nexports.isObjectProperty = isObjectProperty;\nexports.isRestElement = isRestElement;\nexports.isReturnStatement = isReturnStatement;\nexports.isSequenceExpression = isSequenceExpression;\nexports.isParenthesizedExpression = isParenthesizedExpression;\nexports.isSwitchCase = isSwitchCase;\nexports.isSwitchStatement = isSwitchStatement;\nexports.isThisExpression = isThisExpression;\nexports.isThrowStatement = isThrowStatement;\nexports.isTryStatement = isTryStatement;\nexports.isUnaryExpression = isUnaryExpression;\nexports.isUpdateExpression = isUpdateExpression;\nexports.isVariableDeclaration = isVariableDeclaration;\nexports.isVariableDeclarator = isVariableDeclarator;\nexports.isWhileStatement = isWhileStatement;\nexports.isWithStatement = isWithStatement;\nexports.isAssignmentPattern = isAssignmentPattern;\nexports.isArrayPattern = isArrayPattern;\nexports.isArrowFunctionExpression = isArrowFunctionExpression;\nexports.isClassBody = isClassBody;\nexports.isClassExpression = isClassExpression;\nexports.isClassDeclaration = isClassDeclaration;\nexports.isExportAllDeclaration = isExportAllDeclaration;\nexports.isExportDefaultDeclaration = isExportDefaultDeclaration;\nexports.isExportNamedDeclaration = isExportNamedDeclaration;\nexports.isExportSpecifier = isExportSpecifier;\nexports.isForOfStatement = isForOfStatement;\nexports.isImportDeclaration = isImportDeclaration;\nexports.isImportDefaultSpecifier = isImportDefaultSpecifier;\nexports.isImportNamespaceSpecifier = isImportNamespaceSpecifier;\nexports.isImportSpecifier = isImportSpecifier;\nexports.isMetaProperty = isMetaProperty;\nexports.isClassMethod = isClassMethod;\nexports.isObjectPattern = isObjectPattern;\nexports.isSpreadElement = isSpreadElement;\nexports.isSuper = isSuper;\nexports.isTaggedTemplateExpression = isTaggedTemplateExpression;\nexports.isTemplateElement = isTemplateElement;\nexports.isTemplateLiteral = isTemplateLiteral;\nexports.isYieldExpression = isYieldExpression;\nexports.isAwaitExpression = isAwaitExpression;\nexports.isImport = isImport;\nexports.isBigIntLiteral = isBigIntLiteral;\nexports.isExportNamespaceSpecifier = isExportNamespaceSpecifier;\nexports.isOptionalMemberExpression = isOptionalMemberExpression;\nexports.isOptionalCallExpression = isOptionalCallExpression;\nexports.isAnyTypeAnnotation = isAnyTypeAnnotation;\nexports.isArrayTypeAnnotation = isArrayTypeAnnotation;\nexports.isBooleanTypeAnnotation = isBooleanTypeAnnotation;\nexports.isBooleanLiteralTypeAnnotation = isBooleanLiteralTypeAnnotation;\nexports.isNullLiteralTypeAnnotation = isNullLiteralTypeAnnotation;\nexports.isClassImplements = isClassImplements;\nexports.isDeclareClass = isDeclareClass;\nexports.isDeclareFunction = isDeclareFunction;\nexports.isDeclareInterface = isDeclareInterface;\nexports.isDeclareModule = isDeclareModule;\nexports.isDeclareModuleExports = isDeclareModuleExports;\nexports.isDeclareTypeAlias = isDeclareTypeAlias;\nexports.isDeclareOpaqueType = isDeclareOpaqueType;\nexports.isDeclareVariable = isDeclareVariable;\nexports.isDeclareExportDeclaration = isDeclareExportDeclaration;\nexports.isDeclareExportAllDeclaration = isDeclareExportAllDeclaration;\nexports.isDeclaredPredicate = isDeclaredPredicate;\nexports.isExistsTypeAnnotation = isExistsTypeAnnotation;\nexports.isFunctionTypeAnnotation = isFunctionTypeAnnotation;\nexports.isFunctionTypeParam = isFunctionTypeParam;\nexports.isGenericTypeAnnotation = isGenericTypeAnnotation;\nexports.isInferredPredicate = isInferredPredicate;\nexports.isInterfaceExtends = isInterfaceExtends;\nexports.isInterfaceDeclaration = isInterfaceDeclaration;\nexports.isInterfaceTypeAnnotation = isInterfaceTypeAnnotation;\nexports.isIntersectionTypeAnnotation = isIntersectionTypeAnnotation;\nexports.isMixedTypeAnnotation = isMixedTypeAnnotation;\nexports.isEmptyTypeAnnotation = isEmptyTypeAnnotation;\nexports.isNullableTypeAnnotation = isNullableTypeAnnotation;\nexports.isNumberLiteralTypeAnnotation = isNumberLiteralTypeAnnotation;\nexports.isNumberTypeAnnotation = isNumberTypeAnnotation;\nexports.isObjectTypeAnnotation = isObjectTypeAnnotation;\nexports.isObjectTypeInternalSlot = isObjectTypeInternalSlot;\nexports.isObjectTypeCallProperty = isObjectTypeCallProperty;\nexports.isObjectTypeIndexer = isObjectTypeIndexer;\nexports.isObjectTypeProperty = isObjectTypeProperty;\nexports.isObjectTypeSpreadProperty = isObjectTypeSpreadProperty;\nexports.isOpaqueType = isOpaqueType;\nexports.isQualifiedTypeIdentifier = isQualifiedTypeIdentifier;\nexports.isStringLiteralTypeAnnotation = isStringLiteralTypeAnnotation;\nexports.isStringTypeAnnotation = isStringTypeAnnotation;\nexports.isSymbolTypeAnnotation = isSymbolTypeAnnotation;\nexports.isThisTypeAnnotation = isThisTypeAnnotation;\nexports.isTupleTypeAnnotation = isTupleTypeAnnotation;\nexports.isTypeofTypeAnnotation = isTypeofTypeAnnotation;\nexports.isTypeAlias = isTypeAlias;\nexports.isTypeAnnotation = isTypeAnnotation;\nexports.isTypeCastExpression = isTypeCastExpression;\nexports.isTypeParameter = isTypeParameter;\nexports.isTypeParameterDeclaration = isTypeParameterDeclaration;\nexports.isTypeParameterInstantiation = isTypeParameterInstantiation;\nexports.isUnionTypeAnnotation = isUnionTypeAnnotation;\nexports.isVariance = isVariance;\nexports.isVoidTypeAnnotation = isVoidTypeAnnotation;\nexports.isEnumDeclaration = isEnumDeclaration;\nexports.isEnumBooleanBody = isEnumBooleanBody;\nexports.isEnumNumberBody = isEnumNumberBody;\nexports.isEnumStringBody = isEnumStringBody;\nexports.isEnumSymbolBody = isEnumSymbolBody;\nexports.isEnumBooleanMember = isEnumBooleanMember;\nexports.isEnumNumberMember = isEnumNumberMember;\nexports.isEnumStringMember = isEnumStringMember;\nexports.isEnumDefaultedMember = isEnumDefaultedMember;\nexports.isJSXAttribute = isJSXAttribute;\nexports.isJSXClosingElement = isJSXClosingElement;\nexports.isJSXElement = isJSXElement;\nexports.isJSXEmptyExpression = isJSXEmptyExpression;\nexports.isJSXExpressionContainer = isJSXExpressionContainer;\nexports.isJSXSpreadChild = isJSXSpreadChild;\nexports.isJSXIdentifier = isJSXIdentifier;\nexports.isJSXMemberExpression = isJSXMemberExpression;\nexports.isJSXNamespacedName = isJSXNamespacedName;\nexports.isJSXOpeningElement = isJSXOpeningElement;\nexports.isJSXSpreadAttribute = isJSXSpreadAttribute;\nexports.isJSXText = isJSXText;\nexports.isJSXFragment = isJSXFragment;\nexports.isJSXOpeningFragment = isJSXOpeningFragment;\nexports.isJSXClosingFragment = isJSXClosingFragment;\nexports.isNoop = isNoop;\nexports.isPlaceholder = isPlaceholder;\nexports.isV8IntrinsicIdentifier = isV8IntrinsicIdentifier;\nexports.isArgumentPlaceholder = isArgumentPlaceholder;\nexports.isBindExpression = isBindExpression;\nexports.isClassProperty = isClassProperty;\nexports.isPipelineTopicExpression = isPipelineTopicExpression;\nexports.isPipelineBareFunction = isPipelineBareFunction;\nexports.isPipelinePrimaryTopicReference = isPipelinePrimaryTopicReference;\nexports.isClassPrivateProperty = isClassPrivateProperty;\nexports.isClassPrivateMethod = isClassPrivateMethod;\nexports.isImportAttribute = isImportAttribute;\nexports.isDecorator = isDecorator;\nexports.isDoExpression = isDoExpression;\nexports.isExportDefaultSpecifier = isExportDefaultSpecifier;\nexports.isPrivateName = isPrivateName;\nexports.isRecordExpression = isRecordExpression;\nexports.isTupleExpression = isTupleExpression;\nexports.isDecimalLiteral = isDecimalLiteral;\nexports.isStaticBlock = isStaticBlock;\nexports.isTSParameterProperty = isTSParameterProperty;\nexports.isTSDeclareFunction = isTSDeclareFunction;\nexports.isTSDeclareMethod = isTSDeclareMethod;\nexports.isTSQualifiedName = isTSQualifiedName;\nexports.isTSCallSignatureDeclaration = isTSCallSignatureDeclaration;\nexports.isTSConstructSignatureDeclaration = isTSConstructSignatureDeclaration;\nexports.isTSPropertySignature = isTSPropertySignature;\nexports.isTSMethodSignature = isTSMethodSignature;\nexports.isTSIndexSignature = isTSIndexSignature;\nexports.isTSAnyKeyword = isTSAnyKeyword;\nexports.isTSBooleanKeyword = isTSBooleanKeyword;\nexports.isTSBigIntKeyword = isTSBigIntKeyword;\nexports.isTSIntrinsicKeyword = isTSIntrinsicKeyword;\nexports.isTSNeverKeyword = isTSNeverKeyword;\nexports.isTSNullKeyword = isTSNullKeyword;\nexports.isTSNumberKeyword = isTSNumberKeyword;\nexports.isTSObjectKeyword = isTSObjectKeyword;\nexports.isTSStringKeyword = isTSStringKeyword;\nexports.isTSSymbolKeyword = isTSSymbolKeyword;\nexports.isTSUndefinedKeyword = isTSUndefinedKeyword;\nexports.isTSUnknownKeyword = isTSUnknownKeyword;\nexports.isTSVoidKeyword = isTSVoidKeyword;\nexports.isTSThisType = isTSThisType;\nexports.isTSFunctionType = isTSFunctionType;\nexports.isTSConstructorType = isTSConstructorType;\nexports.isTSTypeReference = isTSTypeReference;\nexports.isTSTypePredicate = isTSTypePredicate;\nexports.isTSTypeQuery = isTSTypeQuery;\nexports.isTSTypeLiteral = isTSTypeLiteral;\nexports.isTSArrayType = isTSArrayType;\nexports.isTSTupleType = isTSTupleType;\nexports.isTSOptionalType = isTSOptionalType;\nexports.isTSRestType = isTSRestType;\nexports.isTSNamedTupleMember = isTSNamedTupleMember;\nexports.isTSUnionType = isTSUnionType;\nexports.isTSIntersectionType = isTSIntersectionType;\nexports.isTSConditionalType = isTSConditionalType;\nexports.isTSInferType = isTSInferType;\nexports.isTSParenthesizedType = isTSParenthesizedType;\nexports.isTSTypeOperator = isTSTypeOperator;\nexports.isTSIndexedAccessType = isTSIndexedAccessType;\nexports.isTSMappedType = isTSMappedType;\nexports.isTSLiteralType = isTSLiteralType;\nexports.isTSExpressionWithTypeArguments = isTSExpressionWithTypeArguments;\nexports.isTSInterfaceDeclaration = isTSInterfaceDeclaration;\nexports.isTSInterfaceBody = isTSInterfaceBody;\nexports.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration;\nexports.isTSAsExpression = isTSAsExpression;\nexports.isTSTypeAssertion = isTSTypeAssertion;\nexports.isTSEnumDeclaration = isTSEnumDeclaration;\nexports.isTSEnumMember = isTSEnumMember;\nexports.isTSModuleDeclaration = isTSModuleDeclaration;\nexports.isTSModuleBlock = isTSModuleBlock;\nexports.isTSImportType = isTSImportType;\nexports.isTSImportEqualsDeclaration = isTSImportEqualsDeclaration;\nexports.isTSExternalModuleReference = isTSExternalModuleReference;\nexports.isTSNonNullExpression = isTSNonNullExpression;\nexports.isTSExportAssignment = isTSExportAssignment;\nexports.isTSNamespaceExportDeclaration = isTSNamespaceExportDeclaration;\nexports.isTSTypeAnnotation = isTSTypeAnnotation;\nexports.isTSTypeParameterInstantiation = isTSTypeParameterInstantiation;\nexports.isTSTypeParameterDeclaration = isTSTypeParameterDeclaration;\nexports.isTSTypeParameter = isTSTypeParameter;\nexports.isExpression = isExpression;\nexports.isBinary = isBinary;\nexports.isScopable = isScopable;\nexports.isBlockParent = isBlockParent;\nexports.isBlock = isBlock;\nexports.isStatement = isStatement;\nexports.isTerminatorless = isTerminatorless;\nexports.isCompletionStatement = isCompletionStatement;\nexports.isConditional = isConditional;\nexports.isLoop = isLoop;\nexports.isWhile = isWhile;\nexports.isExpressionWrapper = isExpressionWrapper;\nexports.isFor = isFor;\nexports.isForXStatement = isForXStatement;\nexports.isFunction = isFunction;\nexports.isFunctionParent = isFunctionParent;\nexports.isPureish = isPureish;\nexports.isDeclaration = isDeclaration;\nexports.isPatternLike = isPatternLike;\nexports.isLVal = isLVal;\nexports.isTSEntityName = isTSEntityName;\nexports.isLiteral = isLiteral;\nexports.isImmutable = isImmutable;\nexports.isUserWhitespacable = isUserWhitespacable;\nexports.isMethod = isMethod;\nexports.isObjectMember = isObjectMember;\nexports.isProperty = isProperty;\nexports.isUnaryLike = isUnaryLike;\nexports.isPattern = isPattern;\nexports.isClass = isClass;\nexports.isModuleDeclaration = isModuleDeclaration;\nexports.isExportDeclaration = isExportDeclaration;\nexports.isModuleSpecifier = isModuleSpecifier;\nexports.isFlow = isFlow;\nexports.isFlowType = isFlowType;\nexports.isFlowBaseAnnotation = isFlowBaseAnnotation;\nexports.isFlowDeclaration = isFlowDeclaration;\nexports.isFlowPredicate = isFlowPredicate;\nexports.isEnumBody = isEnumBody;\nexports.isEnumMember = isEnumMember;\nexports.isJSX = isJSX;\nexports.isPrivate = isPrivate;\nexports.isTSTypeElement = isTSTypeElement;\nexports.isTSType = isTSType;\nexports.isTSBaseType = isTSBaseType;\nexports.isNumberLiteral = isNumberLiteral;\nexports.isRegexLiteral = isRegexLiteral;\nexports.isRestProperty = isRestProperty;\nexports.isSpreadProperty = isSpreadProperty;\n\nvar _shallowEqual = _interopRequireDefault(require(\"../../utils/shallowEqual\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isArrayExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrayExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAssignmentExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AssignmentExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBinaryExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BinaryExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterpreterDirective(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterpreterDirective\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDirective(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Directive\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDirectiveLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DirectiveLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBlockStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BlockStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBreakStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BreakStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isCallExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"CallExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isCatchClause(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"CatchClause\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isConditionalExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ConditionalExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isContinueStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ContinueStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDebuggerStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DebuggerStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDoWhileStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DoWhileStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEmptyStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EmptyStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExpressionStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExpressionStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFile(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"File\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForInStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForInStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Identifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isIfStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"IfStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLabeledStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"LabeledStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStringLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StringLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumericLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumericLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNullLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NullLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBooleanLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BooleanLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRegExpLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RegExpLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLogicalExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"LogicalExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMemberExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"MemberExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNewExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NewExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isProgram(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Program\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRestElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RestElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isReturnStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ReturnStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSequenceExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SequenceExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isParenthesizedExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ParenthesizedExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSwitchCase(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SwitchCase\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSwitchStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SwitchStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isThisExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ThisExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isThrowStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ThrowStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTryStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TryStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUnaryExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UnaryExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUpdateExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UpdateExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVariableDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"VariableDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVariableDeclarator(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"VariableDeclarator\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isWhileStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"WhileStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isWithStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"WithStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAssignmentPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AssignmentPattern\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArrayPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrayPattern\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArrowFunctionExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrowFunctionExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportAllDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportAllDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportDefaultDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportDefaultDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportNamedDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportNamedDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForOfStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForOfStatement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportDefaultSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportDefaultSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportNamespaceSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportNamespaceSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMetaProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"MetaProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectPattern\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSpreadElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SpreadElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSuper(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Super\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTaggedTemplateExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TaggedTemplateExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTemplateElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TemplateElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTemplateLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TemplateLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isYieldExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"YieldExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAwaitExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AwaitExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImport(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Import\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBigIntLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BigIntLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportNamespaceSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportNamespaceSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isOptionalMemberExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"OptionalMemberExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isOptionalCallExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"OptionalCallExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isAnyTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"AnyTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArrayTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArrayTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBooleanTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BooleanTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBooleanLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BooleanLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNullLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NullLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassImplements(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassImplements\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareClass(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareClass\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareFunction\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareInterface(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareInterface\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareModule(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareModule\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareModuleExports(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareModuleExports\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareTypeAlias(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareTypeAlias\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareOpaqueType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareOpaqueType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareVariable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareVariable\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareExportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareExportDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclareExportAllDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclareExportAllDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclaredPredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DeclaredPredicate\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExistsTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExistsTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionTypeParam(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionTypeParam\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isGenericTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"GenericTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInferredPredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InferredPredicate\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterfaceExtends(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterfaceExtends\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterfaceDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterfaceDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isInterfaceTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"InterfaceTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isIntersectionTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"IntersectionTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMixedTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"MixedTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEmptyTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EmptyTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNullableTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NullableTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumberLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumberLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumberTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumberTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeInternalSlot(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeInternalSlot\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeCallProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeCallProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeIndexer(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeIndexer\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectTypeSpreadProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectTypeSpreadProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isOpaqueType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"OpaqueType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isQualifiedTypeIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"QualifiedTypeIdentifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStringLiteralTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StringLiteralTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStringTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StringTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSymbolTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SymbolTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isThisTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ThisTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTupleTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TupleTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeofTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeofTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeAlias(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeAlias\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeCastExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeCastExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeParameter(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeParameter\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeParameterDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeParameterDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTypeParameterInstantiation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TypeParameterInstantiation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUnionTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UnionTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVariance(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Variance\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isVoidTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"VoidTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumBooleanBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumBooleanBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumNumberBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumNumberBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumStringBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumStringBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumSymbolBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumSymbolBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumBooleanMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumBooleanMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumNumberMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumNumberMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumStringMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumStringMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumDefaultedMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumDefaultedMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXAttribute(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXAttribute\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXClosingElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXClosingElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXEmptyExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXEmptyExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXExpressionContainer(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXExpressionContainer\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXSpreadChild(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXSpreadChild\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXIdentifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXMemberExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXMemberExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXNamespacedName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXNamespacedName\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXOpeningElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXOpeningElement\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXSpreadAttribute(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXSpreadAttribute\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXText(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXText\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXFragment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXFragment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXOpeningFragment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXOpeningFragment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSXClosingFragment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSXClosingFragment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNoop(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Noop\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPlaceholder(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Placeholder\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isV8IntrinsicIdentifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"V8IntrinsicIdentifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isArgumentPlaceholder(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ArgumentPlaceholder\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBindExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BindExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPipelineTopicExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PipelineTopicExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPipelineBareFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PipelineBareFunction\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPipelinePrimaryTopicReference(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PipelinePrimaryTopicReference\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassPrivateProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassPrivateProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClassPrivateMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ClassPrivateMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImportAttribute(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ImportAttribute\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDecorator(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Decorator\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDoExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DoExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportDefaultSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportDefaultSpecifier\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPrivateName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PrivateName\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRecordExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RecordExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTupleExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TupleExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDecimalLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"DecimalLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStaticBlock(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"StaticBlock\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSParameterProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSParameterProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSDeclareFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSDeclareFunction\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSDeclareMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSDeclareMethod\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSQualifiedName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSQualifiedName\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSCallSignatureDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSCallSignatureDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSConstructSignatureDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSConstructSignatureDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSPropertySignature(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSPropertySignature\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSMethodSignature(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSMethodSignature\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIndexSignature(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIndexSignature\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSAnyKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSAnyKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSBooleanKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSBooleanKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSBigIntKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSBigIntKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIntrinsicKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIntrinsicKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNeverKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNeverKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNullKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNullKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNumberKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNumberKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSObjectKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSObjectKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSStringKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSStringKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSSymbolKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSSymbolKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSUndefinedKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSUndefinedKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSUnknownKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSUnknownKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSVoidKeyword(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSVoidKeyword\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSThisType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSThisType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSFunctionType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSFunctionType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSConstructorType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSConstructorType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeReference(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeReference\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypePredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypePredicate\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeQuery(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeQuery\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSArrayType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSArrayType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTupleType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTupleType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSOptionalType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSOptionalType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSRestType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSRestType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNamedTupleMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNamedTupleMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSUnionType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSUnionType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIntersectionType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIntersectionType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSConditionalType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSConditionalType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSInferType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSInferType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSParenthesizedType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSParenthesizedType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeOperator(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeOperator\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSIndexedAccessType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSIndexedAccessType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSMappedType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSMappedType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSLiteralType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSLiteralType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSExpressionWithTypeArguments(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSExpressionWithTypeArguments\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSInterfaceDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSInterfaceDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSInterfaceBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSInterfaceBody\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeAliasDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeAliasDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSAsExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSAsExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeAssertion(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeAssertion\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSEnumDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSEnumDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSEnumMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSEnumMember\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSModuleDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSModuleDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSModuleBlock(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSModuleBlock\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSImportType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSImportType\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSImportEqualsDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSImportEqualsDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSExternalModuleReference(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSExternalModuleReference\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNonNullExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNonNullExpression\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSExportAssignment(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSExportAssignment\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSNamespaceExportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSNamespaceExportDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeAnnotation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeParameterInstantiation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeParameterInstantiation\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeParameterDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeParameterDeclaration\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeParameter(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeParameter\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExpression(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Expression\" || \"ArrayExpression\" === nodeType || \"AssignmentExpression\" === nodeType || \"BinaryExpression\" === nodeType || \"CallExpression\" === nodeType || \"ConditionalExpression\" === nodeType || \"FunctionExpression\" === nodeType || \"Identifier\" === nodeType || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"LogicalExpression\" === nodeType || \"MemberExpression\" === nodeType || \"NewExpression\" === nodeType || \"ObjectExpression\" === nodeType || \"SequenceExpression\" === nodeType || \"ParenthesizedExpression\" === nodeType || \"ThisExpression\" === nodeType || \"UnaryExpression\" === nodeType || \"UpdateExpression\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassExpression\" === nodeType || \"MetaProperty\" === nodeType || \"Super\" === nodeType || \"TaggedTemplateExpression\" === nodeType || \"TemplateLiteral\" === nodeType || \"YieldExpression\" === nodeType || \"AwaitExpression\" === nodeType || \"Import\" === nodeType || \"BigIntLiteral\" === nodeType || \"OptionalMemberExpression\" === nodeType || \"OptionalCallExpression\" === nodeType || \"TypeCastExpression\" === nodeType || \"JSXElement\" === nodeType || \"JSXFragment\" === nodeType || \"BindExpression\" === nodeType || \"PipelinePrimaryTopicReference\" === nodeType || \"DoExpression\" === nodeType || \"RecordExpression\" === nodeType || \"TupleExpression\" === nodeType || \"DecimalLiteral\" === nodeType || \"TSAsExpression\" === nodeType || \"TSTypeAssertion\" === nodeType || \"TSNonNullExpression\" === nodeType || nodeType === \"Placeholder\" && (\"Expression\" === node.expectedNode || \"Identifier\" === node.expectedNode || \"StringLiteral\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBinary(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Binary\" || \"BinaryExpression\" === nodeType || \"LogicalExpression\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isScopable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Scopable\" || \"BlockStatement\" === nodeType || \"CatchClause\" === nodeType || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"Program\" === nodeType || \"ObjectMethod\" === nodeType || \"SwitchStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassExpression\" === nodeType || \"ClassDeclaration\" === nodeType || \"ForOfStatement\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"StaticBlock\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBlockParent(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"BlockParent\" || \"BlockStatement\" === nodeType || \"CatchClause\" === nodeType || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"Program\" === nodeType || \"ObjectMethod\" === nodeType || \"SwitchStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ForOfStatement\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"StaticBlock\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isBlock(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Block\" || \"BlockStatement\" === nodeType || \"Program\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Statement\" || \"BlockStatement\" === nodeType || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"DebuggerStatement\" === nodeType || \"DoWhileStatement\" === nodeType || \"EmptyStatement\" === nodeType || \"ExpressionStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"IfStatement\" === nodeType || \"LabeledStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"SwitchStatement\" === nodeType || \"ThrowStatement\" === nodeType || \"TryStatement\" === nodeType || \"VariableDeclaration\" === nodeType || \"WhileStatement\" === nodeType || \"WithStatement\" === nodeType || \"ClassDeclaration\" === nodeType || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ForOfStatement\" === nodeType || \"ImportDeclaration\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType || \"EnumDeclaration\" === nodeType || \"TSDeclareFunction\" === nodeType || \"TSInterfaceDeclaration\" === nodeType || \"TSTypeAliasDeclaration\" === nodeType || \"TSEnumDeclaration\" === nodeType || \"TSModuleDeclaration\" === nodeType || \"TSImportEqualsDeclaration\" === nodeType || \"TSExportAssignment\" === nodeType || \"TSNamespaceExportDeclaration\" === nodeType || nodeType === \"Placeholder\" && (\"Statement\" === node.expectedNode || \"Declaration\" === node.expectedNode || \"BlockStatement\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTerminatorless(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Terminatorless\" || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"ThrowStatement\" === nodeType || \"YieldExpression\" === nodeType || \"AwaitExpression\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isCompletionStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"CompletionStatement\" || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"ThrowStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isConditional(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Conditional\" || \"ConditionalExpression\" === nodeType || \"IfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLoop(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Loop\" || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isWhile(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"While\" || \"DoWhileStatement\" === nodeType || \"WhileStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExpressionWrapper(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExpressionWrapper\" || \"ExpressionStatement\" === nodeType || \"ParenthesizedExpression\" === nodeType || \"TypeCastExpression\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFor(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"For\" || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isForXStatement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ForXStatement\" || \"ForInStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunction(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Function\" || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"ObjectMethod\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFunctionParent(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FunctionParent\" || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"ObjectMethod\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPureish(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Pureish\" || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"BigIntLiteral\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Declaration\" || \"FunctionDeclaration\" === nodeType || \"VariableDeclaration\" === nodeType || \"ClassDeclaration\" === nodeType || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ImportDeclaration\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType || \"EnumDeclaration\" === nodeType || \"TSDeclareFunction\" === nodeType || \"TSInterfaceDeclaration\" === nodeType || \"TSTypeAliasDeclaration\" === nodeType || \"TSEnumDeclaration\" === nodeType || \"TSModuleDeclaration\" === nodeType || nodeType === \"Placeholder\" && \"Declaration\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPatternLike(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"PatternLike\" || \"Identifier\" === nodeType || \"RestElement\" === nodeType || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || nodeType === \"Placeholder\" && (\"Pattern\" === node.expectedNode || \"Identifier\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLVal(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"LVal\" || \"Identifier\" === nodeType || \"MemberExpression\" === nodeType || \"RestElement\" === nodeType || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || \"TSParameterProperty\" === nodeType || nodeType === \"Placeholder\" && (\"Pattern\" === node.expectedNode || \"Identifier\" === node.expectedNode)) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSEntityName(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSEntityName\" || \"Identifier\" === nodeType || \"TSQualifiedName\" === nodeType || nodeType === \"Placeholder\" && \"Identifier\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isLiteral(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Literal\" || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"TemplateLiteral\" === nodeType || \"BigIntLiteral\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isImmutable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Immutable\" || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"BigIntLiteral\" === nodeType || \"JSXAttribute\" === nodeType || \"JSXClosingElement\" === nodeType || \"JSXElement\" === nodeType || \"JSXExpressionContainer\" === nodeType || \"JSXSpreadChild\" === nodeType || \"JSXOpeningElement\" === nodeType || \"JSXText\" === nodeType || \"JSXFragment\" === nodeType || \"JSXOpeningFragment\" === nodeType || \"JSXClosingFragment\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUserWhitespacable(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UserWhitespacable\" || \"ObjectMethod\" === nodeType || \"ObjectProperty\" === nodeType || \"ObjectTypeInternalSlot\" === nodeType || \"ObjectTypeCallProperty\" === nodeType || \"ObjectTypeIndexer\" === nodeType || \"ObjectTypeProperty\" === nodeType || \"ObjectTypeSpreadProperty\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isMethod(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Method\" || \"ObjectMethod\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isObjectMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ObjectMember\" || \"ObjectMethod\" === nodeType || \"ObjectProperty\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isProperty(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Property\" || \"ObjectProperty\" === nodeType || \"ClassProperty\" === nodeType || \"ClassPrivateProperty\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isUnaryLike(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"UnaryLike\" || \"UnaryExpression\" === nodeType || \"SpreadElement\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPattern(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Pattern\" || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || nodeType === \"Placeholder\" && \"Pattern\" === node.expectedNode) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isClass(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Class\" || \"ClassExpression\" === nodeType || \"ClassDeclaration\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isModuleDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ModuleDeclaration\" || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ImportDeclaration\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isExportDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ExportDeclaration\" || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isModuleSpecifier(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"ModuleSpecifier\" || \"ExportSpecifier\" === nodeType || \"ImportDefaultSpecifier\" === nodeType || \"ImportNamespaceSpecifier\" === nodeType || \"ImportSpecifier\" === nodeType || \"ExportNamespaceSpecifier\" === nodeType || \"ExportDefaultSpecifier\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlow(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Flow\" || \"AnyTypeAnnotation\" === nodeType || \"ArrayTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"BooleanLiteralTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"ClassImplements\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"DeclaredPredicate\" === nodeType || \"ExistsTypeAnnotation\" === nodeType || \"FunctionTypeAnnotation\" === nodeType || \"FunctionTypeParam\" === nodeType || \"GenericTypeAnnotation\" === nodeType || \"InferredPredicate\" === nodeType || \"InterfaceExtends\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"InterfaceTypeAnnotation\" === nodeType || \"IntersectionTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NullableTypeAnnotation\" === nodeType || \"NumberLiteralTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"ObjectTypeAnnotation\" === nodeType || \"ObjectTypeInternalSlot\" === nodeType || \"ObjectTypeCallProperty\" === nodeType || \"ObjectTypeIndexer\" === nodeType || \"ObjectTypeProperty\" === nodeType || \"ObjectTypeSpreadProperty\" === nodeType || \"OpaqueType\" === nodeType || \"QualifiedTypeIdentifier\" === nodeType || \"StringLiteralTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"TupleTypeAnnotation\" === nodeType || \"TypeofTypeAnnotation\" === nodeType || \"TypeAlias\" === nodeType || \"TypeAnnotation\" === nodeType || \"TypeCastExpression\" === nodeType || \"TypeParameter\" === nodeType || \"TypeParameterDeclaration\" === nodeType || \"TypeParameterInstantiation\" === nodeType || \"UnionTypeAnnotation\" === nodeType || \"Variance\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowType\" || \"AnyTypeAnnotation\" === nodeType || \"ArrayTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"BooleanLiteralTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"ExistsTypeAnnotation\" === nodeType || \"FunctionTypeAnnotation\" === nodeType || \"GenericTypeAnnotation\" === nodeType || \"InterfaceTypeAnnotation\" === nodeType || \"IntersectionTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NullableTypeAnnotation\" === nodeType || \"NumberLiteralTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"ObjectTypeAnnotation\" === nodeType || \"StringLiteralTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"TupleTypeAnnotation\" === nodeType || \"TypeofTypeAnnotation\" === nodeType || \"UnionTypeAnnotation\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowBaseAnnotation(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowBaseAnnotation\" || \"AnyTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowDeclaration(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowDeclaration\" || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isFlowPredicate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"FlowPredicate\" || \"DeclaredPredicate\" === nodeType || \"InferredPredicate\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumBody(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumBody\" || \"EnumBooleanBody\" === nodeType || \"EnumNumberBody\" === nodeType || \"EnumStringBody\" === nodeType || \"EnumSymbolBody\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isEnumMember(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"EnumMember\" || \"EnumBooleanMember\" === nodeType || \"EnumNumberMember\" === nodeType || \"EnumStringMember\" === nodeType || \"EnumDefaultedMember\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isJSX(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"JSX\" || \"JSXAttribute\" === nodeType || \"JSXClosingElement\" === nodeType || \"JSXElement\" === nodeType || \"JSXEmptyExpression\" === nodeType || \"JSXExpressionContainer\" === nodeType || \"JSXSpreadChild\" === nodeType || \"JSXIdentifier\" === nodeType || \"JSXMemberExpression\" === nodeType || \"JSXNamespacedName\" === nodeType || \"JSXOpeningElement\" === nodeType || \"JSXSpreadAttribute\" === nodeType || \"JSXText\" === nodeType || \"JSXFragment\" === nodeType || \"JSXOpeningFragment\" === nodeType || \"JSXClosingFragment\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isPrivate(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"Private\" || \"ClassPrivateProperty\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"PrivateName\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSTypeElement(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSTypeElement\" || \"TSCallSignatureDeclaration\" === nodeType || \"TSConstructSignatureDeclaration\" === nodeType || \"TSPropertySignature\" === nodeType || \"TSMethodSignature\" === nodeType || \"TSIndexSignature\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSType\" || \"TSAnyKeyword\" === nodeType || \"TSBooleanKeyword\" === nodeType || \"TSBigIntKeyword\" === nodeType || \"TSIntrinsicKeyword\" === nodeType || \"TSNeverKeyword\" === nodeType || \"TSNullKeyword\" === nodeType || \"TSNumberKeyword\" === nodeType || \"TSObjectKeyword\" === nodeType || \"TSStringKeyword\" === nodeType || \"TSSymbolKeyword\" === nodeType || \"TSUndefinedKeyword\" === nodeType || \"TSUnknownKeyword\" === nodeType || \"TSVoidKeyword\" === nodeType || \"TSThisType\" === nodeType || \"TSFunctionType\" === nodeType || \"TSConstructorType\" === nodeType || \"TSTypeReference\" === nodeType || \"TSTypePredicate\" === nodeType || \"TSTypeQuery\" === nodeType || \"TSTypeLiteral\" === nodeType || \"TSArrayType\" === nodeType || \"TSTupleType\" === nodeType || \"TSOptionalType\" === nodeType || \"TSRestType\" === nodeType || \"TSUnionType\" === nodeType || \"TSIntersectionType\" === nodeType || \"TSConditionalType\" === nodeType || \"TSInferType\" === nodeType || \"TSParenthesizedType\" === nodeType || \"TSTypeOperator\" === nodeType || \"TSIndexedAccessType\" === nodeType || \"TSMappedType\" === nodeType || \"TSLiteralType\" === nodeType || \"TSExpressionWithTypeArguments\" === nodeType || \"TSImportType\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isTSBaseType(node, opts) {\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"TSBaseType\" || \"TSAnyKeyword\" === nodeType || \"TSBooleanKeyword\" === nodeType || \"TSBigIntKeyword\" === nodeType || \"TSIntrinsicKeyword\" === nodeType || \"TSNeverKeyword\" === nodeType || \"TSNullKeyword\" === nodeType || \"TSNumberKeyword\" === nodeType || \"TSObjectKeyword\" === nodeType || \"TSStringKeyword\" === nodeType || \"TSSymbolKeyword\" === nodeType || \"TSUndefinedKeyword\" === nodeType || \"TSUnknownKeyword\" === nodeType || \"TSVoidKeyword\" === nodeType || \"TSThisType\" === nodeType || \"TSLiteralType\" === nodeType) {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isNumberLiteral(node, opts) {\n  console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"NumberLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRegexLiteral(node, opts) {\n  console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RegexLiteral\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isRestProperty(node, opts) {\n  console.trace(\"The node type RestProperty has been renamed to RestElement\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"RestProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}\n\nfunction isSpreadProperty(node, opts) {\n  console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n  if (!node) return false;\n  const nodeType = node.type;\n\n  if (nodeType === \"SpreadProperty\") {\n    if (typeof opts === \"undefined\") {\n      return true;\n    } else {\n      return (0, _shallowEqual.default)(node, opts);\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = matchesPattern;\n\nvar _generated = require(\"./generated\");\n\nfunction matchesPattern(member, match, allowPartial) {\n  if (!(0, _generated.isMemberExpression)(member)) return false;\n  const parts = Array.isArray(match) ? match : match.split(\".\");\n  const nodes = [];\n  let node;\n\n  for (node = member; (0, _generated.isMemberExpression)(node); node = node.object) {\n    nodes.push(node.property);\n  }\n\n  nodes.push(node);\n  if (nodes.length < parts.length) return false;\n  if (!allowPartial && nodes.length > parts.length) return false;\n\n  for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {\n    const node = nodes[j];\n    let value;\n\n    if ((0, _generated.isIdentifier)(node)) {\n      value = node.name;\n    } else if ((0, _generated.isStringLiteral)(node)) {\n      value = node.value;\n    } else {\n      return false;\n    }\n\n    if (parts[i] !== value) return false;\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = buildMatchMemberExpression;\n\nvar _matchesPattern = _interopRequireDefault(require(\"./matchesPattern\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction buildMatchMemberExpression(match, allowPartial) {\n  const parts = match.split(\".\");\n  return member => (0, _matchesPattern.default)(member, parts, allowPartial);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _buildMatchMemberExpression = _interopRequireDefault(require(\"../buildMatchMemberExpression\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst isReactComponent = (0, _buildMatchMemberExpression.default)(\"React.Component\");\nvar _default = isReactComponent;\nexports.default = _default;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isCompatTag;\n\nfunction isCompatTag(tagName) {\n  return !!tagName && /^[a-z]/.test(tagName);\n}", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n", "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", "var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n", "var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n", "var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n", "var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n", "var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n", "var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n", "var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n", "var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n", "var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n", "var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n", "var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n", "var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n", "var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n", "var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n", "var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n", "'use strict';\n\nlet fastProto = null;\n\n// Creates an object with permanently fast properties in V8. See Toon Verwaest's\n// post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62\n// for more details. Use %HasFastProperties(object) and the Node.js flag\n// --allow-natives-syntax to check whether an object has fast properties.\nfunction FastObject(o) {\n\t// A prototype object will have \"fast properties\" enabled once it is checked\n\t// against the inline property cache of a function, e.g. fastProto.property:\n\t// https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63\n\tif (fastProto !== null && typeof fastProto.property) {\n\t\tconst result = fastProto;\n\t\tfastProto = FastObject.prototype = null;\n\t\treturn result;\n\t}\n\tfastProto = FastObject.prototype = o == null ? Object.create(null) : o;\n\treturn new FastObject;\n}\n\n// Initialize the inline property cache of FastObject\nFastObject();\n\nmodule.exports = function toFastproperties(o) {\n\treturn FastObject(o);\n};\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isType;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isType(nodeType, targetType) {\n  if (nodeType === targetType) return true;\n  if (_definitions.ALIAS_KEYS[targetType]) return false;\n  const aliases = _definitions.FLIPPED_ALIAS_KEYS[targetType];\n\n  if (aliases) {\n    if (aliases[0] === nodeType) return true;\n\n    for (const alias of aliases) {\n      if (nodeType === alias) return true;\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPlaceholderType;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isPlaceholderType(placeholderType, targetType) {\n  if (placeholderType === targetType) return true;\n  const aliases = _definitions.PLACEHOLDERS_ALIAS[placeholderType];\n\n  if (aliases) {\n    for (const alias of aliases) {\n      if (targetType === alias) return true;\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = is;\n\nvar _shallowEqual = _interopRequireDefault(require(\"../utils/shallowEqual\"));\n\nvar _isType = _interopRequireDefault(require(\"./isType\"));\n\nvar _isPlaceholderType = _interopRequireDefault(require(\"./isPlaceholderType\"));\n\nvar _definitions = require(\"../definitions\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction is(type, node, opts) {\n  if (!node) return false;\n  const matches = (0, _isType.default)(node.type, type);\n\n  if (!matches) {\n    if (!opts && node.type === \"Placeholder\" && type in _definitions.FLIPPED_ALIAS_KEYS) {\n      return (0, _isPlaceholderType.default)(node.expectedNode, type);\n    }\n\n    return false;\n  }\n\n  if (typeof opts === \"undefined\") {\n    return true;\n  } else {\n    return (0, _shallowEqual.default)(node, opts);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isIdentifierStart = isIdentifierStart;\nexports.isIdentifierChar = isIdentifierChar;\nexports.isIdentifierName = isIdentifierName;\nlet 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\\u08a0-\\u08b4\\u08b6-\\u08c7\\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\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\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-\\u170c\\u170e-\\u1711\\u1720-\\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-\\u1b4b\\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-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\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-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\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\";\nlet 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\\u08d3-\\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\\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\\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-\\u0ecd\\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-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\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-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\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\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst 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, 157, 310, 10, 21, 11, 7, 153, 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, 107, 20, 28, 22, 13, 52, 76, 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, 85, 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, 230, 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, 35, 56, 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, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 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, 8952, 286, 50, 2, 18, 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, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 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, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];\nconst 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, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 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, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 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, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n\n  return false;\n}\n\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nfunction isIdentifierName(name) {\n  let isFirst = true;\n\n  for (let _i = 0, _Array$from = Array.from(name); _i < _Array$from.length; _i++) {\n    const char = _Array$from[_i];\n    const cp = char.codePointAt(0);\n\n    if (isFirst) {\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n\n      isFirst = false;\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n\n  return !isFirst;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isReservedWord = isReservedWord;\nexports.isStrictReservedWord = isStrictReservedWord;\nexports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;\nexports.isStrictBindReservedWord = isStrictBindReservedWord;\nexports.isKeyword = isKeyword;\nconst reservedWords = {\n  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\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\n\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\n\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\n\nfunction isKeyword(word) {\n  return keywords.has(word);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"isIdentifierName\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierName;\n  }\n});\nObject.defineProperty(exports, \"isIdentifierChar\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierChar;\n  }\n});\nObject.defineProperty(exports, \"isIdentifierStart\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierStart;\n  }\n});\nObject.defineProperty(exports, \"isReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictBindOnlyReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictBindOnlyReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictBindReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictBindReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isKeyword\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isKeyword;\n  }\n});\n\nvar _identifier = require(\"./identifier\");\n\nvar _keyword = require(\"./keyword\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isValidIdentifier;\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nfunction isValidIdentifier(name, reserved = true) {\n  if (typeof name !== \"string\") return false;\n\n  if (reserved) {\n    if ((0, _helperValidatorIdentifier.isKeyword)(name) || (0, _helperValidatorIdentifier.isStrictReservedWord)(name)) {\n      return false;\n    } else if (name === \"await\") {\n      return false;\n    }\n  }\n\n  return (0, _helperValidatorIdentifier.isIdentifierName)(name);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.ASSIGNMENT_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = void 0;\nconst STATEMENT_OR_BLOCK_KEYS = [\"consequent\", \"body\", \"alternate\"];\nexports.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS;\nconst FLATTENABLE_KEYS = [\"body\", \"expressions\"];\nexports.FLATTENABLE_KEYS = FLATTENABLE_KEYS;\nconst FOR_INIT_KEYS = [\"left\", \"init\"];\nexports.FOR_INIT_KEYS = FOR_INIT_KEYS;\nconst COMMENT_KEYS = [\"leadingComments\", \"trailingComments\", \"innerComments\"];\nexports.COMMENT_KEYS = COMMENT_KEYS;\nconst LOGICAL_OPERATORS = [\"||\", \"&&\", \"??\"];\nexports.LOGICAL_OPERATORS = LOGICAL_OPERATORS;\nconst UPDATE_OPERATORS = [\"++\", \"--\"];\nexports.UPDATE_OPERATORS = UPDATE_OPERATORS;\nconst BOOLEAN_NUMBER_BINARY_OPERATORS = [\">\", \"<\", \">=\", \"<=\"];\nexports.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS;\nconst EQUALITY_BINARY_OPERATORS = [\"==\", \"===\", \"!=\", \"!==\"];\nexports.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS;\nconst COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, \"in\", \"instanceof\"];\nexports.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS;\nconst BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS];\nexports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS;\nconst NUMBER_BINARY_OPERATORS = [\"-\", \"/\", \"%\", \"*\", \"**\", \"&\", \"|\", \">>\", \">>>\", \"<<\", \"^\"];\nexports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS;\nconst BINARY_OPERATORS = [\"+\", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS];\nexports.BINARY_OPERATORS = BINARY_OPERATORS;\nconst ASSIGNMENT_OPERATORS = [\"=\", \"+=\", ...NUMBER_BINARY_OPERATORS.map(op => op + \"=\"), ...LOGICAL_OPERATORS.map(op => op + \"=\")];\nexports.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS;\nconst BOOLEAN_UNARY_OPERATORS = [\"delete\", \"!\"];\nexports.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS;\nconst NUMBER_UNARY_OPERATORS = [\"+\", \"-\", \"~\"];\nexports.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS;\nconst STRING_UNARY_OPERATORS = [\"typeof\"];\nexports.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS;\nconst UNARY_OPERATORS = [\"void\", \"throw\", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS];\nexports.UNARY_OPERATORS = UNARY_OPERATORS;\nconst INHERIT_KEYS = {\n  optional: [\"typeAnnotation\", \"typeParameters\", \"returnType\"],\n  force: [\"start\", \"loc\", \"end\"]\n};\nexports.INHERIT_KEYS = INHERIT_KEYS;\nconst BLOCK_SCOPED_SYMBOL = Symbol.for(\"var used to be block scoped\");\nexports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL;\nconst NOT_LOCAL_BINDING = Symbol.for(\"should not be considered a local binding\");\nexports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = validate;\nexports.validateField = validateField;\nexports.validateChild = validateChild;\n\nvar _definitions = require(\"../definitions\");\n\nfunction validate(node, key, val) {\n  if (!node) return;\n  const fields = _definitions.NODE_FIELDS[node.type];\n  if (!fields) return;\n  const field = fields[key];\n  validateField(node, key, val, field);\n  validateChild(node, key, val);\n}\n\nfunction validateField(node, key, val, field) {\n  if (!(field == null ? void 0 : field.validate)) return;\n  if (field.optional && val == null) return;\n  field.validate(node, key, val);\n}\n\nfunction validateChild(node, key, val) {\n  if (val == null) return;\n  const validate = _definitions.NODE_PARENT_VALIDATIONS[val.type];\n  if (!validate) return;\n  validate(node, key, val);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.validate = validate;\nexports.typeIs = typeIs;\nexports.validateType = validateType;\nexports.validateOptional = validateOptional;\nexports.validateOptionalType = validateOptionalType;\nexports.arrayOf = arrayOf;\nexports.arrayOfType = arrayOfType;\nexports.validateArrayOfType = validateArrayOfType;\nexports.assertEach = assertEach;\nexports.assertOneOf = assertOneOf;\nexports.assertNodeType = assertNodeType;\nexports.assertNodeOrValueType = assertNodeOrValueType;\nexports.assertValueType = assertValueType;\nexports.assertShape = assertShape;\nexports.assertOptionalChainStart = assertOptionalChainStart;\nexports.chain = chain;\nexports.default = defineType;\nexports.NODE_PARENT_VALIDATIONS = exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.FLIPPED_ALIAS_KEYS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = void 0;\n\nvar _is = _interopRequireDefault(require(\"../validators/is\"));\n\nvar _validate = require(\"../validators/validate\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst VISITOR_KEYS = {};\nexports.VISITOR_KEYS = VISITOR_KEYS;\nconst ALIAS_KEYS = {};\nexports.ALIAS_KEYS = ALIAS_KEYS;\nconst FLIPPED_ALIAS_KEYS = {};\nexports.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS;\nconst NODE_FIELDS = {};\nexports.NODE_FIELDS = NODE_FIELDS;\nconst BUILDER_KEYS = {};\nexports.BUILDER_KEYS = BUILDER_KEYS;\nconst DEPRECATED_KEYS = {};\nexports.DEPRECATED_KEYS = DEPRECATED_KEYS;\nconst NODE_PARENT_VALIDATIONS = {};\nexports.NODE_PARENT_VALIDATIONS = NODE_PARENT_VALIDATIONS;\n\nfunction getType(val) {\n  if (Array.isArray(val)) {\n    return \"array\";\n  } else if (val === null) {\n    return \"null\";\n  } else {\n    return typeof val;\n  }\n}\n\nfunction validate(validate) {\n  return {\n    validate\n  };\n}\n\nfunction typeIs(typeName) {\n  return typeof typeName === \"string\" ? assertNodeType(typeName) : assertNodeType(...typeName);\n}\n\nfunction validateType(typeName) {\n  return validate(typeIs(typeName));\n}\n\nfunction validateOptional(validate) {\n  return {\n    validate,\n    optional: true\n  };\n}\n\nfunction validateOptionalType(typeName) {\n  return {\n    validate: typeIs(typeName),\n    optional: true\n  };\n}\n\nfunction arrayOf(elementType) {\n  return chain(assertValueType(\"array\"), assertEach(elementType));\n}\n\nfunction arrayOfType(typeName) {\n  return arrayOf(typeIs(typeName));\n}\n\nfunction validateArrayOfType(typeName) {\n  return validate(arrayOfType(typeName));\n}\n\nfunction assertEach(callback) {\n  function validator(node, key, val) {\n    if (!Array.isArray(val)) return;\n\n    for (let i = 0; i < val.length; i++) {\n      const subkey = `${key}[${i}]`;\n      const v = val[i];\n      callback(node, subkey, v);\n      if (process.env.BABEL_TYPES_8_BREAKING) (0, _validate.validateChild)(node, subkey, v);\n    }\n  }\n\n  validator.each = callback;\n  return validator;\n}\n\nfunction assertOneOf(...values) {\n  function validate(node, key, val) {\n    if (values.indexOf(val) < 0) {\n      throw new TypeError(`Property ${key} expected value to be one of ${JSON.stringify(values)} but got ${JSON.stringify(val)}`);\n    }\n  }\n\n  validate.oneOf = values;\n  return validate;\n}\n\nfunction assertNodeType(...types) {\n  function validate(node, key, val) {\n    for (const type of types) {\n      if ((0, _is.default)(type, val)) {\n        (0, _validate.validateChild)(node, key, val);\n        return;\n      }\n    }\n\n    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)}`);\n  }\n\n  validate.oneOfNodeTypes = types;\n  return validate;\n}\n\nfunction assertNodeOrValueType(...types) {\n  function validate(node, key, val) {\n    for (const type of types) {\n      if (getType(val) === type || (0, _is.default)(type, val)) {\n        (0, _validate.validateChild)(node, key, val);\n        return;\n      }\n    }\n\n    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)}`);\n  }\n\n  validate.oneOfNodeOrValueTypes = types;\n  return validate;\n}\n\nfunction assertValueType(type) {\n  function validate(node, key, val) {\n    const valid = getType(val) === type;\n\n    if (!valid) {\n      throw new TypeError(`Property ${key} expected type of ${type} but got ${getType(val)}`);\n    }\n  }\n\n  validate.type = type;\n  return validate;\n}\n\nfunction assertShape(shape) {\n  function validate(node, key, val) {\n    const errors = [];\n\n    for (const property of Object.keys(shape)) {\n      try {\n        (0, _validate.validateField)(node, property, val[property], shape[property]);\n      } catch (error) {\n        if (error instanceof TypeError) {\n          errors.push(error.message);\n          continue;\n        }\n\n        throw error;\n      }\n    }\n\n    if (errors.length) {\n      throw new TypeError(`Property ${key} of ${node.type} expected to have the following:\\n${errors.join(\"\\n\")}`);\n    }\n  }\n\n  validate.shapeOf = shape;\n  return validate;\n}\n\nfunction assertOptionalChainStart() {\n  function validate(node) {\n    var _current;\n\n    let current = node;\n\n    while (node) {\n      const {\n        type\n      } = current;\n\n      if (type === \"OptionalCallExpression\") {\n        if (current.optional) return;\n        current = current.callee;\n        continue;\n      }\n\n      if (type === \"OptionalMemberExpression\") {\n        if (current.optional) return;\n        current = current.object;\n        continue;\n      }\n\n      break;\n    }\n\n    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}`);\n  }\n\n  return validate;\n}\n\nfunction chain(...fns) {\n  function validate(...args) {\n    for (const fn of fns) {\n      fn(...args);\n    }\n  }\n\n  validate.chainOf = fns;\n  return validate;\n}\n\nconst validTypeOpts = [\"aliases\", \"builder\", \"deprecatedAlias\", \"fields\", \"inherits\", \"visitor\", \"validate\"];\nconst validFieldKeys = [\"default\", \"optional\", \"validate\"];\n\nfunction defineType(type, opts = {}) {\n  const inherits = opts.inherits && store[opts.inherits] || {};\n  let fields = opts.fields;\n\n  if (!fields) {\n    fields = {};\n\n    if (inherits.fields) {\n      const keys = Object.getOwnPropertyNames(inherits.fields);\n\n      for (const key of keys) {\n        const field = inherits.fields[key];\n        fields[key] = {\n          default: field.default,\n          optional: field.optional,\n          validate: field.validate\n        };\n      }\n    }\n  }\n\n  const visitor = opts.visitor || inherits.visitor || [];\n  const aliases = opts.aliases || inherits.aliases || [];\n  const builder = opts.builder || inherits.builder || opts.visitor || [];\n\n  for (const k of Object.keys(opts)) {\n    if (validTypeOpts.indexOf(k) === -1) {\n      throw new Error(`Unknown type option \"${k}\" on ${type}`);\n    }\n  }\n\n  if (opts.deprecatedAlias) {\n    DEPRECATED_KEYS[opts.deprecatedAlias] = type;\n  }\n\n  for (const key of visitor.concat(builder)) {\n    fields[key] = fields[key] || {};\n  }\n\n  for (const key of Object.keys(fields)) {\n    const field = fields[key];\n\n    if (field.default !== undefined && builder.indexOf(key) === -1) {\n      field.optional = true;\n    }\n\n    if (field.default === undefined) {\n      field.default = null;\n    } else if (!field.validate && field.default != null) {\n      field.validate = assertValueType(getType(field.default));\n    }\n\n    for (const k of Object.keys(field)) {\n      if (validFieldKeys.indexOf(k) === -1) {\n        throw new Error(`Unknown field key \"${k}\" on ${type}.${key}`);\n      }\n    }\n  }\n\n  VISITOR_KEYS[type] = opts.visitor = visitor;\n  BUILDER_KEYS[type] = opts.builder = builder;\n  NODE_FIELDS[type] = opts.fields = fields;\n  ALIAS_KEYS[type] = opts.aliases = aliases;\n  aliases.forEach(alias => {\n    FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];\n    FLIPPED_ALIAS_KEYS[alias].push(type);\n  });\n\n  if (opts.validate) {\n    NODE_PARENT_VALIDATIONS[type] = opts.validate;\n  }\n\n  store[type] = opts;\n}\n\nconst store = {};", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.classMethodOrDeclareMethodCommon = exports.classMethodOrPropertyCommon = exports.patternLikeCommon = exports.functionDeclarationCommon = exports.functionTypeAnnotationCommon = exports.functionCommon = void 0;\n\nvar _is = _interopRequireDefault(require(\"../validators/is\"));\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"../validators/isValidIdentifier\"));\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nvar _constants = require(\"../constants\");\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(0, _utils.default)(\"ArrayExpression\", {\n  fields: {\n    elements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)(\"null\", \"Expression\", \"SpreadElement\"))),\n      default: !process.env.BABEL_TYPES_8_BREAKING ? [] : undefined\n    }\n  },\n  visitor: [\"elements\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"AssignmentExpression\", {\n  fields: {\n    operator: {\n      validate: function () {\n        if (!process.env.BABEL_TYPES_8_BREAKING) {\n          return (0, _utils.assertValueType)(\"string\");\n        }\n\n        const identifier = (0, _utils.assertOneOf)(..._constants.ASSIGNMENT_OPERATORS);\n        const pattern = (0, _utils.assertOneOf)(\"=\");\n        return function (node, key, val) {\n          const validator = (0, _is.default)(\"Pattern\", node.left) ? pattern : identifier;\n          validator(node, key, val);\n        };\n      }()\n    },\n    left: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"LVal\") : (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  builder: [\"operator\", \"left\", \"right\"],\n  visitor: [\"left\", \"right\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"BinaryExpression\", {\n  builder: [\"operator\", \"left\", \"right\"],\n  fields: {\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.BINARY_OPERATORS)\n    },\n    left: {\n      validate: function () {\n        const expression = (0, _utils.assertNodeType)(\"Expression\");\n        const inOp = (0, _utils.assertNodeType)(\"Expression\", \"PrivateName\");\n\n        const validator = function (node, key, val) {\n          const validator = node.operator === \"in\" ? inOp : expression;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"PrivateName\"];\n        return validator;\n      }()\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  visitor: [\"left\", \"right\"],\n  aliases: [\"Binary\", \"Expression\"]\n});\n(0, _utils.default)(\"InterpreterDirective\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"Directive\", {\n  visitor: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertNodeType)(\"DirectiveLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"DirectiveLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"BlockStatement\", {\n  builder: [\"body\", \"directives\"],\n  visitor: [\"directives\", \"body\"],\n  fields: {\n    directives: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Directive\"))),\n      default: []\n    },\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\", \"Block\", \"Statement\"]\n});\n(0, _utils.default)(\"BreakStatement\", {\n  visitor: [\"label\"],\n  fields: {\n    label: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    }\n  },\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"]\n});\n(0, _utils.default)(\"CallExpression\", {\n  visitor: [\"callee\", \"arguments\", \"typeParameters\", \"typeArguments\"],\n  builder: [\"callee\", \"arguments\"],\n  aliases: [\"Expression\"],\n  fields: Object.assign({\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\", \"V8IntrinsicIdentifier\")\n    },\n    arguments: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\", \"JSXNamespacedName\", \"ArgumentPlaceholder\")))\n    }\n  }, !process.env.BABEL_TYPES_8_BREAKING ? {\n    optional: {\n      validate: (0, _utils.assertOneOf)(true, false),\n      optional: true\n    }\n  } : {}, {\n    typeArguments: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\"),\n      optional: true\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"CatchClause\", {\n  visitor: [\"param\", \"body\"],\n  fields: {\n    param: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\"]\n});\n(0, _utils.default)(\"ConditionalExpression\", {\n  visitor: [\"test\", \"consequent\", \"alternate\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    consequent: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    alternate: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  aliases: [\"Expression\", \"Conditional\"]\n});\n(0, _utils.default)(\"ContinueStatement\", {\n  visitor: [\"label\"],\n  fields: {\n    label: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    }\n  },\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"]\n});\n(0, _utils.default)(\"DebuggerStatement\", {\n  aliases: [\"Statement\"]\n});\n(0, _utils.default)(\"DoWhileStatement\", {\n  visitor: [\"test\", \"body\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  },\n  aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"]\n});\n(0, _utils.default)(\"EmptyStatement\", {\n  aliases: [\"Statement\"]\n});\n(0, _utils.default)(\"ExpressionStatement\", {\n  visitor: [\"expression\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  },\n  aliases: [\"Statement\", \"ExpressionWrapper\"]\n});\n(0, _utils.default)(\"File\", {\n  builder: [\"program\", \"comments\", \"tokens\"],\n  visitor: [\"program\"],\n  fields: {\n    program: {\n      validate: (0, _utils.assertNodeType)(\"Program\")\n    },\n    comments: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? Object.assign(() => {}, {\n        each: {\n          oneOfNodeTypes: [\"CommentBlock\", \"CommentLine\"]\n        }\n      }) : (0, _utils.assertEach)((0, _utils.assertNodeType)(\"CommentBlock\", \"CommentLine\")),\n      optional: true\n    },\n    tokens: {\n      validate: (0, _utils.assertEach)(Object.assign(() => {}, {\n        type: \"any\"\n      })),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ForInStatement\", {\n  visitor: [\"left\", \"right\", \"body\"],\n  aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\", \"ForXStatement\"],\n  fields: {\n    left: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"VariableDeclaration\", \"LVal\") : (0, _utils.assertNodeType)(\"VariableDeclaration\", \"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"ForStatement\", {\n  visitor: [\"init\", \"test\", \"update\", \"body\"],\n  aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\"],\n  fields: {\n    init: {\n      validate: (0, _utils.assertNodeType)(\"VariableDeclaration\", \"Expression\"),\n      optional: true\n    },\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    update: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\nconst functionCommon = {\n  params: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"RestElement\", \"TSParameterProperty\")))\n  },\n  generator: {\n    default: false\n  },\n  async: {\n    default: false\n  }\n};\nexports.functionCommon = functionCommon;\nconst functionTypeAnnotationCommon = {\n  returnType: {\n    validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n    optional: true\n  },\n  typeParameters: {\n    validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n    optional: true\n  }\n};\nexports.functionTypeAnnotationCommon = functionTypeAnnotationCommon;\nconst functionDeclarationCommon = Object.assign({}, functionCommon, {\n  declare: {\n    validate: (0, _utils.assertValueType)(\"boolean\"),\n    optional: true\n  },\n  id: {\n    validate: (0, _utils.assertNodeType)(\"Identifier\"),\n    optional: true\n  }\n});\nexports.functionDeclarationCommon = functionDeclarationCommon;\n(0, _utils.default)(\"FunctionDeclaration\", {\n  builder: [\"id\", \"params\", \"body\", \"generator\", \"async\"],\n  visitor: [\"id\", \"params\", \"body\", \"returnType\", \"typeParameters\"],\n  fields: Object.assign({}, functionDeclarationCommon, functionTypeAnnotationCommon, {\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }),\n  aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Statement\", \"Pureish\", \"Declaration\"],\n  validate: function () {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return () => {};\n    const identifier = (0, _utils.assertNodeType)(\"Identifier\");\n    return function (parent, key, node) {\n      if (!(0, _is.default)(\"ExportDefaultDeclaration\", parent)) {\n        identifier(node, \"id\", node.id);\n      }\n    };\n  }()\n});\n(0, _utils.default)(\"FunctionExpression\", {\n  inherits: \"FunctionDeclaration\",\n  aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Expression\", \"Pureish\"],\n  fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  })\n});\nconst patternLikeCommon = {\n  typeAnnotation: {\n    validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n    optional: true\n  },\n  decorators: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\")))\n  }\n};\nexports.patternLikeCommon = patternLikeCommon;\n(0, _utils.default)(\"Identifier\", {\n  builder: [\"name\"],\n  visitor: [\"typeAnnotation\", \"decorators\"],\n  aliases: [\"Expression\", \"PatternLike\", \"LVal\", \"TSEntityName\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    name: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (!(0, _isValidIdentifier.default)(val, false)) {\n          throw new TypeError(`\"${val}\" is not a valid identifier name`);\n        }\n      }, {\n        type: \"string\"\n      }))\n    },\n    optional: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  }),\n\n  validate(parent, key, node) {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return;\n    const match = /\\.(\\w+)$/.exec(key);\n    if (!match) return;\n    const [, parentKey] = match;\n    const nonComp = {\n      computed: false\n    };\n\n    if (parentKey === \"property\") {\n      if ((0, _is.default)(\"MemberExpression\", parent, nonComp)) return;\n      if ((0, _is.default)(\"OptionalMemberExpression\", parent, nonComp)) return;\n    } else if (parentKey === \"key\") {\n      if ((0, _is.default)(\"Property\", parent, nonComp)) return;\n      if ((0, _is.default)(\"Method\", parent, nonComp)) return;\n    } else if (parentKey === \"exported\") {\n      if ((0, _is.default)(\"ExportSpecifier\", parent)) return;\n    } else if (parentKey === \"imported\") {\n      if ((0, _is.default)(\"ImportSpecifier\", parent, {\n        imported: node\n      })) return;\n    } else if (parentKey === \"meta\") {\n      if ((0, _is.default)(\"MetaProperty\", parent, {\n        meta: node\n      })) return;\n    }\n\n    if (((0, _helperValidatorIdentifier.isKeyword)(node.name) || (0, _helperValidatorIdentifier.isReservedWord)(node.name)) && node.name !== \"this\") {\n      throw new TypeError(`\"${node.name}\" is not a valid identifier`);\n    }\n  }\n\n});\n(0, _utils.default)(\"IfStatement\", {\n  visitor: [\"test\", \"consequent\", \"alternate\"],\n  aliases: [\"Statement\", \"Conditional\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    consequent: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    },\n    alternate: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"LabeledStatement\", {\n  visitor: [\"label\", \"body\"],\n  aliases: [\"Statement\"],\n  fields: {\n    label: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"StringLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"NumericLiteral\", {\n  builder: [\"value\"],\n  deprecatedAlias: \"NumberLiteral\",\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"number\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"NullLiteral\", {\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"BooleanLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"boolean\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"RegExpLiteral\", {\n  builder: [\"pattern\", \"flags\"],\n  deprecatedAlias: \"RegexLiteral\",\n  aliases: [\"Expression\", \"Pureish\", \"Literal\"],\n  fields: {\n    pattern: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    },\n    flags: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n        const invalid = /[^gimsuy]/.exec(val);\n\n        if (invalid) {\n          throw new TypeError(`\"${invalid[0]}\" is not a valid RegExp flag`);\n        }\n      }, {\n        type: \"string\"\n      })),\n      default: \"\"\n    }\n  }\n});\n(0, _utils.default)(\"LogicalExpression\", {\n  builder: [\"operator\", \"left\", \"right\"],\n  visitor: [\"left\", \"right\"],\n  aliases: [\"Binary\", \"Expression\"],\n  fields: {\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.LOGICAL_OPERATORS)\n    },\n    left: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"MemberExpression\", {\n  builder: [\"object\", \"property\", \"computed\", \"optional\"],\n  visitor: [\"object\", \"property\"],\n  aliases: [\"Expression\", \"LVal\"],\n  fields: Object.assign({\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    property: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"PrivateName\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"PrivateName\"];\n        return validator;\n      }()\n    },\n    computed: {\n      default: false\n    }\n  }, !process.env.BABEL_TYPES_8_BREAKING ? {\n    optional: {\n      validate: (0, _utils.assertOneOf)(true, false),\n      optional: true\n    }\n  } : {})\n});\n(0, _utils.default)(\"NewExpression\", {\n  inherits: \"CallExpression\"\n});\n(0, _utils.default)(\"Program\", {\n  visitor: [\"directives\", \"body\"],\n  builder: [\"body\", \"directives\", \"sourceType\", \"interpreter\"],\n  fields: {\n    sourceFile: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    },\n    sourceType: {\n      validate: (0, _utils.assertOneOf)(\"script\", \"module\"),\n      default: \"script\"\n    },\n    interpreter: {\n      validate: (0, _utils.assertNodeType)(\"InterpreterDirective\"),\n      default: null,\n      optional: true\n    },\n    directives: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Directive\"))),\n      default: []\n    },\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\", \"Block\"]\n});\n(0, _utils.default)(\"ObjectExpression\", {\n  visitor: [\"properties\"],\n  aliases: [\"Expression\"],\n  fields: {\n    properties: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ObjectMethod\", \"ObjectProperty\", \"SpreadElement\")))\n    }\n  }\n});\n(0, _utils.default)(\"ObjectMethod\", {\n  builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"generator\", \"async\"],\n  fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n    kind: Object.assign({\n      validate: (0, _utils.assertOneOf)(\"method\", \"get\", \"set\")\n    }, !process.env.BABEL_TYPES_8_BREAKING ? {\n      default: \"method\"\n    } : {}),\n    computed: {\n      default: false\n    },\n    key: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"StringLiteral\", \"NumericLiteral\"];\n        return validator;\n      }()\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }),\n  visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n  aliases: [\"UserWhitespacable\", \"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\", \"ObjectMember\"]\n});\n(0, _utils.default)(\"ObjectProperty\", {\n  builder: [\"key\", \"value\", \"computed\", \"shorthand\", ...(!process.env.BABEL_TYPES_8_BREAKING ? [\"decorators\"] : [])],\n  fields: {\n    computed: {\n      default: false\n    },\n    key: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"StringLiteral\", \"NumericLiteral\"];\n        return validator;\n      }()\n    },\n    value: {\n      validate: (0, _utils.assertNodeType)(\"Expression\", \"PatternLike\")\n    },\n    shorthand: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && node.computed) {\n          throw new TypeError(\"Property shorthand of ObjectProperty cannot be true if computed is true\");\n        }\n      }, {\n        type: \"boolean\"\n      }), function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && !(0, _is.default)(\"Identifier\", node.key)) {\n          throw new TypeError(\"Property shorthand of ObjectProperty cannot be true if key is not an Identifier\");\n        }\n      }),\n      default: false\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  },\n  visitor: [\"key\", \"value\", \"decorators\"],\n  aliases: [\"UserWhitespacable\", \"Property\", \"ObjectMember\"],\n  validate: function () {\n    const pattern = (0, _utils.assertNodeType)(\"Identifier\", \"Pattern\");\n    const expression = (0, _utils.assertNodeType)(\"Expression\");\n    return function (parent, key, node) {\n      if (!process.env.BABEL_TYPES_8_BREAKING) return;\n      const validator = (0, _is.default)(\"ObjectPattern\", parent) ? pattern : expression;\n      validator(node, \"value\", node.value);\n    };\n  }()\n});\n(0, _utils.default)(\"RestElement\", {\n  visitor: [\"argument\", \"typeAnnotation\"],\n  builder: [\"argument\"],\n  aliases: [\"LVal\", \"PatternLike\"],\n  deprecatedAlias: \"RestProperty\",\n  fields: Object.assign({}, patternLikeCommon, {\n    argument: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"LVal\") : (0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"MemberExpression\")\n    }\n  }),\n\n  validate(parent, key) {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return;\n    const match = /(\\w+)\\[(\\d+)\\]/.exec(key);\n    if (!match) throw new Error(\"Internal Babel error: malformed key.\");\n    const [, listKey, index] = match;\n\n    if (parent[listKey].length > index + 1) {\n      throw new TypeError(`RestElement must be last element of ${listKey}`);\n    }\n  }\n\n});\n(0, _utils.default)(\"ReturnStatement\", {\n  visitor: [\"argument\"],\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"SequenceExpression\", {\n  visitor: [\"expressions\"],\n  fields: {\n    expressions: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\")))\n    }\n  },\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ParenthesizedExpression\", {\n  visitor: [\"expression\"],\n  aliases: [\"Expression\", \"ExpressionWrapper\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"SwitchCase\", {\n  visitor: [\"test\", \"consequent\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    consequent: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  }\n});\n(0, _utils.default)(\"SwitchStatement\", {\n  visitor: [\"discriminant\", \"cases\"],\n  aliases: [\"Statement\", \"BlockParent\", \"Scopable\"],\n  fields: {\n    discriminant: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    cases: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"SwitchCase\")))\n    }\n  }\n});\n(0, _utils.default)(\"ThisExpression\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ThrowStatement\", {\n  visitor: [\"argument\"],\n  aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"TryStatement\", {\n  visitor: [\"block\", \"handler\", \"finalizer\"],\n  aliases: [\"Statement\"],\n  fields: {\n    block: {\n      validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"BlockStatement\"), Object.assign(function (node) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (!node.handler && !node.finalizer) {\n          throw new TypeError(\"TryStatement expects either a handler or finalizer, or both\");\n        }\n      }, {\n        oneOfNodeTypes: [\"BlockStatement\"]\n      }))\n    },\n    handler: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"CatchClause\")\n    },\n    finalizer: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }\n});\n(0, _utils.default)(\"UnaryExpression\", {\n  builder: [\"operator\", \"argument\", \"prefix\"],\n  fields: {\n    prefix: {\n      default: true\n    },\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.UNARY_OPERATORS)\n    }\n  },\n  visitor: [\"argument\"],\n  aliases: [\"UnaryLike\", \"Expression\"]\n});\n(0, _utils.default)(\"UpdateExpression\", {\n  builder: [\"operator\", \"argument\", \"prefix\"],\n  fields: {\n    prefix: {\n      default: false\n    },\n    argument: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"Expression\") : (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\")\n    },\n    operator: {\n      validate: (0, _utils.assertOneOf)(..._constants.UPDATE_OPERATORS)\n    }\n  },\n  visitor: [\"argument\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"VariableDeclaration\", {\n  builder: [\"kind\", \"declarations\"],\n  visitor: [\"declarations\"],\n  aliases: [\"Statement\", \"Declaration\"],\n  fields: {\n    declare: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    kind: {\n      validate: (0, _utils.assertOneOf)(\"var\", \"let\", \"const\")\n    },\n    declarations: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"VariableDeclarator\")))\n    }\n  },\n\n  validate(parent, key, node) {\n    if (!process.env.BABEL_TYPES_8_BREAKING) return;\n    if (!(0, _is.default)(\"ForXStatement\", parent, {\n      left: node\n    })) return;\n\n    if (node.declarations.length !== 1) {\n      throw new TypeError(`Exactly one VariableDeclarator is required in the VariableDeclaration of a ${parent.type}`);\n    }\n  }\n\n});\n(0, _utils.default)(\"VariableDeclarator\", {\n  visitor: [\"id\", \"init\"],\n  fields: {\n    id: {\n      validate: function () {\n        if (!process.env.BABEL_TYPES_8_BREAKING) {\n          return (0, _utils.assertNodeType)(\"LVal\");\n        }\n\n        const normal = (0, _utils.assertNodeType)(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\");\n        const without = (0, _utils.assertNodeType)(\"Identifier\");\n        return function (node, key, val) {\n          const validator = node.init ? normal : without;\n          validator(node, key, val);\n        };\n      }()\n    },\n    definite: {\n      optional: true,\n      validate: (0, _utils.assertValueType)(\"boolean\")\n    },\n    init: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"WhileStatement\", {\n  visitor: [\"test\", \"body\"],\n  aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"],\n  fields: {\n    test: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"WithStatement\", {\n  visitor: [\"object\", \"body\"],\n  aliases: [\"Statement\"],\n  fields: {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    }\n  }\n});\n(0, _utils.default)(\"AssignmentPattern\", {\n  visitor: [\"left\", \"right\", \"decorators\"],\n  builder: [\"left\", \"right\"],\n  aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    left: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"ObjectPattern\", \"ArrayPattern\", \"MemberExpression\")\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"ArrayPattern\", {\n  visitor: [\"elements\", \"typeAnnotation\"],\n  builder: [\"elements\"],\n  aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    elements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)(\"null\", \"PatternLike\")))\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"ArrowFunctionExpression\", {\n  builder: [\"params\", \"body\", \"async\"],\n  visitor: [\"params\", \"body\", \"returnType\", \"typeParameters\"],\n  aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Expression\", \"Pureish\"],\n  fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n    expression: {\n      validate: (0, _utils.assertValueType)(\"boolean\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\", \"Expression\")\n    }\n  })\n});\n(0, _utils.default)(\"ClassBody\", {\n  visitor: [\"body\"],\n  fields: {\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ClassMethod\", \"ClassPrivateMethod\", \"ClassProperty\", \"ClassPrivateProperty\", \"TSDeclareMethod\", \"TSIndexSignature\")))\n    }\n  }\n});\n(0, _utils.default)(\"ClassExpression\", {\n  builder: [\"id\", \"superClass\", \"body\", \"decorators\"],\n  visitor: [\"id\", \"body\", \"superClass\", \"mixins\", \"typeParameters\", \"superTypeParameters\", \"implements\", \"decorators\"],\n  aliases: [\"Scopable\", \"Class\", \"Expression\"],\n  fields: {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\"),\n      optional: true\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"ClassBody\")\n    },\n    superClass: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    superTypeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    },\n    implements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSExpressionWithTypeArguments\", \"ClassImplements\"))),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    mixins: {\n      validate: (0, _utils.assertNodeType)(\"InterfaceExtends\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ClassDeclaration\", {\n  inherits: \"ClassExpression\",\n  aliases: [\"Scopable\", \"Class\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n      optional: true\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"ClassBody\")\n    },\n    superClass: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    superTypeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    },\n    implements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSExpressionWithTypeArguments\", \"ClassImplements\"))),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    mixins: {\n      validate: (0, _utils.assertNodeType)(\"InterfaceExtends\"),\n      optional: true\n    },\n    declare: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    abstract: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  },\n  validate: function () {\n    const identifier = (0, _utils.assertNodeType)(\"Identifier\");\n    return function (parent, key, node) {\n      if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n      if (!(0, _is.default)(\"ExportDefaultDeclaration\", parent)) {\n        identifier(node, \"id\", node.id);\n      }\n    };\n  }()\n});\n(0, _utils.default)(\"ExportAllDeclaration\", {\n  visitor: [\"source\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n  fields: {\n    source: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"ExportDefaultDeclaration\", {\n  visitor: [\"declaration\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n  fields: {\n    declaration: {\n      validate: (0, _utils.assertNodeType)(\"FunctionDeclaration\", \"TSDeclareFunction\", \"ClassDeclaration\", \"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"ExportNamedDeclaration\", {\n  visitor: [\"declaration\", \"specifiers\", \"source\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n  fields: {\n    declaration: {\n      optional: true,\n      validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"Declaration\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && node.specifiers.length) {\n          throw new TypeError(\"Only declaration or specifiers is allowed on ExportNamedDeclaration\");\n        }\n      }, {\n        oneOfNodeTypes: [\"Declaration\"]\n      }), function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && node.source) {\n          throw new TypeError(\"Cannot export a declaration from a source\");\n        }\n      })\n    },\n    specifiers: {\n      default: [],\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)(function () {\n        const sourced = (0, _utils.assertNodeType)(\"ExportSpecifier\", \"ExportDefaultSpecifier\", \"ExportNamespaceSpecifier\");\n        const sourceless = (0, _utils.assertNodeType)(\"ExportSpecifier\");\n        if (!process.env.BABEL_TYPES_8_BREAKING) return sourced;\n        return function (node, key, val) {\n          const validator = node.source ? sourced : sourceless;\n          validator(node, key, val);\n        };\n      }()))\n    },\n    source: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\"),\n      optional: true\n    },\n    exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"type\", \"value\"))\n  }\n});\n(0, _utils.default)(\"ExportSpecifier\", {\n  visitor: [\"local\", \"exported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    exported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"ForOfStatement\", {\n  visitor: [\"left\", \"right\", \"body\"],\n  builder: [\"left\", \"right\", \"body\", \"await\"],\n  aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\", \"ForXStatement\"],\n  fields: {\n    left: {\n      validate: function () {\n        if (!process.env.BABEL_TYPES_8_BREAKING) {\n          return (0, _utils.assertNodeType)(\"VariableDeclaration\", \"LVal\");\n        }\n\n        const declaration = (0, _utils.assertNodeType)(\"VariableDeclaration\");\n        const lval = (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\");\n        return function (node, key, val) {\n          if ((0, _is.default)(\"VariableDeclaration\", val)) {\n            declaration(node, key, val);\n          } else {\n            lval(node, key, val);\n          }\n        };\n      }()\n    },\n    right: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"Statement\")\n    },\n    await: {\n      default: false\n    }\n  }\n});\n(0, _utils.default)(\"ImportDeclaration\", {\n  visitor: [\"specifiers\", \"source\"],\n  aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\"],\n  fields: {\n    specifiers: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ImportSpecifier\", \"ImportDefaultSpecifier\", \"ImportNamespaceSpecifier\")))\n    },\n    source: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n    },\n    importKind: {\n      validate: (0, _utils.assertOneOf)(\"type\", \"typeof\", \"value\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ImportDefaultSpecifier\", {\n  visitor: [\"local\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"ImportNamespaceSpecifier\", {\n  visitor: [\"local\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"ImportSpecifier\", {\n  visitor: [\"local\", \"imported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    local: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    imported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n    },\n    importKind: {\n      validate: (0, _utils.assertOneOf)(\"type\", \"typeof\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"MetaProperty\", {\n  visitor: [\"meta\", \"property\"],\n  aliases: [\"Expression\"],\n  fields: {\n    meta: {\n      validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"Identifier\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n        let property;\n\n        switch (val.name) {\n          case \"function\":\n            property = \"sent\";\n            break;\n\n          case \"new\":\n            property = \"target\";\n            break;\n\n          case \"import\":\n            property = \"meta\";\n            break;\n        }\n\n        if (!(0, _is.default)(\"Identifier\", node.property, {\n          name: property\n        })) {\n          throw new TypeError(\"Unrecognised MetaProperty\");\n        }\n      }, {\n        oneOfNodeTypes: [\"Identifier\"]\n      }))\n    },\n    property: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\nconst classMethodOrPropertyCommon = {\n  abstract: {\n    validate: (0, _utils.assertValueType)(\"boolean\"),\n    optional: true\n  },\n  accessibility: {\n    validate: (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\"),\n    optional: true\n  },\n  static: {\n    default: false\n  },\n  computed: {\n    default: false\n  },\n  optional: {\n    validate: (0, _utils.assertValueType)(\"boolean\"),\n    optional: true\n  },\n  key: {\n    validate: (0, _utils.chain)(function () {\n      const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n      const computed = (0, _utils.assertNodeType)(\"Expression\");\n      return function (node, key, val) {\n        const validator = node.computed ? computed : normal;\n        validator(node, key, val);\n      };\n    }(), (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\", \"Expression\"))\n  }\n};\nexports.classMethodOrPropertyCommon = classMethodOrPropertyCommon;\nconst classMethodOrDeclareMethodCommon = Object.assign({}, functionCommon, classMethodOrPropertyCommon, {\n  kind: {\n    validate: (0, _utils.assertOneOf)(\"get\", \"set\", \"method\", \"constructor\"),\n    default: \"method\"\n  },\n  access: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\")),\n    optional: true\n  },\n  decorators: {\n    validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n    optional: true\n  }\n});\nexports.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon;\n(0, _utils.default)(\"ClassMethod\", {\n  aliases: [\"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\"],\n  builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"static\", \"generator\", \"async\"],\n  visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n  fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, {\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  })\n});\n(0, _utils.default)(\"ObjectPattern\", {\n  visitor: [\"properties\", \"typeAnnotation\", \"decorators\"],\n  builder: [\"properties\"],\n  aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n  fields: Object.assign({}, patternLikeCommon, {\n    properties: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"RestElement\", \"ObjectProperty\")))\n    }\n  })\n});\n(0, _utils.default)(\"SpreadElement\", {\n  visitor: [\"argument\"],\n  aliases: [\"UnaryLike\"],\n  deprecatedAlias: \"SpreadProperty\",\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"Super\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"TaggedTemplateExpression\", {\n  visitor: [\"tag\", \"quasi\"],\n  aliases: [\"Expression\"],\n  fields: {\n    tag: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    quasi: {\n      validate: (0, _utils.assertNodeType)(\"TemplateLiteral\")\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"TemplateElement\", {\n  builder: [\"value\", \"tail\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertShape)({\n        raw: {\n          validate: (0, _utils.assertValueType)(\"string\")\n        },\n        cooked: {\n          validate: (0, _utils.assertValueType)(\"string\"),\n          optional: true\n        }\n      })\n    },\n    tail: {\n      default: false\n    }\n  }\n});\n(0, _utils.default)(\"TemplateLiteral\", {\n  visitor: [\"quasis\", \"expressions\"],\n  aliases: [\"Expression\", \"Literal\"],\n  fields: {\n    quasis: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TemplateElement\")))\n    },\n    expressions: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"TSType\")), function (node, key, val) {\n        if (node.quasis.length !== val.length + 1) {\n          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}`);\n        }\n      })\n    }\n  }\n});\n(0, _utils.default)(\"YieldExpression\", {\n  builder: [\"argument\", \"delegate\"],\n  visitor: [\"argument\"],\n  aliases: [\"Expression\", \"Terminatorless\"],\n  fields: {\n    delegate: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), Object.assign(function (node, key, val) {\n        if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n        if (val && !node.argument) {\n          throw new TypeError(\"Property delegate of YieldExpression cannot be true if there is no argument\");\n        }\n      }, {\n        type: \"boolean\"\n      })),\n      default: false\n    },\n    argument: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"AwaitExpression\", {\n  builder: [\"argument\"],\n  visitor: [\"argument\"],\n  aliases: [\"Expression\", \"Terminatorless\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"Import\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"BigIntLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"ExportNamespaceSpecifier\", {\n  visitor: [\"exported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    exported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"OptionalMemberExpression\", {\n  builder: [\"object\", \"property\", \"computed\", \"optional\"],\n  visitor: [\"object\", \"property\"],\n  aliases: [\"Expression\"],\n  fields: {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    property: {\n      validate: function () {\n        const normal = (0, _utils.assertNodeType)(\"Identifier\");\n        const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n        const validator = function (node, key, val) {\n          const validator = node.computed ? computed : normal;\n          validator(node, key, val);\n        };\n\n        validator.oneOfNodeTypes = [\"Expression\", \"Identifier\"];\n        return validator;\n      }()\n    },\n    computed: {\n      default: false\n    },\n    optional: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)(\"boolean\") : (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), (0, _utils.assertOptionalChainStart)())\n    }\n  }\n});\n(0, _utils.default)(\"OptionalCallExpression\", {\n  visitor: [\"callee\", \"arguments\", \"typeParameters\", \"typeArguments\"],\n  builder: [\"callee\", \"arguments\", \"optional\"],\n  aliases: [\"Expression\"],\n  fields: {\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    arguments: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\", \"JSXNamespacedName\")))\n    },\n    optional: {\n      validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)(\"boolean\") : (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), (0, _utils.assertOptionalChainStart)())\n    },\n    typeArguments: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\"),\n      optional: true\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  }\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nconst defineInterfaceishType = (name, typeParameterType = \"TypeParameterDeclaration\") => {\n  (0, _utils.default)(name, {\n    builder: [\"id\", \"typeParameters\", \"extends\", \"body\"],\n    visitor: [\"id\", \"typeParameters\", \"extends\", \"mixins\", \"implements\", \"body\"],\n    aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n    fields: {\n      id: (0, _utils.validateType)(\"Identifier\"),\n      typeParameters: (0, _utils.validateOptionalType)(typeParameterType),\n      extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"InterfaceExtends\")),\n      mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"InterfaceExtends\")),\n      implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ClassImplements\")),\n      body: (0, _utils.validateType)(\"ObjectTypeAnnotation\")\n    }\n  });\n};\n\n(0, _utils.default)(\"AnyTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ArrayTypeAnnotation\", {\n  visitor: [\"elementType\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    elementType: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"BooleanTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"BooleanLiteralTypeAnnotation\", {\n  builder: [\"value\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    value: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"NullLiteralTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ClassImplements\", {\n  visitor: [\"id\", \"typeParameters\"],\n  aliases: [\"Flow\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterInstantiation\")\n  }\n});\ndefineInterfaceishType(\"DeclareClass\");\n(0, _utils.default)(\"DeclareFunction\", {\n  visitor: [\"id\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    predicate: (0, _utils.validateOptionalType)(\"DeclaredPredicate\")\n  }\n});\ndefineInterfaceishType(\"DeclareInterface\");\n(0, _utils.default)(\"DeclareModule\", {\n  builder: [\"id\", \"body\", \"kind\"],\n  visitor: [\"id\", \"body\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    body: (0, _utils.validateType)(\"BlockStatement\"),\n    kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"CommonJS\", \"ES\"))\n  }\n});\n(0, _utils.default)(\"DeclareModuleExports\", {\n  visitor: [\"typeAnnotation\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TypeAnnotation\")\n  }\n});\n(0, _utils.default)(\"DeclareTypeAlias\", {\n  visitor: [\"id\", \"typeParameters\", \"right\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    right: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"DeclareOpaqueType\", {\n  visitor: [\"id\", \"typeParameters\", \"supertype\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    supertype: (0, _utils.validateOptionalType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"DeclareVariable\", {\n  visitor: [\"id\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\")\n  }\n});\n(0, _utils.default)(\"DeclareExportDeclaration\", {\n  visitor: [\"declaration\", \"specifiers\", \"source\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    declaration: (0, _utils.validateOptionalType)(\"Flow\"),\n    specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)([\"ExportSpecifier\", \"ExportNamespaceSpecifier\"])),\n    source: (0, _utils.validateOptionalType)(\"StringLiteral\"),\n    default: (0, _utils.validateOptional)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"DeclareExportAllDeclaration\", {\n  visitor: [\"source\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    source: (0, _utils.validateType)(\"StringLiteral\"),\n    exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"type\", \"value\"))\n  }\n});\n(0, _utils.default)(\"DeclaredPredicate\", {\n  visitor: [\"value\"],\n  aliases: [\"Flow\", \"FlowPredicate\"],\n  fields: {\n    value: (0, _utils.validateType)(\"Flow\")\n  }\n});\n(0, _utils.default)(\"ExistsTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\"]\n});\n(0, _utils.default)(\"FunctionTypeAnnotation\", {\n  visitor: [\"typeParameters\", \"params\", \"rest\", \"returnType\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    params: (0, _utils.validate)((0, _utils.arrayOfType)(\"FunctionTypeParam\")),\n    rest: (0, _utils.validateOptionalType)(\"FunctionTypeParam\"),\n    returnType: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"FunctionTypeParam\", {\n  visitor: [\"name\", \"typeAnnotation\"],\n  aliases: [\"Flow\"],\n  fields: {\n    name: (0, _utils.validateOptionalType)(\"Identifier\"),\n    typeAnnotation: (0, _utils.validateType)(\"FlowType\"),\n    optional: (0, _utils.validateOptional)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"GenericTypeAnnotation\", {\n  visitor: [\"id\", \"typeParameters\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"QualifiedTypeIdentifier\"]),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"InferredPredicate\", {\n  aliases: [\"Flow\", \"FlowPredicate\"]\n});\n(0, _utils.default)(\"InterfaceExtends\", {\n  visitor: [\"id\", \"typeParameters\"],\n  aliases: [\"Flow\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"QualifiedTypeIdentifier\"]),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterInstantiation\")\n  }\n});\ndefineInterfaceishType(\"InterfaceDeclaration\");\n(0, _utils.default)(\"InterfaceTypeAnnotation\", {\n  visitor: [\"extends\", \"body\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"InterfaceExtends\")),\n    body: (0, _utils.validateType)(\"ObjectTypeAnnotation\")\n  }\n});\n(0, _utils.default)(\"IntersectionTypeAnnotation\", {\n  visitor: [\"types\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    types: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"MixedTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"EmptyTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"NullableTypeAnnotation\", {\n  visitor: [\"typeAnnotation\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"NumberLiteralTypeAnnotation\", {\n  builder: [\"value\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    value: (0, _utils.validate)((0, _utils.assertValueType)(\"number\"))\n  }\n});\n(0, _utils.default)(\"NumberTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ObjectTypeAnnotation\", {\n  visitor: [\"properties\", \"indexers\", \"callProperties\", \"internalSlots\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  builder: [\"properties\", \"indexers\", \"callProperties\", \"internalSlots\", \"exact\"],\n  fields: {\n    properties: (0, _utils.validate)((0, _utils.arrayOfType)([\"ObjectTypeProperty\", \"ObjectTypeSpreadProperty\"])),\n    indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ObjectTypeIndexer\")),\n    callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ObjectTypeCallProperty\")),\n    internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"ObjectTypeInternalSlot\")),\n    exact: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      default: false\n    },\n    inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"ObjectTypeInternalSlot\", {\n  visitor: [\"id\", \"value\", \"optional\", \"static\", \"method\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    value: (0, _utils.validateType)(\"FlowType\"),\n    optional: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    method: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"ObjectTypeCallProperty\", {\n  visitor: [\"value\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    value: (0, _utils.validateType)(\"FlowType\"),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\"))\n  }\n});\n(0, _utils.default)(\"ObjectTypeIndexer\", {\n  visitor: [\"id\", \"key\", \"value\", \"variance\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    id: (0, _utils.validateOptionalType)(\"Identifier\"),\n    key: (0, _utils.validateType)(\"FlowType\"),\n    value: (0, _utils.validateType)(\"FlowType\"),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    variance: (0, _utils.validateOptionalType)(\"Variance\")\n  }\n});\n(0, _utils.default)(\"ObjectTypeProperty\", {\n  visitor: [\"key\", \"value\", \"variance\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    key: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    value: (0, _utils.validateType)(\"FlowType\"),\n    kind: (0, _utils.validate)((0, _utils.assertOneOf)(\"init\", \"get\", \"set\")),\n    static: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    proto: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    optional: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    variance: (0, _utils.validateOptionalType)(\"Variance\")\n  }\n});\n(0, _utils.default)(\"ObjectTypeSpreadProperty\", {\n  visitor: [\"argument\"],\n  aliases: [\"Flow\", \"UserWhitespacable\"],\n  fields: {\n    argument: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"OpaqueType\", {\n  visitor: [\"id\", \"typeParameters\", \"supertype\", \"impltype\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    supertype: (0, _utils.validateOptionalType)(\"FlowType\"),\n    impltype: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"QualifiedTypeIdentifier\", {\n  visitor: [\"id\", \"qualification\"],\n  aliases: [\"Flow\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    qualification: (0, _utils.validateType)([\"Identifier\", \"QualifiedTypeIdentifier\"])\n  }\n});\n(0, _utils.default)(\"StringLiteralTypeAnnotation\", {\n  builder: [\"value\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    value: (0, _utils.validate)((0, _utils.assertValueType)(\"string\"))\n  }\n});\n(0, _utils.default)(\"StringTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"SymbolTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"ThisTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"TupleTypeAnnotation\", {\n  visitor: [\"types\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    types: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"TypeofTypeAnnotation\", {\n  visitor: [\"argument\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    argument: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"TypeAlias\", {\n  visitor: [\"id\", \"typeParameters\", \"right\"],\n  aliases: [\"Flow\", \"FlowDeclaration\", \"Statement\", \"Declaration\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TypeParameterDeclaration\"),\n    right: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"TypeAnnotation\", {\n  aliases: [\"Flow\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"FlowType\")\n  }\n});\n(0, _utils.default)(\"TypeCastExpression\", {\n  visitor: [\"expression\", \"typeAnnotation\"],\n  aliases: [\"Flow\", \"ExpressionWrapper\", \"Expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\"),\n    typeAnnotation: (0, _utils.validateType)(\"TypeAnnotation\")\n  }\n});\n(0, _utils.default)(\"TypeParameter\", {\n  aliases: [\"Flow\"],\n  visitor: [\"bound\", \"default\", \"variance\"],\n  fields: {\n    name: (0, _utils.validate)((0, _utils.assertValueType)(\"string\")),\n    bound: (0, _utils.validateOptionalType)(\"TypeAnnotation\"),\n    default: (0, _utils.validateOptionalType)(\"FlowType\"),\n    variance: (0, _utils.validateOptionalType)(\"Variance\")\n  }\n});\n(0, _utils.default)(\"TypeParameterDeclaration\", {\n  aliases: [\"Flow\"],\n  visitor: [\"params\"],\n  fields: {\n    params: (0, _utils.validate)((0, _utils.arrayOfType)(\"TypeParameter\"))\n  }\n});\n(0, _utils.default)(\"TypeParameterInstantiation\", {\n  aliases: [\"Flow\"],\n  visitor: [\"params\"],\n  fields: {\n    params: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"UnionTypeAnnotation\", {\n  visitor: [\"types\"],\n  aliases: [\"Flow\", \"FlowType\"],\n  fields: {\n    types: (0, _utils.validate)((0, _utils.arrayOfType)(\"FlowType\"))\n  }\n});\n(0, _utils.default)(\"Variance\", {\n  aliases: [\"Flow\"],\n  builder: [\"kind\"],\n  fields: {\n    kind: (0, _utils.validate)((0, _utils.assertOneOf)(\"minus\", \"plus\"))\n  }\n});\n(0, _utils.default)(\"VoidTypeAnnotation\", {\n  aliases: [\"Flow\", \"FlowType\", \"FlowBaseAnnotation\"]\n});\n(0, _utils.default)(\"EnumDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"body\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    body: (0, _utils.validateType)([\"EnumBooleanBody\", \"EnumNumberBody\", \"EnumStringBody\", \"EnumSymbolBody\"])\n  }\n});\n(0, _utils.default)(\"EnumBooleanBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    explicit: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    members: (0, _utils.validateArrayOfType)(\"EnumBooleanMember\")\n  }\n});\n(0, _utils.default)(\"EnumNumberBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    explicit: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    members: (0, _utils.validateArrayOfType)(\"EnumNumberMember\")\n  }\n});\n(0, _utils.default)(\"EnumStringBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    explicit: (0, _utils.validate)((0, _utils.assertValueType)(\"boolean\")),\n    members: (0, _utils.validateArrayOfType)([\"EnumStringMember\", \"EnumDefaultedMember\"])\n  }\n});\n(0, _utils.default)(\"EnumSymbolBody\", {\n  aliases: [\"EnumBody\"],\n  visitor: [\"members\"],\n  fields: {\n    members: (0, _utils.validateArrayOfType)(\"EnumDefaultedMember\")\n  }\n});\n(0, _utils.default)(\"EnumBooleanMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    init: (0, _utils.validateType)(\"BooleanLiteral\")\n  }\n});\n(0, _utils.default)(\"EnumNumberMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\", \"init\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    init: (0, _utils.validateType)(\"NumericLiteral\")\n  }\n});\n(0, _utils.default)(\"EnumStringMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\", \"init\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\"),\n    init: (0, _utils.validateType)(\"StringLiteral\")\n  }\n});\n(0, _utils.default)(\"EnumDefaultedMember\", {\n  aliases: [\"EnumMember\"],\n  visitor: [\"id\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\")\n  }\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n(0, _utils.default)(\"JSXAttribute\", {\n  visitor: [\"name\", \"value\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\", \"JSXNamespacedName\")\n    },\n    value: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"JSXElement\", \"JSXFragment\", \"StringLiteral\", \"JSXExpressionContainer\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXClosingElement\", {\n  visitor: [\"name\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\", \"JSXMemberExpression\", \"JSXNamespacedName\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXElement\", {\n  builder: [\"openingElement\", \"closingElement\", \"children\", \"selfClosing\"],\n  visitor: [\"openingElement\", \"children\", \"closingElement\"],\n  aliases: [\"JSX\", \"Immutable\", \"Expression\"],\n  fields: {\n    openingElement: {\n      validate: (0, _utils.assertNodeType)(\"JSXOpeningElement\")\n    },\n    closingElement: {\n      optional: true,\n      validate: (0, _utils.assertNodeType)(\"JSXClosingElement\")\n    },\n    children: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"JSXText\", \"JSXExpressionContainer\", \"JSXSpreadChild\", \"JSXElement\", \"JSXFragment\")))\n    },\n    selfClosing: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"JSXEmptyExpression\", {\n  aliases: [\"JSX\"]\n});\n(0, _utils.default)(\"JSXExpressionContainer\", {\n  visitor: [\"expression\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\", \"JSXEmptyExpression\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXSpreadChild\", {\n  visitor: [\"expression\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXIdentifier\", {\n  builder: [\"name\"],\n  aliases: [\"JSX\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXMemberExpression\", {\n  visitor: [\"object\", \"property\"],\n  aliases: [\"JSX\"],\n  fields: {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"JSXMemberExpression\", \"JSXIdentifier\")\n    },\n    property: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXNamespacedName\", {\n  visitor: [\"namespace\", \"name\"],\n  aliases: [\"JSX\"],\n  fields: {\n    namespace: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\")\n    },\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXOpeningElement\", {\n  builder: [\"name\", \"attributes\", \"selfClosing\"],\n  visitor: [\"name\", \"attributes\"],\n  aliases: [\"JSX\", \"Immutable\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"JSXIdentifier\", \"JSXMemberExpression\", \"JSXNamespacedName\")\n    },\n    selfClosing: {\n      default: false\n    },\n    attributes: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"JSXAttribute\", \"JSXSpreadAttribute\")))\n    },\n    typeParameters: {\n      validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"JSXSpreadAttribute\", {\n  visitor: [\"argument\"],\n  aliases: [\"JSX\"],\n  fields: {\n    argument: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXText\", {\n  aliases: [\"JSX\", \"Immutable\"],\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});\n(0, _utils.default)(\"JSXFragment\", {\n  builder: [\"openingFragment\", \"closingFragment\", \"children\"],\n  visitor: [\"openingFragment\", \"children\", \"closingFragment\"],\n  aliases: [\"JSX\", \"Immutable\", \"Expression\"],\n  fields: {\n    openingFragment: {\n      validate: (0, _utils.assertNodeType)(\"JSXOpeningFragment\")\n    },\n    closingFragment: {\n      validate: (0, _utils.assertNodeType)(\"JSXClosingFragment\")\n    },\n    children: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"JSXText\", \"JSXExpressionContainer\", \"JSXSpreadChild\", \"JSXElement\", \"JSXFragment\")))\n    }\n  }\n});\n(0, _utils.default)(\"JSXOpeningFragment\", {\n  aliases: [\"JSX\", \"Immutable\"]\n});\n(0, _utils.default)(\"JSXClosingFragment\", {\n  aliases: [\"JSX\", \"Immutable\"]\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PLACEHOLDERS_FLIPPED_ALIAS = exports.PLACEHOLDERS_ALIAS = exports.PLACEHOLDERS = void 0;\n\nvar _utils = require(\"./utils\");\n\nconst PLACEHOLDERS = [\"Identifier\", \"StringLiteral\", \"Expression\", \"Statement\", \"Declaration\", \"BlockStatement\", \"ClassBody\", \"Pattern\"];\nexports.PLACEHOLDERS = PLACEHOLDERS;\nconst PLACEHOLDERS_ALIAS = {\n  Declaration: [\"Statement\"],\n  Pattern: [\"PatternLike\", \"LVal\"]\n};\nexports.PLACEHOLDERS_ALIAS = PLACEHOLDERS_ALIAS;\n\nfor (const type of PLACEHOLDERS) {\n  const alias = _utils.ALIAS_KEYS[type];\n  if (alias == null ? void 0 : alias.length) PLACEHOLDERS_ALIAS[type] = alias;\n}\n\nconst PLACEHOLDERS_FLIPPED_ALIAS = {};\nexports.PLACEHOLDERS_FLIPPED_ALIAS = PLACEHOLDERS_FLIPPED_ALIAS;\nObject.keys(PLACEHOLDERS_ALIAS).forEach(type => {\n  PLACEHOLDERS_ALIAS[type].forEach(alias => {\n    if (!Object.hasOwnProperty.call(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {\n      PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];\n    }\n\n    PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);\n  });\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nvar _placeholders = require(\"./placeholders\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n(0, _utils.default)(\"Noop\", {\n  visitor: []\n});\n(0, _utils.default)(\"Placeholder\", {\n  visitor: [],\n  builder: [\"expectedNode\", \"name\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    },\n    expectedNode: {\n      validate: (0, _utils.assertOneOf)(..._placeholders.PLACEHOLDERS)\n    }\n  }\n});\n(0, _utils.default)(\"V8IntrinsicIdentifier\", {\n  builder: [\"name\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  }\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nvar _core = require(\"./core\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n(0, _utils.default)(\"ArgumentPlaceholder\", {});\n(0, _utils.default)(\"BindExpression\", {\n  visitor: [\"object\", \"callee\"],\n  aliases: [\"Expression\"],\n  fields: !process.env.BABEL_TYPES_8_BREAKING ? {\n    object: {\n      validate: Object.assign(() => {}, {\n        oneOfNodeTypes: [\"Expression\"]\n      })\n    },\n    callee: {\n      validate: Object.assign(() => {}, {\n        oneOfNodeTypes: [\"Expression\"]\n      })\n    }\n  } : {\n    object: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    },\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"ClassProperty\", {\n  visitor: [\"key\", \"value\", \"typeAnnotation\", \"decorators\"],\n  builder: [\"key\", \"value\", \"typeAnnotation\", \"decorators\", \"computed\", \"static\"],\n  aliases: [\"Property\"],\n  fields: Object.assign({}, _core.classMethodOrPropertyCommon, {\n    value: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    definite: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    typeAnnotation: {\n      validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    },\n    readonly: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    declare: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    }\n  })\n});\n(0, _utils.default)(\"PipelineTopicExpression\", {\n  builder: [\"expression\"],\n  visitor: [\"expression\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"PipelineBareFunction\", {\n  builder: [\"callee\"],\n  visitor: [\"callee\"],\n  fields: {\n    callee: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"PipelinePrimaryTopicReference\", {\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ClassPrivateProperty\", {\n  visitor: [\"key\", \"value\", \"decorators\"],\n  builder: [\"key\", \"value\", \"decorators\", \"static\"],\n  aliases: [\"Property\", \"Private\"],\n  fields: {\n    key: {\n      validate: (0, _utils.assertNodeType)(\"PrivateName\")\n    },\n    value: {\n      validate: (0, _utils.assertNodeType)(\"Expression\"),\n      optional: true\n    },\n    decorators: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n      optional: true\n    }\n  }\n});\n(0, _utils.default)(\"ClassPrivateMethod\", {\n  builder: [\"kind\", \"key\", \"params\", \"body\", \"static\"],\n  visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n  aliases: [\"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\", \"Private\"],\n  fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, _core.functionTypeAnnotationCommon, {\n    key: {\n      validate: (0, _utils.assertNodeType)(\"PrivateName\")\n    },\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  })\n});\n(0, _utils.default)(\"ImportAttribute\", {\n  visitor: [\"key\", \"value\"],\n  fields: {\n    key: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n    },\n    value: {\n      validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n    }\n  }\n});\n(0, _utils.default)(\"Decorator\", {\n  visitor: [\"expression\"],\n  fields: {\n    expression: {\n      validate: (0, _utils.assertNodeType)(\"Expression\")\n    }\n  }\n});\n(0, _utils.default)(\"DoExpression\", {\n  visitor: [\"body\"],\n  aliases: [\"Expression\"],\n  fields: {\n    body: {\n      validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n    }\n  }\n});\n(0, _utils.default)(\"ExportDefaultSpecifier\", {\n  visitor: [\"exported\"],\n  aliases: [\"ModuleSpecifier\"],\n  fields: {\n    exported: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"PrivateName\", {\n  visitor: [\"id\"],\n  aliases: [\"Private\"],\n  fields: {\n    id: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\")\n    }\n  }\n});\n(0, _utils.default)(\"RecordExpression\", {\n  visitor: [\"properties\"],\n  aliases: [\"Expression\"],\n  fields: {\n    properties: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ObjectProperty\", \"SpreadElement\")))\n    }\n  }\n});\n(0, _utils.default)(\"TupleExpression\", {\n  fields: {\n    elements: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\"))),\n      default: []\n    }\n  },\n  visitor: [\"elements\"],\n  aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"DecimalLiteral\", {\n  builder: [\"value\"],\n  fields: {\n    value: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    }\n  },\n  aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"StaticBlock\", {\n  visitor: [\"body\"],\n  fields: {\n    body: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n    }\n  },\n  aliases: [\"Scopable\", \"BlockParent\"]\n});", "\"use strict\";\n\nvar _utils = _interopRequireWildcard(require(\"./utils\"));\n\nvar _core = require(\"./core\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nconst bool = (0, _utils.assertValueType)(\"boolean\");\nconst tSFunctionTypeAnnotationCommon = {\n  returnType: {\n    validate: (0, _utils.assertNodeType)(\"TSTypeAnnotation\", \"Noop\"),\n    optional: true\n  },\n  typeParameters: {\n    validate: (0, _utils.assertNodeType)(\"TSTypeParameterDeclaration\", \"Noop\"),\n    optional: true\n  }\n};\n(0, _utils.default)(\"TSParameterProperty\", {\n  aliases: [\"LVal\"],\n  visitor: [\"parameter\"],\n  fields: {\n    accessibility: {\n      validate: (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\"),\n      optional: true\n    },\n    readonly: {\n      validate: (0, _utils.assertValueType)(\"boolean\"),\n      optional: true\n    },\n    parameter: {\n      validate: (0, _utils.assertNodeType)(\"Identifier\", \"AssignmentPattern\")\n    }\n  }\n});\n(0, _utils.default)(\"TSDeclareFunction\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"typeParameters\", \"params\", \"returnType\"],\n  fields: Object.assign({}, _core.functionDeclarationCommon, tSFunctionTypeAnnotationCommon)\n});\n(0, _utils.default)(\"TSDeclareMethod\", {\n  visitor: [\"decorators\", \"key\", \"typeParameters\", \"params\", \"returnType\"],\n  fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, tSFunctionTypeAnnotationCommon)\n});\n(0, _utils.default)(\"TSQualifiedName\", {\n  aliases: [\"TSEntityName\"],\n  visitor: [\"left\", \"right\"],\n  fields: {\n    left: (0, _utils.validateType)(\"TSEntityName\"),\n    right: (0, _utils.validateType)(\"Identifier\")\n  }\n});\nconst signatureDeclarationCommon = {\n  typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterDeclaration\"),\n  parameters: (0, _utils.validateArrayOfType)([\"Identifier\", \"RestElement\"]),\n  typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\")\n};\nconst callConstructSignatureDeclaration = {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"typeParameters\", \"parameters\", \"typeAnnotation\"],\n  fields: signatureDeclarationCommon\n};\n(0, _utils.default)(\"TSCallSignatureDeclaration\", callConstructSignatureDeclaration);\n(0, _utils.default)(\"TSConstructSignatureDeclaration\", callConstructSignatureDeclaration);\nconst namedTypeElementCommon = {\n  key: (0, _utils.validateType)(\"Expression\"),\n  computed: (0, _utils.validate)(bool),\n  optional: (0, _utils.validateOptional)(bool)\n};\n(0, _utils.default)(\"TSPropertySignature\", {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"key\", \"typeAnnotation\", \"initializer\"],\n  fields: Object.assign({}, namedTypeElementCommon, {\n    readonly: (0, _utils.validateOptional)(bool),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\"),\n    initializer: (0, _utils.validateOptionalType)(\"Expression\")\n  })\n});\n(0, _utils.default)(\"TSMethodSignature\", {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"key\", \"typeParameters\", \"parameters\", \"typeAnnotation\"],\n  fields: Object.assign({}, signatureDeclarationCommon, namedTypeElementCommon)\n});\n(0, _utils.default)(\"TSIndexSignature\", {\n  aliases: [\"TSTypeElement\"],\n  visitor: [\"parameters\", \"typeAnnotation\"],\n  fields: {\n    readonly: (0, _utils.validateOptional)(bool),\n    parameters: (0, _utils.validateArrayOfType)(\"Identifier\"),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\")\n  }\n});\nconst tsKeywordTypes = [\"TSAnyKeyword\", \"TSBooleanKeyword\", \"TSBigIntKeyword\", \"TSIntrinsicKeyword\", \"TSNeverKeyword\", \"TSNullKeyword\", \"TSNumberKeyword\", \"TSObjectKeyword\", \"TSStringKeyword\", \"TSSymbolKeyword\", \"TSUndefinedKeyword\", \"TSUnknownKeyword\", \"TSVoidKeyword\"];\n\nfor (const type of tsKeywordTypes) {\n  (0, _utils.default)(type, {\n    aliases: [\"TSType\", \"TSBaseType\"],\n    visitor: [],\n    fields: {}\n  });\n}\n\n(0, _utils.default)(\"TSThisType\", {\n  aliases: [\"TSType\", \"TSBaseType\"],\n  visitor: [],\n  fields: {}\n});\nconst fnOrCtr = {\n  aliases: [\"TSType\"],\n  visitor: [\"typeParameters\", \"parameters\", \"typeAnnotation\"],\n  fields: signatureDeclarationCommon\n};\n(0, _utils.default)(\"TSFunctionType\", fnOrCtr);\n(0, _utils.default)(\"TSConstructorType\", fnOrCtr);\n(0, _utils.default)(\"TSTypeReference\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeName\", \"typeParameters\"],\n  fields: {\n    typeName: (0, _utils.validateType)(\"TSEntityName\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"TSTypePredicate\", {\n  aliases: [\"TSType\"],\n  visitor: [\"parameterName\", \"typeAnnotation\"],\n  builder: [\"parameterName\", \"typeAnnotation\", \"asserts\"],\n  fields: {\n    parameterName: (0, _utils.validateType)([\"Identifier\", \"TSThisType\"]),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSTypeAnnotation\"),\n    asserts: (0, _utils.validateOptional)(bool)\n  }\n});\n(0, _utils.default)(\"TSTypeQuery\", {\n  aliases: [\"TSType\"],\n  visitor: [\"exprName\"],\n  fields: {\n    exprName: (0, _utils.validateType)([\"TSEntityName\", \"TSImportType\"])\n  }\n});\n(0, _utils.default)(\"TSTypeLiteral\", {\n  aliases: [\"TSType\"],\n  visitor: [\"members\"],\n  fields: {\n    members: (0, _utils.validateArrayOfType)(\"TSTypeElement\")\n  }\n});\n(0, _utils.default)(\"TSArrayType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"elementType\"],\n  fields: {\n    elementType: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSTupleType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"elementTypes\"],\n  fields: {\n    elementTypes: (0, _utils.validateArrayOfType)([\"TSType\", \"TSNamedTupleMember\"])\n  }\n});\n(0, _utils.default)(\"TSOptionalType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSRestType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSNamedTupleMember\", {\n  visitor: [\"label\", \"elementType\"],\n  builder: [\"label\", \"elementType\", \"optional\"],\n  fields: {\n    label: (0, _utils.validateType)(\"Identifier\"),\n    optional: {\n      validate: bool,\n      default: false\n    },\n    elementType: (0, _utils.validateType)(\"TSType\")\n  }\n});\nconst unionOrIntersection = {\n  aliases: [\"TSType\"],\n  visitor: [\"types\"],\n  fields: {\n    types: (0, _utils.validateArrayOfType)(\"TSType\")\n  }\n};\n(0, _utils.default)(\"TSUnionType\", unionOrIntersection);\n(0, _utils.default)(\"TSIntersectionType\", unionOrIntersection);\n(0, _utils.default)(\"TSConditionalType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"checkType\", \"extendsType\", \"trueType\", \"falseType\"],\n  fields: {\n    checkType: (0, _utils.validateType)(\"TSType\"),\n    extendsType: (0, _utils.validateType)(\"TSType\"),\n    trueType: (0, _utils.validateType)(\"TSType\"),\n    falseType: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSInferType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeParameter\"],\n  fields: {\n    typeParameter: (0, _utils.validateType)(\"TSTypeParameter\")\n  }\n});\n(0, _utils.default)(\"TSParenthesizedType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSTypeOperator\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    operator: (0, _utils.validate)((0, _utils.assertValueType)(\"string\")),\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSIndexedAccessType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"objectType\", \"indexType\"],\n  fields: {\n    objectType: (0, _utils.validateType)(\"TSType\"),\n    indexType: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSMappedType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"typeParameter\", \"typeAnnotation\", \"nameType\"],\n  fields: {\n    readonly: (0, _utils.validateOptional)(bool),\n    typeParameter: (0, _utils.validateType)(\"TSTypeParameter\"),\n    optional: (0, _utils.validateOptional)(bool),\n    typeAnnotation: (0, _utils.validateOptionalType)(\"TSType\"),\n    nameType: (0, _utils.validateOptionalType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSLiteralType\", {\n  aliases: [\"TSType\", \"TSBaseType\"],\n  visitor: [\"literal\"],\n  fields: {\n    literal: (0, _utils.validateType)([\"NumericLiteral\", \"StringLiteral\", \"BooleanLiteral\", \"BigIntLiteral\"])\n  }\n});\n(0, _utils.default)(\"TSExpressionWithTypeArguments\", {\n  aliases: [\"TSType\"],\n  visitor: [\"expression\", \"typeParameters\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"TSEntityName\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"TSInterfaceDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"typeParameters\", \"extends\", \"body\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterDeclaration\"),\n    extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)(\"TSExpressionWithTypeArguments\")),\n    body: (0, _utils.validateType)(\"TSInterfaceBody\")\n  }\n});\n(0, _utils.default)(\"TSInterfaceBody\", {\n  visitor: [\"body\"],\n  fields: {\n    body: (0, _utils.validateArrayOfType)(\"TSTypeElement\")\n  }\n});\n(0, _utils.default)(\"TSTypeAliasDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"typeParameters\", \"typeAnnotation\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterDeclaration\"),\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSAsExpression\", {\n  aliases: [\"Expression\"],\n  visitor: [\"expression\", \"typeAnnotation\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\"),\n    typeAnnotation: (0, _utils.validateType)(\"TSType\")\n  }\n});\n(0, _utils.default)(\"TSTypeAssertion\", {\n  aliases: [\"Expression\"],\n  visitor: [\"typeAnnotation\", \"expression\"],\n  fields: {\n    typeAnnotation: (0, _utils.validateType)(\"TSType\"),\n    expression: (0, _utils.validateType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSEnumDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"members\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    const: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    members: (0, _utils.validateArrayOfType)(\"TSEnumMember\"),\n    initializer: (0, _utils.validateOptionalType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSEnumMember\", {\n  visitor: [\"id\", \"initializer\"],\n  fields: {\n    id: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    initializer: (0, _utils.validateOptionalType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSModuleDeclaration\", {\n  aliases: [\"Statement\", \"Declaration\"],\n  visitor: [\"id\", \"body\"],\n  fields: {\n    declare: (0, _utils.validateOptional)(bool),\n    global: (0, _utils.validateOptional)(bool),\n    id: (0, _utils.validateType)([\"Identifier\", \"StringLiteral\"]),\n    body: (0, _utils.validateType)([\"TSModuleBlock\", \"TSModuleDeclaration\"])\n  }\n});\n(0, _utils.default)(\"TSModuleBlock\", {\n  aliases: [\"Scopable\", \"Block\", \"BlockParent\"],\n  visitor: [\"body\"],\n  fields: {\n    body: (0, _utils.validateArrayOfType)(\"Statement\")\n  }\n});\n(0, _utils.default)(\"TSImportType\", {\n  aliases: [\"TSType\"],\n  visitor: [\"argument\", \"qualifier\", \"typeParameters\"],\n  fields: {\n    argument: (0, _utils.validateType)(\"StringLiteral\"),\n    qualifier: (0, _utils.validateOptionalType)(\"TSEntityName\"),\n    typeParameters: (0, _utils.validateOptionalType)(\"TSTypeParameterInstantiation\")\n  }\n});\n(0, _utils.default)(\"TSImportEqualsDeclaration\", {\n  aliases: [\"Statement\"],\n  visitor: [\"id\", \"moduleReference\"],\n  fields: {\n    isExport: (0, _utils.validate)(bool),\n    id: (0, _utils.validateType)(\"Identifier\"),\n    moduleReference: (0, _utils.validateType)([\"TSEntityName\", \"TSExternalModuleReference\"])\n  }\n});\n(0, _utils.default)(\"TSExternalModuleReference\", {\n  visitor: [\"expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"StringLiteral\")\n  }\n});\n(0, _utils.default)(\"TSNonNullExpression\", {\n  aliases: [\"Expression\"],\n  visitor: [\"expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSExportAssignment\", {\n  aliases: [\"Statement\"],\n  visitor: [\"expression\"],\n  fields: {\n    expression: (0, _utils.validateType)(\"Expression\")\n  }\n});\n(0, _utils.default)(\"TSNamespaceExportDeclaration\", {\n  aliases: [\"Statement\"],\n  visitor: [\"id\"],\n  fields: {\n    id: (0, _utils.validateType)(\"Identifier\")\n  }\n});\n(0, _utils.default)(\"TSTypeAnnotation\", {\n  visitor: [\"typeAnnotation\"],\n  fields: {\n    typeAnnotation: {\n      validate: (0, _utils.assertNodeType)(\"TSType\")\n    }\n  }\n});\n(0, _utils.default)(\"TSTypeParameterInstantiation\", {\n  visitor: [\"params\"],\n  fields: {\n    params: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSType\")))\n    }\n  }\n});\n(0, _utils.default)(\"TSTypeParameterDeclaration\", {\n  visitor: [\"params\"],\n  fields: {\n    params: {\n      validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSTypeParameter\")))\n    }\n  }\n});\n(0, _utils.default)(\"TSTypeParameter\", {\n  builder: [\"constraint\", \"default\", \"name\"],\n  visitor: [\"constraint\", \"default\"],\n  fields: {\n    name: {\n      validate: (0, _utils.assertValueType)(\"string\")\n    },\n    constraint: {\n      validate: (0, _utils.assertNodeType)(\"TSType\"),\n      optional: true\n    },\n    default: {\n      validate: (0, _utils.assertNodeType)(\"TSType\"),\n      optional: true\n    }\n  }\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"VISITOR_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.VISITOR_KEYS;\n  }\n});\nObject.defineProperty(exports, \"ALIAS_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.ALIAS_KEYS;\n  }\n});\nObject.defineProperty(exports, \"FLIPPED_ALIAS_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.FLIPPED_ALIAS_KEYS;\n  }\n});\nObject.defineProperty(exports, \"NODE_FIELDS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.NODE_FIELDS;\n  }\n});\nObject.defineProperty(exports, \"BUILDER_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.BUILDER_KEYS;\n  }\n});\nObject.defineProperty(exports, \"DEPRECATED_KEYS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.DEPRECATED_KEYS;\n  }\n});\nObject.defineProperty(exports, \"NODE_PARENT_VALIDATIONS\", {\n  enumerable: true,\n  get: function () {\n    return _utils.NODE_PARENT_VALIDATIONS;\n  }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS\", {\n  enumerable: true,\n  get: function () {\n    return _placeholders.PLACEHOLDERS;\n  }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS_ALIAS\", {\n  enumerable: true,\n  get: function () {\n    return _placeholders.PLACEHOLDERS_ALIAS;\n  }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS_FLIPPED_ALIAS\", {\n  enumerable: true,\n  get: function () {\n    return _placeholders.PLACEHOLDERS_FLIPPED_ALIAS;\n  }\n});\nexports.TYPES = void 0;\n\nvar _toFastProperties = _interopRequireDefault(require(\"to-fast-properties\"));\n\nrequire(\"./core\");\n\nrequire(\"./flow\");\n\nrequire(\"./jsx\");\n\nrequire(\"./misc\");\n\nrequire(\"./experimental\");\n\nrequire(\"./typescript\");\n\nvar _utils = require(\"./utils\");\n\nvar _placeholders = require(\"./placeholders\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(0, _toFastProperties.default)(_utils.VISITOR_KEYS);\n(0, _toFastProperties.default)(_utils.ALIAS_KEYS);\n(0, _toFastProperties.default)(_utils.FLIPPED_ALIAS_KEYS);\n(0, _toFastProperties.default)(_utils.NODE_FIELDS);\n(0, _toFastProperties.default)(_utils.BUILDER_KEYS);\n(0, _toFastProperties.default)(_utils.DEPRECATED_KEYS);\n(0, _toFastProperties.default)(_placeholders.PLACEHOLDERS_ALIAS);\n(0, _toFastProperties.default)(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS);\nconst TYPES = Object.keys(_utils.VISITOR_KEYS).concat(Object.keys(_utils.FLIPPED_ALIAS_KEYS)).concat(Object.keys(_utils.DEPRECATED_KEYS));\nexports.TYPES = TYPES;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = builder;\n\nvar _clone = _interopRequireDefault(require(\"lodash/clone\"));\n\nvar _definitions = require(\"../definitions\");\n\nvar _validate = _interopRequireDefault(require(\"../validators/validate\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction builder(type, ...args) {\n  const keys = _definitions.BUILDER_KEYS[type];\n  const countArgs = args.length;\n\n  if (countArgs > keys.length) {\n    throw new Error(`${type}: Too many arguments passed. Received ${countArgs} but can receive no more than ${keys.length}`);\n  }\n\n  const node = {\n    type\n  };\n  let i = 0;\n  keys.forEach(key => {\n    const field = _definitions.NODE_FIELDS[type][key];\n    let arg;\n    if (i < countArgs) arg = args[i];\n    if (arg === undefined) arg = (0, _clone.default)(field.default);\n    node[key] = arg;\n    i++;\n  });\n\n  for (const key of Object.keys(node)) {\n    (0, _validate.default)(node, key, node[key]);\n  }\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ArrayExpression = exports.arrayExpression = arrayExpression;\nexports.AssignmentExpression = exports.assignmentExpression = assignmentExpression;\nexports.BinaryExpression = exports.binaryExpression = binaryExpression;\nexports.InterpreterDirective = exports.interpreterDirective = interpreterDirective;\nexports.Directive = exports.directive = directive;\nexports.DirectiveLiteral = exports.directiveLiteral = directiveLiteral;\nexports.BlockStatement = exports.blockStatement = blockStatement;\nexports.BreakStatement = exports.breakStatement = breakStatement;\nexports.CallExpression = exports.callExpression = callExpression;\nexports.CatchClause = exports.catchClause = catchClause;\nexports.ConditionalExpression = exports.conditionalExpression = conditionalExpression;\nexports.ContinueStatement = exports.continueStatement = continueStatement;\nexports.DebuggerStatement = exports.debuggerStatement = debuggerStatement;\nexports.DoWhileStatement = exports.doWhileStatement = doWhileStatement;\nexports.EmptyStatement = exports.emptyStatement = emptyStatement;\nexports.ExpressionStatement = exports.expressionStatement = expressionStatement;\nexports.File = exports.file = file;\nexports.ForInStatement = exports.forInStatement = forInStatement;\nexports.ForStatement = exports.forStatement = forStatement;\nexports.FunctionDeclaration = exports.functionDeclaration = functionDeclaration;\nexports.FunctionExpression = exports.functionExpression = functionExpression;\nexports.Identifier = exports.identifier = identifier;\nexports.IfStatement = exports.ifStatement = ifStatement;\nexports.LabeledStatement = exports.labeledStatement = labeledStatement;\nexports.StringLiteral = exports.stringLiteral = stringLiteral;\nexports.NumericLiteral = exports.numericLiteral = numericLiteral;\nexports.NullLiteral = exports.nullLiteral = nullLiteral;\nexports.BooleanLiteral = exports.booleanLiteral = booleanLiteral;\nexports.RegExpLiteral = exports.regExpLiteral = regExpLiteral;\nexports.LogicalExpression = exports.logicalExpression = logicalExpression;\nexports.MemberExpression = exports.memberExpression = memberExpression;\nexports.NewExpression = exports.newExpression = newExpression;\nexports.Program = exports.program = program;\nexports.ObjectExpression = exports.objectExpression = objectExpression;\nexports.ObjectMethod = exports.objectMethod = objectMethod;\nexports.ObjectProperty = exports.objectProperty = objectProperty;\nexports.RestElement = exports.restElement = restElement;\nexports.ReturnStatement = exports.returnStatement = returnStatement;\nexports.SequenceExpression = exports.sequenceExpression = sequenceExpression;\nexports.ParenthesizedExpression = exports.parenthesizedExpression = parenthesizedExpression;\nexports.SwitchCase = exports.switchCase = switchCase;\nexports.SwitchStatement = exports.switchStatement = switchStatement;\nexports.ThisExpression = exports.thisExpression = thisExpression;\nexports.ThrowStatement = exports.throwStatement = throwStatement;\nexports.TryStatement = exports.tryStatement = tryStatement;\nexports.UnaryExpression = exports.unaryExpression = unaryExpression;\nexports.UpdateExpression = exports.updateExpression = updateExpression;\nexports.VariableDeclaration = exports.variableDeclaration = variableDeclaration;\nexports.VariableDeclarator = exports.variableDeclarator = variableDeclarator;\nexports.WhileStatement = exports.whileStatement = whileStatement;\nexports.WithStatement = exports.withStatement = withStatement;\nexports.AssignmentPattern = exports.assignmentPattern = assignmentPattern;\nexports.ArrayPattern = exports.arrayPattern = arrayPattern;\nexports.ArrowFunctionExpression = exports.arrowFunctionExpression = arrowFunctionExpression;\nexports.ClassBody = exports.classBody = classBody;\nexports.ClassExpression = exports.classExpression = classExpression;\nexports.ClassDeclaration = exports.classDeclaration = classDeclaration;\nexports.ExportAllDeclaration = exports.exportAllDeclaration = exportAllDeclaration;\nexports.ExportDefaultDeclaration = exports.exportDefaultDeclaration = exportDefaultDeclaration;\nexports.ExportNamedDeclaration = exports.exportNamedDeclaration = exportNamedDeclaration;\nexports.ExportSpecifier = exports.exportSpecifier = exportSpecifier;\nexports.ForOfStatement = exports.forOfStatement = forOfStatement;\nexports.ImportDeclaration = exports.importDeclaration = importDeclaration;\nexports.ImportDefaultSpecifier = exports.importDefaultSpecifier = importDefaultSpecifier;\nexports.ImportNamespaceSpecifier = exports.importNamespaceSpecifier = importNamespaceSpecifier;\nexports.ImportSpecifier = exports.importSpecifier = importSpecifier;\nexports.MetaProperty = exports.metaProperty = metaProperty;\nexports.ClassMethod = exports.classMethod = classMethod;\nexports.ObjectPattern = exports.objectPattern = objectPattern;\nexports.SpreadElement = exports.spreadElement = spreadElement;\nexports.super = exports.Super = _super;\nexports.TaggedTemplateExpression = exports.taggedTemplateExpression = taggedTemplateExpression;\nexports.TemplateElement = exports.templateElement = templateElement;\nexports.TemplateLiteral = exports.templateLiteral = templateLiteral;\nexports.YieldExpression = exports.yieldExpression = yieldExpression;\nexports.AwaitExpression = exports.awaitExpression = awaitExpression;\nexports.import = exports.Import = _import;\nexports.BigIntLiteral = exports.bigIntLiteral = bigIntLiteral;\nexports.ExportNamespaceSpecifier = exports.exportNamespaceSpecifier = exportNamespaceSpecifier;\nexports.OptionalMemberExpression = exports.optionalMemberExpression = optionalMemberExpression;\nexports.OptionalCallExpression = exports.optionalCallExpression = optionalCallExpression;\nexports.AnyTypeAnnotation = exports.anyTypeAnnotation = anyTypeAnnotation;\nexports.ArrayTypeAnnotation = exports.arrayTypeAnnotation = arrayTypeAnnotation;\nexports.BooleanTypeAnnotation = exports.booleanTypeAnnotation = booleanTypeAnnotation;\nexports.BooleanLiteralTypeAnnotation = exports.booleanLiteralTypeAnnotation = booleanLiteralTypeAnnotation;\nexports.NullLiteralTypeAnnotation = exports.nullLiteralTypeAnnotation = nullLiteralTypeAnnotation;\nexports.ClassImplements = exports.classImplements = classImplements;\nexports.DeclareClass = exports.declareClass = declareClass;\nexports.DeclareFunction = exports.declareFunction = declareFunction;\nexports.DeclareInterface = exports.declareInterface = declareInterface;\nexports.DeclareModule = exports.declareModule = declareModule;\nexports.DeclareModuleExports = exports.declareModuleExports = declareModuleExports;\nexports.DeclareTypeAlias = exports.declareTypeAlias = declareTypeAlias;\nexports.DeclareOpaqueType = exports.declareOpaqueType = declareOpaqueType;\nexports.DeclareVariable = exports.declareVariable = declareVariable;\nexports.DeclareExportDeclaration = exports.declareExportDeclaration = declareExportDeclaration;\nexports.DeclareExportAllDeclaration = exports.declareExportAllDeclaration = declareExportAllDeclaration;\nexports.DeclaredPredicate = exports.declaredPredicate = declaredPredicate;\nexports.ExistsTypeAnnotation = exports.existsTypeAnnotation = existsTypeAnnotation;\nexports.FunctionTypeAnnotation = exports.functionTypeAnnotation = functionTypeAnnotation;\nexports.FunctionTypeParam = exports.functionTypeParam = functionTypeParam;\nexports.GenericTypeAnnotation = exports.genericTypeAnnotation = genericTypeAnnotation;\nexports.InferredPredicate = exports.inferredPredicate = inferredPredicate;\nexports.InterfaceExtends = exports.interfaceExtends = interfaceExtends;\nexports.InterfaceDeclaration = exports.interfaceDeclaration = interfaceDeclaration;\nexports.InterfaceTypeAnnotation = exports.interfaceTypeAnnotation = interfaceTypeAnnotation;\nexports.IntersectionTypeAnnotation = exports.intersectionTypeAnnotation = intersectionTypeAnnotation;\nexports.MixedTypeAnnotation = exports.mixedTypeAnnotation = mixedTypeAnnotation;\nexports.EmptyTypeAnnotation = exports.emptyTypeAnnotation = emptyTypeAnnotation;\nexports.NullableTypeAnnotation = exports.nullableTypeAnnotation = nullableTypeAnnotation;\nexports.NumberLiteralTypeAnnotation = exports.numberLiteralTypeAnnotation = numberLiteralTypeAnnotation;\nexports.NumberTypeAnnotation = exports.numberTypeAnnotation = numberTypeAnnotation;\nexports.ObjectTypeAnnotation = exports.objectTypeAnnotation = objectTypeAnnotation;\nexports.ObjectTypeInternalSlot = exports.objectTypeInternalSlot = objectTypeInternalSlot;\nexports.ObjectTypeCallProperty = exports.objectTypeCallProperty = objectTypeCallProperty;\nexports.ObjectTypeIndexer = exports.objectTypeIndexer = objectTypeIndexer;\nexports.ObjectTypeProperty = exports.objectTypeProperty = objectTypeProperty;\nexports.ObjectTypeSpreadProperty = exports.objectTypeSpreadProperty = objectTypeSpreadProperty;\nexports.OpaqueType = exports.opaqueType = opaqueType;\nexports.QualifiedTypeIdentifier = exports.qualifiedTypeIdentifier = qualifiedTypeIdentifier;\nexports.StringLiteralTypeAnnotation = exports.stringLiteralTypeAnnotation = stringLiteralTypeAnnotation;\nexports.StringTypeAnnotation = exports.stringTypeAnnotation = stringTypeAnnotation;\nexports.SymbolTypeAnnotation = exports.symbolTypeAnnotation = symbolTypeAnnotation;\nexports.ThisTypeAnnotation = exports.thisTypeAnnotation = thisTypeAnnotation;\nexports.TupleTypeAnnotation = exports.tupleTypeAnnotation = tupleTypeAnnotation;\nexports.TypeofTypeAnnotation = exports.typeofTypeAnnotation = typeofTypeAnnotation;\nexports.TypeAlias = exports.typeAlias = typeAlias;\nexports.TypeAnnotation = exports.typeAnnotation = typeAnnotation;\nexports.TypeCastExpression = exports.typeCastExpression = typeCastExpression;\nexports.TypeParameter = exports.typeParameter = typeParameter;\nexports.TypeParameterDeclaration = exports.typeParameterDeclaration = typeParameterDeclaration;\nexports.TypeParameterInstantiation = exports.typeParameterInstantiation = typeParameterInstantiation;\nexports.UnionTypeAnnotation = exports.unionTypeAnnotation = unionTypeAnnotation;\nexports.Variance = exports.variance = variance;\nexports.VoidTypeAnnotation = exports.voidTypeAnnotation = voidTypeAnnotation;\nexports.EnumDeclaration = exports.enumDeclaration = enumDeclaration;\nexports.EnumBooleanBody = exports.enumBooleanBody = enumBooleanBody;\nexports.EnumNumberBody = exports.enumNumberBody = enumNumberBody;\nexports.EnumStringBody = exports.enumStringBody = enumStringBody;\nexports.EnumSymbolBody = exports.enumSymbolBody = enumSymbolBody;\nexports.EnumBooleanMember = exports.enumBooleanMember = enumBooleanMember;\nexports.EnumNumberMember = exports.enumNumberMember = enumNumberMember;\nexports.EnumStringMember = exports.enumStringMember = enumStringMember;\nexports.EnumDefaultedMember = exports.enumDefaultedMember = enumDefaultedMember;\nexports.jSXAttribute = exports.JSXAttribute = exports.jsxAttribute = jsxAttribute;\nexports.jSXClosingElement = exports.JSXClosingElement = exports.jsxClosingElement = jsxClosingElement;\nexports.jSXElement = exports.JSXElement = exports.jsxElement = jsxElement;\nexports.jSXEmptyExpression = exports.JSXEmptyExpression = exports.jsxEmptyExpression = jsxEmptyExpression;\nexports.jSXExpressionContainer = exports.JSXExpressionContainer = exports.jsxExpressionContainer = jsxExpressionContainer;\nexports.jSXSpreadChild = exports.JSXSpreadChild = exports.jsxSpreadChild = jsxSpreadChild;\nexports.jSXIdentifier = exports.JSXIdentifier = exports.jsxIdentifier = jsxIdentifier;\nexports.jSXMemberExpression = exports.JSXMemberExpression = exports.jsxMemberExpression = jsxMemberExpression;\nexports.jSXNamespacedName = exports.JSXNamespacedName = exports.jsxNamespacedName = jsxNamespacedName;\nexports.jSXOpeningElement = exports.JSXOpeningElement = exports.jsxOpeningElement = jsxOpeningElement;\nexports.jSXSpreadAttribute = exports.JSXSpreadAttribute = exports.jsxSpreadAttribute = jsxSpreadAttribute;\nexports.jSXText = exports.JSXText = exports.jsxText = jsxText;\nexports.jSXFragment = exports.JSXFragment = exports.jsxFragment = jsxFragment;\nexports.jSXOpeningFragment = exports.JSXOpeningFragment = exports.jsxOpeningFragment = jsxOpeningFragment;\nexports.jSXClosingFragment = exports.JSXClosingFragment = exports.jsxClosingFragment = jsxClosingFragment;\nexports.Noop = exports.noop = noop;\nexports.Placeholder = exports.placeholder = placeholder;\nexports.V8IntrinsicIdentifier = exports.v8IntrinsicIdentifier = v8IntrinsicIdentifier;\nexports.ArgumentPlaceholder = exports.argumentPlaceholder = argumentPlaceholder;\nexports.BindExpression = exports.bindExpression = bindExpression;\nexports.ClassProperty = exports.classProperty = classProperty;\nexports.PipelineTopicExpression = exports.pipelineTopicExpression = pipelineTopicExpression;\nexports.PipelineBareFunction = exports.pipelineBareFunction = pipelineBareFunction;\nexports.PipelinePrimaryTopicReference = exports.pipelinePrimaryTopicReference = pipelinePrimaryTopicReference;\nexports.ClassPrivateProperty = exports.classPrivateProperty = classPrivateProperty;\nexports.ClassPrivateMethod = exports.classPrivateMethod = classPrivateMethod;\nexports.ImportAttribute = exports.importAttribute = importAttribute;\nexports.Decorator = exports.decorator = decorator;\nexports.DoExpression = exports.doExpression = doExpression;\nexports.ExportDefaultSpecifier = exports.exportDefaultSpecifier = exportDefaultSpecifier;\nexports.PrivateName = exports.privateName = privateName;\nexports.RecordExpression = exports.recordExpression = recordExpression;\nexports.TupleExpression = exports.tupleExpression = tupleExpression;\nexports.DecimalLiteral = exports.decimalLiteral = decimalLiteral;\nexports.StaticBlock = exports.staticBlock = staticBlock;\nexports.tSParameterProperty = exports.TSParameterProperty = exports.tsParameterProperty = tsParameterProperty;\nexports.tSDeclareFunction = exports.TSDeclareFunction = exports.tsDeclareFunction = tsDeclareFunction;\nexports.tSDeclareMethod = exports.TSDeclareMethod = exports.tsDeclareMethod = tsDeclareMethod;\nexports.tSQualifiedName = exports.TSQualifiedName = exports.tsQualifiedName = tsQualifiedName;\nexports.tSCallSignatureDeclaration = exports.TSCallSignatureDeclaration = exports.tsCallSignatureDeclaration = tsCallSignatureDeclaration;\nexports.tSConstructSignatureDeclaration = exports.TSConstructSignatureDeclaration = exports.tsConstructSignatureDeclaration = tsConstructSignatureDeclaration;\nexports.tSPropertySignature = exports.TSPropertySignature = exports.tsPropertySignature = tsPropertySignature;\nexports.tSMethodSignature = exports.TSMethodSignature = exports.tsMethodSignature = tsMethodSignature;\nexports.tSIndexSignature = exports.TSIndexSignature = exports.tsIndexSignature = tsIndexSignature;\nexports.tSAnyKeyword = exports.TSAnyKeyword = exports.tsAnyKeyword = tsAnyKeyword;\nexports.tSBooleanKeyword = exports.TSBooleanKeyword = exports.tsBooleanKeyword = tsBooleanKeyword;\nexports.tSBigIntKeyword = exports.TSBigIntKeyword = exports.tsBigIntKeyword = tsBigIntKeyword;\nexports.tSIntrinsicKeyword = exports.TSIntrinsicKeyword = exports.tsIntrinsicKeyword = tsIntrinsicKeyword;\nexports.tSNeverKeyword = exports.TSNeverKeyword = exports.tsNeverKeyword = tsNeverKeyword;\nexports.tSNullKeyword = exports.TSNullKeyword = exports.tsNullKeyword = tsNullKeyword;\nexports.tSNumberKeyword = exports.TSNumberKeyword = exports.tsNumberKeyword = tsNumberKeyword;\nexports.tSObjectKeyword = exports.TSObjectKeyword = exports.tsObjectKeyword = tsObjectKeyword;\nexports.tSStringKeyword = exports.TSStringKeyword = exports.tsStringKeyword = tsStringKeyword;\nexports.tSSymbolKeyword = exports.TSSymbolKeyword = exports.tsSymbolKeyword = tsSymbolKeyword;\nexports.tSUndefinedKeyword = exports.TSUndefinedKeyword = exports.tsUndefinedKeyword = tsUndefinedKeyword;\nexports.tSUnknownKeyword = exports.TSUnknownKeyword = exports.tsUnknownKeyword = tsUnknownKeyword;\nexports.tSVoidKeyword = exports.TSVoidKeyword = exports.tsVoidKeyword = tsVoidKeyword;\nexports.tSThisType = exports.TSThisType = exports.tsThisType = tsThisType;\nexports.tSFunctionType = exports.TSFunctionType = exports.tsFunctionType = tsFunctionType;\nexports.tSConstructorType = exports.TSConstructorType = exports.tsConstructorType = tsConstructorType;\nexports.tSTypeReference = exports.TSTypeReference = exports.tsTypeReference = tsTypeReference;\nexports.tSTypePredicate = exports.TSTypePredicate = exports.tsTypePredicate = tsTypePredicate;\nexports.tSTypeQuery = exports.TSTypeQuery = exports.tsTypeQuery = tsTypeQuery;\nexports.tSTypeLiteral = exports.TSTypeLiteral = exports.tsTypeLiteral = tsTypeLiteral;\nexports.tSArrayType = exports.TSArrayType = exports.tsArrayType = tsArrayType;\nexports.tSTupleType = exports.TSTupleType = exports.tsTupleType = tsTupleType;\nexports.tSOptionalType = exports.TSOptionalType = exports.tsOptionalType = tsOptionalType;\nexports.tSRestType = exports.TSRestType = exports.tsRestType = tsRestType;\nexports.tSNamedTupleMember = exports.TSNamedTupleMember = exports.tsNamedTupleMember = tsNamedTupleMember;\nexports.tSUnionType = exports.TSUnionType = exports.tsUnionType = tsUnionType;\nexports.tSIntersectionType = exports.TSIntersectionType = exports.tsIntersectionType = tsIntersectionType;\nexports.tSConditionalType = exports.TSConditionalType = exports.tsConditionalType = tsConditionalType;\nexports.tSInferType = exports.TSInferType = exports.tsInferType = tsInferType;\nexports.tSParenthesizedType = exports.TSParenthesizedType = exports.tsParenthesizedType = tsParenthesizedType;\nexports.tSTypeOperator = exports.TSTypeOperator = exports.tsTypeOperator = tsTypeOperator;\nexports.tSIndexedAccessType = exports.TSIndexedAccessType = exports.tsIndexedAccessType = tsIndexedAccessType;\nexports.tSMappedType = exports.TSMappedType = exports.tsMappedType = tsMappedType;\nexports.tSLiteralType = exports.TSLiteralType = exports.tsLiteralType = tsLiteralType;\nexports.tSExpressionWithTypeArguments = exports.TSExpressionWithTypeArguments = exports.tsExpressionWithTypeArguments = tsExpressionWithTypeArguments;\nexports.tSInterfaceDeclaration = exports.TSInterfaceDeclaration = exports.tsInterfaceDeclaration = tsInterfaceDeclaration;\nexports.tSInterfaceBody = exports.TSInterfaceBody = exports.tsInterfaceBody = tsInterfaceBody;\nexports.tSTypeAliasDeclaration = exports.TSTypeAliasDeclaration = exports.tsTypeAliasDeclaration = tsTypeAliasDeclaration;\nexports.tSAsExpression = exports.TSAsExpression = exports.tsAsExpression = tsAsExpression;\nexports.tSTypeAssertion = exports.TSTypeAssertion = exports.tsTypeAssertion = tsTypeAssertion;\nexports.tSEnumDeclaration = exports.TSEnumDeclaration = exports.tsEnumDeclaration = tsEnumDeclaration;\nexports.tSEnumMember = exports.TSEnumMember = exports.tsEnumMember = tsEnumMember;\nexports.tSModuleDeclaration = exports.TSModuleDeclaration = exports.tsModuleDeclaration = tsModuleDeclaration;\nexports.tSModuleBlock = exports.TSModuleBlock = exports.tsModuleBlock = tsModuleBlock;\nexports.tSImportType = exports.TSImportType = exports.tsImportType = tsImportType;\nexports.tSImportEqualsDeclaration = exports.TSImportEqualsDeclaration = exports.tsImportEqualsDeclaration = tsImportEqualsDeclaration;\nexports.tSExternalModuleReference = exports.TSExternalModuleReference = exports.tsExternalModuleReference = tsExternalModuleReference;\nexports.tSNonNullExpression = exports.TSNonNullExpression = exports.tsNonNullExpression = tsNonNullExpression;\nexports.tSExportAssignment = exports.TSExportAssignment = exports.tsExportAssignment = tsExportAssignment;\nexports.tSNamespaceExportDeclaration = exports.TSNamespaceExportDeclaration = exports.tsNamespaceExportDeclaration = tsNamespaceExportDeclaration;\nexports.tSTypeAnnotation = exports.TSTypeAnnotation = exports.tsTypeAnnotation = tsTypeAnnotation;\nexports.tSTypeParameterInstantiation = exports.TSTypeParameterInstantiation = exports.tsTypeParameterInstantiation = tsTypeParameterInstantiation;\nexports.tSTypeParameterDeclaration = exports.TSTypeParameterDeclaration = exports.tsTypeParameterDeclaration = tsTypeParameterDeclaration;\nexports.tSTypeParameter = exports.TSTypeParameter = exports.tsTypeParameter = tsTypeParameter;\nexports.numberLiteral = exports.NumberLiteral = NumberLiteral;\nexports.regexLiteral = exports.RegexLiteral = RegexLiteral;\nexports.restProperty = exports.RestProperty = RestProperty;\nexports.spreadProperty = exports.SpreadProperty = SpreadProperty;\n\nvar _builder = _interopRequireDefault(require(\"../builder\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction arrayExpression(...args) {\n  return (0, _builder.default)(\"ArrayExpression\", ...args);\n}\n\nfunction assignmentExpression(...args) {\n  return (0, _builder.default)(\"AssignmentExpression\", ...args);\n}\n\nfunction binaryExpression(...args) {\n  return (0, _builder.default)(\"BinaryExpression\", ...args);\n}\n\nfunction interpreterDirective(...args) {\n  return (0, _builder.default)(\"InterpreterDirective\", ...args);\n}\n\nfunction directive(...args) {\n  return (0, _builder.default)(\"Directive\", ...args);\n}\n\nfunction directiveLiteral(...args) {\n  return (0, _builder.default)(\"DirectiveLiteral\", ...args);\n}\n\nfunction blockStatement(...args) {\n  return (0, _builder.default)(\"BlockStatement\", ...args);\n}\n\nfunction breakStatement(...args) {\n  return (0, _builder.default)(\"BreakStatement\", ...args);\n}\n\nfunction callExpression(...args) {\n  return (0, _builder.default)(\"CallExpression\", ...args);\n}\n\nfunction catchClause(...args) {\n  return (0, _builder.default)(\"CatchClause\", ...args);\n}\n\nfunction conditionalExpression(...args) {\n  return (0, _builder.default)(\"ConditionalExpression\", ...args);\n}\n\nfunction continueStatement(...args) {\n  return (0, _builder.default)(\"ContinueStatement\", ...args);\n}\n\nfunction debuggerStatement(...args) {\n  return (0, _builder.default)(\"DebuggerStatement\", ...args);\n}\n\nfunction doWhileStatement(...args) {\n  return (0, _builder.default)(\"DoWhileStatement\", ...args);\n}\n\nfunction emptyStatement(...args) {\n  return (0, _builder.default)(\"EmptyStatement\", ...args);\n}\n\nfunction expressionStatement(...args) {\n  return (0, _builder.default)(\"ExpressionStatement\", ...args);\n}\n\nfunction file(...args) {\n  return (0, _builder.default)(\"File\", ...args);\n}\n\nfunction forInStatement(...args) {\n  return (0, _builder.default)(\"ForInStatement\", ...args);\n}\n\nfunction forStatement(...args) {\n  return (0, _builder.default)(\"ForStatement\", ...args);\n}\n\nfunction functionDeclaration(...args) {\n  return (0, _builder.default)(\"FunctionDeclaration\", ...args);\n}\n\nfunction functionExpression(...args) {\n  return (0, _builder.default)(\"FunctionExpression\", ...args);\n}\n\nfunction identifier(...args) {\n  return (0, _builder.default)(\"Identifier\", ...args);\n}\n\nfunction ifStatement(...args) {\n  return (0, _builder.default)(\"IfStatement\", ...args);\n}\n\nfunction labeledStatement(...args) {\n  return (0, _builder.default)(\"LabeledStatement\", ...args);\n}\n\nfunction stringLiteral(...args) {\n  return (0, _builder.default)(\"StringLiteral\", ...args);\n}\n\nfunction numericLiteral(...args) {\n  return (0, _builder.default)(\"NumericLiteral\", ...args);\n}\n\nfunction nullLiteral(...args) {\n  return (0, _builder.default)(\"NullLiteral\", ...args);\n}\n\nfunction booleanLiteral(...args) {\n  return (0, _builder.default)(\"BooleanLiteral\", ...args);\n}\n\nfunction regExpLiteral(...args) {\n  return (0, _builder.default)(\"RegExpLiteral\", ...args);\n}\n\nfunction logicalExpression(...args) {\n  return (0, _builder.default)(\"LogicalExpression\", ...args);\n}\n\nfunction memberExpression(...args) {\n  return (0, _builder.default)(\"MemberExpression\", ...args);\n}\n\nfunction newExpression(...args) {\n  return (0, _builder.default)(\"NewExpression\", ...args);\n}\n\nfunction program(...args) {\n  return (0, _builder.default)(\"Program\", ...args);\n}\n\nfunction objectExpression(...args) {\n  return (0, _builder.default)(\"ObjectExpression\", ...args);\n}\n\nfunction objectMethod(...args) {\n  return (0, _builder.default)(\"ObjectMethod\", ...args);\n}\n\nfunction objectProperty(...args) {\n  return (0, _builder.default)(\"ObjectProperty\", ...args);\n}\n\nfunction restElement(...args) {\n  return (0, _builder.default)(\"RestElement\", ...args);\n}\n\nfunction returnStatement(...args) {\n  return (0, _builder.default)(\"ReturnStatement\", ...args);\n}\n\nfunction sequenceExpression(...args) {\n  return (0, _builder.default)(\"SequenceExpression\", ...args);\n}\n\nfunction parenthesizedExpression(...args) {\n  return (0, _builder.default)(\"ParenthesizedExpression\", ...args);\n}\n\nfunction switchCase(...args) {\n  return (0, _builder.default)(\"SwitchCase\", ...args);\n}\n\nfunction switchStatement(...args) {\n  return (0, _builder.default)(\"SwitchStatement\", ...args);\n}\n\nfunction thisExpression(...args) {\n  return (0, _builder.default)(\"ThisExpression\", ...args);\n}\n\nfunction throwStatement(...args) {\n  return (0, _builder.default)(\"ThrowStatement\", ...args);\n}\n\nfunction tryStatement(...args) {\n  return (0, _builder.default)(\"TryStatement\", ...args);\n}\n\nfunction unaryExpression(...args) {\n  return (0, _builder.default)(\"UnaryExpression\", ...args);\n}\n\nfunction updateExpression(...args) {\n  return (0, _builder.default)(\"UpdateExpression\", ...args);\n}\n\nfunction variableDeclaration(...args) {\n  return (0, _builder.default)(\"VariableDeclaration\", ...args);\n}\n\nfunction variableDeclarator(...args) {\n  return (0, _builder.default)(\"VariableDeclarator\", ...args);\n}\n\nfunction whileStatement(...args) {\n  return (0, _builder.default)(\"WhileStatement\", ...args);\n}\n\nfunction withStatement(...args) {\n  return (0, _builder.default)(\"WithStatement\", ...args);\n}\n\nfunction assignmentPattern(...args) {\n  return (0, _builder.default)(\"AssignmentPattern\", ...args);\n}\n\nfunction arrayPattern(...args) {\n  return (0, _builder.default)(\"ArrayPattern\", ...args);\n}\n\nfunction arrowFunctionExpression(...args) {\n  return (0, _builder.default)(\"ArrowFunctionExpression\", ...args);\n}\n\nfunction classBody(...args) {\n  return (0, _builder.default)(\"ClassBody\", ...args);\n}\n\nfunction classExpression(...args) {\n  return (0, _builder.default)(\"ClassExpression\", ...args);\n}\n\nfunction classDeclaration(...args) {\n  return (0, _builder.default)(\"ClassDeclaration\", ...args);\n}\n\nfunction exportAllDeclaration(...args) {\n  return (0, _builder.default)(\"ExportAllDeclaration\", ...args);\n}\n\nfunction exportDefaultDeclaration(...args) {\n  return (0, _builder.default)(\"ExportDefaultDeclaration\", ...args);\n}\n\nfunction exportNamedDeclaration(...args) {\n  return (0, _builder.default)(\"ExportNamedDeclaration\", ...args);\n}\n\nfunction exportSpecifier(...args) {\n  return (0, _builder.default)(\"ExportSpecifier\", ...args);\n}\n\nfunction forOfStatement(...args) {\n  return (0, _builder.default)(\"ForOfStatement\", ...args);\n}\n\nfunction importDeclaration(...args) {\n  return (0, _builder.default)(\"ImportDeclaration\", ...args);\n}\n\nfunction importDefaultSpecifier(...args) {\n  return (0, _builder.default)(\"ImportDefaultSpecifier\", ...args);\n}\n\nfunction importNamespaceSpecifier(...args) {\n  return (0, _builder.default)(\"ImportNamespaceSpecifier\", ...args);\n}\n\nfunction importSpecifier(...args) {\n  return (0, _builder.default)(\"ImportSpecifier\", ...args);\n}\n\nfunction metaProperty(...args) {\n  return (0, _builder.default)(\"MetaProperty\", ...args);\n}\n\nfunction classMethod(...args) {\n  return (0, _builder.default)(\"ClassMethod\", ...args);\n}\n\nfunction objectPattern(...args) {\n  return (0, _builder.default)(\"ObjectPattern\", ...args);\n}\n\nfunction spreadElement(...args) {\n  return (0, _builder.default)(\"SpreadElement\", ...args);\n}\n\nfunction _super(...args) {\n  return (0, _builder.default)(\"Super\", ...args);\n}\n\nfunction taggedTemplateExpression(...args) {\n  return (0, _builder.default)(\"TaggedTemplateExpression\", ...args);\n}\n\nfunction templateElement(...args) {\n  return (0, _builder.default)(\"TemplateElement\", ...args);\n}\n\nfunction templateLiteral(...args) {\n  return (0, _builder.default)(\"TemplateLiteral\", ...args);\n}\n\nfunction yieldExpression(...args) {\n  return (0, _builder.default)(\"YieldExpression\", ...args);\n}\n\nfunction awaitExpression(...args) {\n  return (0, _builder.default)(\"AwaitExpression\", ...args);\n}\n\nfunction _import(...args) {\n  return (0, _builder.default)(\"Import\", ...args);\n}\n\nfunction bigIntLiteral(...args) {\n  return (0, _builder.default)(\"BigIntLiteral\", ...args);\n}\n\nfunction exportNamespaceSpecifier(...args) {\n  return (0, _builder.default)(\"ExportNamespaceSpecifier\", ...args);\n}\n\nfunction optionalMemberExpression(...args) {\n  return (0, _builder.default)(\"OptionalMemberExpression\", ...args);\n}\n\nfunction optionalCallExpression(...args) {\n  return (0, _builder.default)(\"OptionalCallExpression\", ...args);\n}\n\nfunction anyTypeAnnotation(...args) {\n  return (0, _builder.default)(\"AnyTypeAnnotation\", ...args);\n}\n\nfunction arrayTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ArrayTypeAnnotation\", ...args);\n}\n\nfunction booleanTypeAnnotation(...args) {\n  return (0, _builder.default)(\"BooleanTypeAnnotation\", ...args);\n}\n\nfunction booleanLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"BooleanLiteralTypeAnnotation\", ...args);\n}\n\nfunction nullLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NullLiteralTypeAnnotation\", ...args);\n}\n\nfunction classImplements(...args) {\n  return (0, _builder.default)(\"ClassImplements\", ...args);\n}\n\nfunction declareClass(...args) {\n  return (0, _builder.default)(\"DeclareClass\", ...args);\n}\n\nfunction declareFunction(...args) {\n  return (0, _builder.default)(\"DeclareFunction\", ...args);\n}\n\nfunction declareInterface(...args) {\n  return (0, _builder.default)(\"DeclareInterface\", ...args);\n}\n\nfunction declareModule(...args) {\n  return (0, _builder.default)(\"DeclareModule\", ...args);\n}\n\nfunction declareModuleExports(...args) {\n  return (0, _builder.default)(\"DeclareModuleExports\", ...args);\n}\n\nfunction declareTypeAlias(...args) {\n  return (0, _builder.default)(\"DeclareTypeAlias\", ...args);\n}\n\nfunction declareOpaqueType(...args) {\n  return (0, _builder.default)(\"DeclareOpaqueType\", ...args);\n}\n\nfunction declareVariable(...args) {\n  return (0, _builder.default)(\"DeclareVariable\", ...args);\n}\n\nfunction declareExportDeclaration(...args) {\n  return (0, _builder.default)(\"DeclareExportDeclaration\", ...args);\n}\n\nfunction declareExportAllDeclaration(...args) {\n  return (0, _builder.default)(\"DeclareExportAllDeclaration\", ...args);\n}\n\nfunction declaredPredicate(...args) {\n  return (0, _builder.default)(\"DeclaredPredicate\", ...args);\n}\n\nfunction existsTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ExistsTypeAnnotation\", ...args);\n}\n\nfunction functionTypeAnnotation(...args) {\n  return (0, _builder.default)(\"FunctionTypeAnnotation\", ...args);\n}\n\nfunction functionTypeParam(...args) {\n  return (0, _builder.default)(\"FunctionTypeParam\", ...args);\n}\n\nfunction genericTypeAnnotation(...args) {\n  return (0, _builder.default)(\"GenericTypeAnnotation\", ...args);\n}\n\nfunction inferredPredicate(...args) {\n  return (0, _builder.default)(\"InferredPredicate\", ...args);\n}\n\nfunction interfaceExtends(...args) {\n  return (0, _builder.default)(\"InterfaceExtends\", ...args);\n}\n\nfunction interfaceDeclaration(...args) {\n  return (0, _builder.default)(\"InterfaceDeclaration\", ...args);\n}\n\nfunction interfaceTypeAnnotation(...args) {\n  return (0, _builder.default)(\"InterfaceTypeAnnotation\", ...args);\n}\n\nfunction intersectionTypeAnnotation(...args) {\n  return (0, _builder.default)(\"IntersectionTypeAnnotation\", ...args);\n}\n\nfunction mixedTypeAnnotation(...args) {\n  return (0, _builder.default)(\"MixedTypeAnnotation\", ...args);\n}\n\nfunction emptyTypeAnnotation(...args) {\n  return (0, _builder.default)(\"EmptyTypeAnnotation\", ...args);\n}\n\nfunction nullableTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NullableTypeAnnotation\", ...args);\n}\n\nfunction numberLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NumberLiteralTypeAnnotation\", ...args);\n}\n\nfunction numberTypeAnnotation(...args) {\n  return (0, _builder.default)(\"NumberTypeAnnotation\", ...args);\n}\n\nfunction objectTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ObjectTypeAnnotation\", ...args);\n}\n\nfunction objectTypeInternalSlot(...args) {\n  return (0, _builder.default)(\"ObjectTypeInternalSlot\", ...args);\n}\n\nfunction objectTypeCallProperty(...args) {\n  return (0, _builder.default)(\"ObjectTypeCallProperty\", ...args);\n}\n\nfunction objectTypeIndexer(...args) {\n  return (0, _builder.default)(\"ObjectTypeIndexer\", ...args);\n}\n\nfunction objectTypeProperty(...args) {\n  return (0, _builder.default)(\"ObjectTypeProperty\", ...args);\n}\n\nfunction objectTypeSpreadProperty(...args) {\n  return (0, _builder.default)(\"ObjectTypeSpreadProperty\", ...args);\n}\n\nfunction opaqueType(...args) {\n  return (0, _builder.default)(\"OpaqueType\", ...args);\n}\n\nfunction qualifiedTypeIdentifier(...args) {\n  return (0, _builder.default)(\"QualifiedTypeIdentifier\", ...args);\n}\n\nfunction stringLiteralTypeAnnotation(...args) {\n  return (0, _builder.default)(\"StringLiteralTypeAnnotation\", ...args);\n}\n\nfunction stringTypeAnnotation(...args) {\n  return (0, _builder.default)(\"StringTypeAnnotation\", ...args);\n}\n\nfunction symbolTypeAnnotation(...args) {\n  return (0, _builder.default)(\"SymbolTypeAnnotation\", ...args);\n}\n\nfunction thisTypeAnnotation(...args) {\n  return (0, _builder.default)(\"ThisTypeAnnotation\", ...args);\n}\n\nfunction tupleTypeAnnotation(...args) {\n  return (0, _builder.default)(\"TupleTypeAnnotation\", ...args);\n}\n\nfunction typeofTypeAnnotation(...args) {\n  return (0, _builder.default)(\"TypeofTypeAnnotation\", ...args);\n}\n\nfunction typeAlias(...args) {\n  return (0, _builder.default)(\"TypeAlias\", ...args);\n}\n\nfunction typeAnnotation(...args) {\n  return (0, _builder.default)(\"TypeAnnotation\", ...args);\n}\n\nfunction typeCastExpression(...args) {\n  return (0, _builder.default)(\"TypeCastExpression\", ...args);\n}\n\nfunction typeParameter(...args) {\n  return (0, _builder.default)(\"TypeParameter\", ...args);\n}\n\nfunction typeParameterDeclaration(...args) {\n  return (0, _builder.default)(\"TypeParameterDeclaration\", ...args);\n}\n\nfunction typeParameterInstantiation(...args) {\n  return (0, _builder.default)(\"TypeParameterInstantiation\", ...args);\n}\n\nfunction unionTypeAnnotation(...args) {\n  return (0, _builder.default)(\"UnionTypeAnnotation\", ...args);\n}\n\nfunction variance(...args) {\n  return (0, _builder.default)(\"Variance\", ...args);\n}\n\nfunction voidTypeAnnotation(...args) {\n  return (0, _builder.default)(\"VoidTypeAnnotation\", ...args);\n}\n\nfunction enumDeclaration(...args) {\n  return (0, _builder.default)(\"EnumDeclaration\", ...args);\n}\n\nfunction enumBooleanBody(...args) {\n  return (0, _builder.default)(\"EnumBooleanBody\", ...args);\n}\n\nfunction enumNumberBody(...args) {\n  return (0, _builder.default)(\"EnumNumberBody\", ...args);\n}\n\nfunction enumStringBody(...args) {\n  return (0, _builder.default)(\"EnumStringBody\", ...args);\n}\n\nfunction enumSymbolBody(...args) {\n  return (0, _builder.default)(\"EnumSymbolBody\", ...args);\n}\n\nfunction enumBooleanMember(...args) {\n  return (0, _builder.default)(\"EnumBooleanMember\", ...args);\n}\n\nfunction enumNumberMember(...args) {\n  return (0, _builder.default)(\"EnumNumberMember\", ...args);\n}\n\nfunction enumStringMember(...args) {\n  return (0, _builder.default)(\"EnumStringMember\", ...args);\n}\n\nfunction enumDefaultedMember(...args) {\n  return (0, _builder.default)(\"EnumDefaultedMember\", ...args);\n}\n\nfunction jsxAttribute(...args) {\n  return (0, _builder.default)(\"JSXAttribute\", ...args);\n}\n\nfunction jsxClosingElement(...args) {\n  return (0, _builder.default)(\"JSXClosingElement\", ...args);\n}\n\nfunction jsxElement(...args) {\n  return (0, _builder.default)(\"JSXElement\", ...args);\n}\n\nfunction jsxEmptyExpression(...args) {\n  return (0, _builder.default)(\"JSXEmptyExpression\", ...args);\n}\n\nfunction jsxExpressionContainer(...args) {\n  return (0, _builder.default)(\"JSXExpressionContainer\", ...args);\n}\n\nfunction jsxSpreadChild(...args) {\n  return (0, _builder.default)(\"JSXSpreadChild\", ...args);\n}\n\nfunction jsxIdentifier(...args) {\n  return (0, _builder.default)(\"JSXIdentifier\", ...args);\n}\n\nfunction jsxMemberExpression(...args) {\n  return (0, _builder.default)(\"JSXMemberExpression\", ...args);\n}\n\nfunction jsxNamespacedName(...args) {\n  return (0, _builder.default)(\"JSXNamespacedName\", ...args);\n}\n\nfunction jsxOpeningElement(...args) {\n  return (0, _builder.default)(\"JSXOpeningElement\", ...args);\n}\n\nfunction jsxSpreadAttribute(...args) {\n  return (0, _builder.default)(\"JSXSpreadAttribute\", ...args);\n}\n\nfunction jsxText(...args) {\n  return (0, _builder.default)(\"JSXText\", ...args);\n}\n\nfunction jsxFragment(...args) {\n  return (0, _builder.default)(\"JSXFragment\", ...args);\n}\n\nfunction jsxOpeningFragment(...args) {\n  return (0, _builder.default)(\"JSXOpeningFragment\", ...args);\n}\n\nfunction jsxClosingFragment(...args) {\n  return (0, _builder.default)(\"JSXClosingFragment\", ...args);\n}\n\nfunction noop(...args) {\n  return (0, _builder.default)(\"Noop\", ...args);\n}\n\nfunction placeholder(...args) {\n  return (0, _builder.default)(\"Placeholder\", ...args);\n}\n\nfunction v8IntrinsicIdentifier(...args) {\n  return (0, _builder.default)(\"V8IntrinsicIdentifier\", ...args);\n}\n\nfunction argumentPlaceholder(...args) {\n  return (0, _builder.default)(\"ArgumentPlaceholder\", ...args);\n}\n\nfunction bindExpression(...args) {\n  return (0, _builder.default)(\"BindExpression\", ...args);\n}\n\nfunction classProperty(...args) {\n  return (0, _builder.default)(\"ClassProperty\", ...args);\n}\n\nfunction pipelineTopicExpression(...args) {\n  return (0, _builder.default)(\"PipelineTopicExpression\", ...args);\n}\n\nfunction pipelineBareFunction(...args) {\n  return (0, _builder.default)(\"PipelineBareFunction\", ...args);\n}\n\nfunction pipelinePrimaryTopicReference(...args) {\n  return (0, _builder.default)(\"PipelinePrimaryTopicReference\", ...args);\n}\n\nfunction classPrivateProperty(...args) {\n  return (0, _builder.default)(\"ClassPrivateProperty\", ...args);\n}\n\nfunction classPrivateMethod(...args) {\n  return (0, _builder.default)(\"ClassPrivateMethod\", ...args);\n}\n\nfunction importAttribute(...args) {\n  return (0, _builder.default)(\"ImportAttribute\", ...args);\n}\n\nfunction decorator(...args) {\n  return (0, _builder.default)(\"Decorator\", ...args);\n}\n\nfunction doExpression(...args) {\n  return (0, _builder.default)(\"DoExpression\", ...args);\n}\n\nfunction exportDefaultSpecifier(...args) {\n  return (0, _builder.default)(\"ExportDefaultSpecifier\", ...args);\n}\n\nfunction privateName(...args) {\n  return (0, _builder.default)(\"PrivateName\", ...args);\n}\n\nfunction recordExpression(...args) {\n  return (0, _builder.default)(\"RecordExpression\", ...args);\n}\n\nfunction tupleExpression(...args) {\n  return (0, _builder.default)(\"TupleExpression\", ...args);\n}\n\nfunction decimalLiteral(...args) {\n  return (0, _builder.default)(\"DecimalLiteral\", ...args);\n}\n\nfunction staticBlock(...args) {\n  return (0, _builder.default)(\"StaticBlock\", ...args);\n}\n\nfunction tsParameterProperty(...args) {\n  return (0, _builder.default)(\"TSParameterProperty\", ...args);\n}\n\nfunction tsDeclareFunction(...args) {\n  return (0, _builder.default)(\"TSDeclareFunction\", ...args);\n}\n\nfunction tsDeclareMethod(...args) {\n  return (0, _builder.default)(\"TSDeclareMethod\", ...args);\n}\n\nfunction tsQualifiedName(...args) {\n  return (0, _builder.default)(\"TSQualifiedName\", ...args);\n}\n\nfunction tsCallSignatureDeclaration(...args) {\n  return (0, _builder.default)(\"TSCallSignatureDeclaration\", ...args);\n}\n\nfunction tsConstructSignatureDeclaration(...args) {\n  return (0, _builder.default)(\"TSConstructSignatureDeclaration\", ...args);\n}\n\nfunction tsPropertySignature(...args) {\n  return (0, _builder.default)(\"TSPropertySignature\", ...args);\n}\n\nfunction tsMethodSignature(...args) {\n  return (0, _builder.default)(\"TSMethodSignature\", ...args);\n}\n\nfunction tsIndexSignature(...args) {\n  return (0, _builder.default)(\"TSIndexSignature\", ...args);\n}\n\nfunction tsAnyKeyword(...args) {\n  return (0, _builder.default)(\"TSAnyKeyword\", ...args);\n}\n\nfunction tsBooleanKeyword(...args) {\n  return (0, _builder.default)(\"TSBooleanKeyword\", ...args);\n}\n\nfunction tsBigIntKeyword(...args) {\n  return (0, _builder.default)(\"TSBigIntKeyword\", ...args);\n}\n\nfunction tsIntrinsicKeyword(...args) {\n  return (0, _builder.default)(\"TSIntrinsicKeyword\", ...args);\n}\n\nfunction tsNeverKeyword(...args) {\n  return (0, _builder.default)(\"TSNeverKeyword\", ...args);\n}\n\nfunction tsNullKeyword(...args) {\n  return (0, _builder.default)(\"TSNullKeyword\", ...args);\n}\n\nfunction tsNumberKeyword(...args) {\n  return (0, _builder.default)(\"TSNumberKeyword\", ...args);\n}\n\nfunction tsObjectKeyword(...args) {\n  return (0, _builder.default)(\"TSObjectKeyword\", ...args);\n}\n\nfunction tsStringKeyword(...args) {\n  return (0, _builder.default)(\"TSStringKeyword\", ...args);\n}\n\nfunction tsSymbolKeyword(...args) {\n  return (0, _builder.default)(\"TSSymbolKeyword\", ...args);\n}\n\nfunction tsUndefinedKeyword(...args) {\n  return (0, _builder.default)(\"TSUndefinedKeyword\", ...args);\n}\n\nfunction tsUnknownKeyword(...args) {\n  return (0, _builder.default)(\"TSUnknownKeyword\", ...args);\n}\n\nfunction tsVoidKeyword(...args) {\n  return (0, _builder.default)(\"TSVoidKeyword\", ...args);\n}\n\nfunction tsThisType(...args) {\n  return (0, _builder.default)(\"TSThisType\", ...args);\n}\n\nfunction tsFunctionType(...args) {\n  return (0, _builder.default)(\"TSFunctionType\", ...args);\n}\n\nfunction tsConstructorType(...args) {\n  return (0, _builder.default)(\"TSConstructorType\", ...args);\n}\n\nfunction tsTypeReference(...args) {\n  return (0, _builder.default)(\"TSTypeReference\", ...args);\n}\n\nfunction tsTypePredicate(...args) {\n  return (0, _builder.default)(\"TSTypePredicate\", ...args);\n}\n\nfunction tsTypeQuery(...args) {\n  return (0, _builder.default)(\"TSTypeQuery\", ...args);\n}\n\nfunction tsTypeLiteral(...args) {\n  return (0, _builder.default)(\"TSTypeLiteral\", ...args);\n}\n\nfunction tsArrayType(...args) {\n  return (0, _builder.default)(\"TSArrayType\", ...args);\n}\n\nfunction tsTupleType(...args) {\n  return (0, _builder.default)(\"TSTupleType\", ...args);\n}\n\nfunction tsOptionalType(...args) {\n  return (0, _builder.default)(\"TSOptionalType\", ...args);\n}\n\nfunction tsRestType(...args) {\n  return (0, _builder.default)(\"TSRestType\", ...args);\n}\n\nfunction tsNamedTupleMember(...args) {\n  return (0, _builder.default)(\"TSNamedTupleMember\", ...args);\n}\n\nfunction tsUnionType(...args) {\n  return (0, _builder.default)(\"TSUnionType\", ...args);\n}\n\nfunction tsIntersectionType(...args) {\n  return (0, _builder.default)(\"TSIntersectionType\", ...args);\n}\n\nfunction tsConditionalType(...args) {\n  return (0, _builder.default)(\"TSConditionalType\", ...args);\n}\n\nfunction tsInferType(...args) {\n  return (0, _builder.default)(\"TSInferType\", ...args);\n}\n\nfunction tsParenthesizedType(...args) {\n  return (0, _builder.default)(\"TSParenthesizedType\", ...args);\n}\n\nfunction tsTypeOperator(...args) {\n  return (0, _builder.default)(\"TSTypeOperator\", ...args);\n}\n\nfunction tsIndexedAccessType(...args) {\n  return (0, _builder.default)(\"TSIndexedAccessType\", ...args);\n}\n\nfunction tsMappedType(...args) {\n  return (0, _builder.default)(\"TSMappedType\", ...args);\n}\n\nfunction tsLiteralType(...args) {\n  return (0, _builder.default)(\"TSLiteralType\", ...args);\n}\n\nfunction tsExpressionWithTypeArguments(...args) {\n  return (0, _builder.default)(\"TSExpressionWithTypeArguments\", ...args);\n}\n\nfunction tsInterfaceDeclaration(...args) {\n  return (0, _builder.default)(\"TSInterfaceDeclaration\", ...args);\n}\n\nfunction tsInterfaceBody(...args) {\n  return (0, _builder.default)(\"TSInterfaceBody\", ...args);\n}\n\nfunction tsTypeAliasDeclaration(...args) {\n  return (0, _builder.default)(\"TSTypeAliasDeclaration\", ...args);\n}\n\nfunction tsAsExpression(...args) {\n  return (0, _builder.default)(\"TSAsExpression\", ...args);\n}\n\nfunction tsTypeAssertion(...args) {\n  return (0, _builder.default)(\"TSTypeAssertion\", ...args);\n}\n\nfunction tsEnumDeclaration(...args) {\n  return (0, _builder.default)(\"TSEnumDeclaration\", ...args);\n}\n\nfunction tsEnumMember(...args) {\n  return (0, _builder.default)(\"TSEnumMember\", ...args);\n}\n\nfunction tsModuleDeclaration(...args) {\n  return (0, _builder.default)(\"TSModuleDeclaration\", ...args);\n}\n\nfunction tsModuleBlock(...args) {\n  return (0, _builder.default)(\"TSModuleBlock\", ...args);\n}\n\nfunction tsImportType(...args) {\n  return (0, _builder.default)(\"TSImportType\", ...args);\n}\n\nfunction tsImportEqualsDeclaration(...args) {\n  return (0, _builder.default)(\"TSImportEqualsDeclaration\", ...args);\n}\n\nfunction tsExternalModuleReference(...args) {\n  return (0, _builder.default)(\"TSExternalModuleReference\", ...args);\n}\n\nfunction tsNonNullExpression(...args) {\n  return (0, _builder.default)(\"TSNonNullExpression\", ...args);\n}\n\nfunction tsExportAssignment(...args) {\n  return (0, _builder.default)(\"TSExportAssignment\", ...args);\n}\n\nfunction tsNamespaceExportDeclaration(...args) {\n  return (0, _builder.default)(\"TSNamespaceExportDeclaration\", ...args);\n}\n\nfunction tsTypeAnnotation(...args) {\n  return (0, _builder.default)(\"TSTypeAnnotation\", ...args);\n}\n\nfunction tsTypeParameterInstantiation(...args) {\n  return (0, _builder.default)(\"TSTypeParameterInstantiation\", ...args);\n}\n\nfunction tsTypeParameterDeclaration(...args) {\n  return (0, _builder.default)(\"TSTypeParameterDeclaration\", ...args);\n}\n\nfunction tsTypeParameter(...args) {\n  return (0, _builder.default)(\"TSTypeParameter\", ...args);\n}\n\nfunction NumberLiteral(...args) {\n  console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n  return (0, _builder.default)(\"NumberLiteral\", ...args);\n}\n\nfunction RegexLiteral(...args) {\n  console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n  return (0, _builder.default)(\"RegexLiteral\", ...args);\n}\n\nfunction RestProperty(...args) {\n  console.trace(\"The node type RestProperty has been renamed to RestElement\");\n  return (0, _builder.default)(\"RestProperty\", ...args);\n}\n\nfunction SpreadProperty(...args) {\n  console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n  return (0, _builder.default)(\"SpreadProperty\", ...args);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cleanJSXElementLiteralChild;\n\nvar _generated = require(\"../../builders/generated\");\n\nfunction cleanJSXElementLiteralChild(child, args) {\n  const lines = child.value.split(/\\r\\n|\\n|\\r/);\n  let lastNonEmptyLine = 0;\n\n  for (let i = 0; i < lines.length; i++) {\n    if (lines[i].match(/[^ \\t]/)) {\n      lastNonEmptyLine = i;\n    }\n  }\n\n  let str = \"\";\n\n  for (let i = 0; i < lines.length; i++) {\n    const line = lines[i];\n    const isFirstLine = i === 0;\n    const isLastLine = i === lines.length - 1;\n    const isLastNonEmptyLine = i === lastNonEmptyLine;\n    let trimmedLine = line.replace(/\\t/g, \" \");\n\n    if (!isFirstLine) {\n      trimmedLine = trimmedLine.replace(/^[ ]+/, \"\");\n    }\n\n    if (!isLastLine) {\n      trimmedLine = trimmedLine.replace(/[ ]+$/, \"\");\n    }\n\n    if (trimmedLine) {\n      if (!isLastNonEmptyLine) {\n        trimmedLine += \" \";\n      }\n\n      str += trimmedLine;\n    }\n  }\n\n  if (str) args.push((0, _generated.stringLiteral)(str));\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = buildChildren;\n\nvar _generated = require(\"../../validators/generated\");\n\nvar _cleanJSXElementLiteralChild = _interopRequireDefault(require(\"../../utils/react/cleanJSXElementLiteralChild\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction buildChildren(node) {\n  const elements = [];\n\n  for (let i = 0; i < node.children.length; i++) {\n    let child = node.children[i];\n\n    if ((0, _generated.isJSXText)(child)) {\n      (0, _cleanJSXElementLiteralChild.default)(child, elements);\n      continue;\n    }\n\n    if ((0, _generated.isJSXExpressionContainer)(child)) child = child.expression;\n    if ((0, _generated.isJSXEmptyExpression)(child)) continue;\n    elements.push(child);\n  }\n\n  return elements;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNode;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isNode(node) {\n  return !!(node && _definitions.VISITOR_KEYS[node.type]);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = assertNode;\n\nvar _isNode = _interopRequireDefault(require(\"../validators/isNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction assertNode(node) {\n  if (!(0, _isNode.default)(node)) {\n    var _node$type;\n\n    const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node);\n    throw new TypeError(`Not a valid node of type \"${type}\"`);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.assertArrayExpression = assertArrayExpression;\nexports.assertAssignmentExpression = assertAssignmentExpression;\nexports.assertBinaryExpression = assertBinaryExpression;\nexports.assertInterpreterDirective = assertInterpreterDirective;\nexports.assertDirective = assertDirective;\nexports.assertDirectiveLiteral = assertDirectiveLiteral;\nexports.assertBlockStatement = assertBlockStatement;\nexports.assertBreakStatement = assertBreakStatement;\nexports.assertCallExpression = assertCallExpression;\nexports.assertCatchClause = assertCatchClause;\nexports.assertConditionalExpression = assertConditionalExpression;\nexports.assertContinueStatement = assertContinueStatement;\nexports.assertDebuggerStatement = assertDebuggerStatement;\nexports.assertDoWhileStatement = assertDoWhileStatement;\nexports.assertEmptyStatement = assertEmptyStatement;\nexports.assertExpressionStatement = assertExpressionStatement;\nexports.assertFile = assertFile;\nexports.assertForInStatement = assertForInStatement;\nexports.assertForStatement = assertForStatement;\nexports.assertFunctionDeclaration = assertFunctionDeclaration;\nexports.assertFunctionExpression = assertFunctionExpression;\nexports.assertIdentifier = assertIdentifier;\nexports.assertIfStatement = assertIfStatement;\nexports.assertLabeledStatement = assertLabeledStatement;\nexports.assertStringLiteral = assertStringLiteral;\nexports.assertNumericLiteral = assertNumericLiteral;\nexports.assertNullLiteral = assertNullLiteral;\nexports.assertBooleanLiteral = assertBooleanLiteral;\nexports.assertRegExpLiteral = assertRegExpLiteral;\nexports.assertLogicalExpression = assertLogicalExpression;\nexports.assertMemberExpression = assertMemberExpression;\nexports.assertNewExpression = assertNewExpression;\nexports.assertProgram = assertProgram;\nexports.assertObjectExpression = assertObjectExpression;\nexports.assertObjectMethod = assertObjectMethod;\nexports.assertObjectProperty = assertObjectProperty;\nexports.assertRestElement = assertRestElement;\nexports.assertReturnStatement = assertReturnStatement;\nexports.assertSequenceExpression = assertSequenceExpression;\nexports.assertParenthesizedExpression = assertParenthesizedExpression;\nexports.assertSwitchCase = assertSwitchCase;\nexports.assertSwitchStatement = assertSwitchStatement;\nexports.assertThisExpression = assertThisExpression;\nexports.assertThrowStatement = assertThrowStatement;\nexports.assertTryStatement = assertTryStatement;\nexports.assertUnaryExpression = assertUnaryExpression;\nexports.assertUpdateExpression = assertUpdateExpression;\nexports.assertVariableDeclaration = assertVariableDeclaration;\nexports.assertVariableDeclarator = assertVariableDeclarator;\nexports.assertWhileStatement = assertWhileStatement;\nexports.assertWithStatement = assertWithStatement;\nexports.assertAssignmentPattern = assertAssignmentPattern;\nexports.assertArrayPattern = assertArrayPattern;\nexports.assertArrowFunctionExpression = assertArrowFunctionExpression;\nexports.assertClassBody = assertClassBody;\nexports.assertClassExpression = assertClassExpression;\nexports.assertClassDeclaration = assertClassDeclaration;\nexports.assertExportAllDeclaration = assertExportAllDeclaration;\nexports.assertExportDefaultDeclaration = assertExportDefaultDeclaration;\nexports.assertExportNamedDeclaration = assertExportNamedDeclaration;\nexports.assertExportSpecifier = assertExportSpecifier;\nexports.assertForOfStatement = assertForOfStatement;\nexports.assertImportDeclaration = assertImportDeclaration;\nexports.assertImportDefaultSpecifier = assertImportDefaultSpecifier;\nexports.assertImportNamespaceSpecifier = assertImportNamespaceSpecifier;\nexports.assertImportSpecifier = assertImportSpecifier;\nexports.assertMetaProperty = assertMetaProperty;\nexports.assertClassMethod = assertClassMethod;\nexports.assertObjectPattern = assertObjectPattern;\nexports.assertSpreadElement = assertSpreadElement;\nexports.assertSuper = assertSuper;\nexports.assertTaggedTemplateExpression = assertTaggedTemplateExpression;\nexports.assertTemplateElement = assertTemplateElement;\nexports.assertTemplateLiteral = assertTemplateLiteral;\nexports.assertYieldExpression = assertYieldExpression;\nexports.assertAwaitExpression = assertAwaitExpression;\nexports.assertImport = assertImport;\nexports.assertBigIntLiteral = assertBigIntLiteral;\nexports.assertExportNamespaceSpecifier = assertExportNamespaceSpecifier;\nexports.assertOptionalMemberExpression = assertOptionalMemberExpression;\nexports.assertOptionalCallExpression = assertOptionalCallExpression;\nexports.assertAnyTypeAnnotation = assertAnyTypeAnnotation;\nexports.assertArrayTypeAnnotation = assertArrayTypeAnnotation;\nexports.assertBooleanTypeAnnotation = assertBooleanTypeAnnotation;\nexports.assertBooleanLiteralTypeAnnotation = assertBooleanLiteralTypeAnnotation;\nexports.assertNullLiteralTypeAnnotation = assertNullLiteralTypeAnnotation;\nexports.assertClassImplements = assertClassImplements;\nexports.assertDeclareClass = assertDeclareClass;\nexports.assertDeclareFunction = assertDeclareFunction;\nexports.assertDeclareInterface = assertDeclareInterface;\nexports.assertDeclareModule = assertDeclareModule;\nexports.assertDeclareModuleExports = assertDeclareModuleExports;\nexports.assertDeclareTypeAlias = assertDeclareTypeAlias;\nexports.assertDeclareOpaqueType = assertDeclareOpaqueType;\nexports.assertDeclareVariable = assertDeclareVariable;\nexports.assertDeclareExportDeclaration = assertDeclareExportDeclaration;\nexports.assertDeclareExportAllDeclaration = assertDeclareExportAllDeclaration;\nexports.assertDeclaredPredicate = assertDeclaredPredicate;\nexports.assertExistsTypeAnnotation = assertExistsTypeAnnotation;\nexports.assertFunctionTypeAnnotation = assertFunctionTypeAnnotation;\nexports.assertFunctionTypeParam = assertFunctionTypeParam;\nexports.assertGenericTypeAnnotation = assertGenericTypeAnnotation;\nexports.assertInferredPredicate = assertInferredPredicate;\nexports.assertInterfaceExtends = assertInterfaceExtends;\nexports.assertInterfaceDeclaration = assertInterfaceDeclaration;\nexports.assertInterfaceTypeAnnotation = assertInterfaceTypeAnnotation;\nexports.assertIntersectionTypeAnnotation = assertIntersectionTypeAnnotation;\nexports.assertMixedTypeAnnotation = assertMixedTypeAnnotation;\nexports.assertEmptyTypeAnnotation = assertEmptyTypeAnnotation;\nexports.assertNullableTypeAnnotation = assertNullableTypeAnnotation;\nexports.assertNumberLiteralTypeAnnotation = assertNumberLiteralTypeAnnotation;\nexports.assertNumberTypeAnnotation = assertNumberTypeAnnotation;\nexports.assertObjectTypeAnnotation = assertObjectTypeAnnotation;\nexports.assertObjectTypeInternalSlot = assertObjectTypeInternalSlot;\nexports.assertObjectTypeCallProperty = assertObjectTypeCallProperty;\nexports.assertObjectTypeIndexer = assertObjectTypeIndexer;\nexports.assertObjectTypeProperty = assertObjectTypeProperty;\nexports.assertObjectTypeSpreadProperty = assertObjectTypeSpreadProperty;\nexports.assertOpaqueType = assertOpaqueType;\nexports.assertQualifiedTypeIdentifier = assertQualifiedTypeIdentifier;\nexports.assertStringLiteralTypeAnnotation = assertStringLiteralTypeAnnotation;\nexports.assertStringTypeAnnotation = assertStringTypeAnnotation;\nexports.assertSymbolTypeAnnotation = assertSymbolTypeAnnotation;\nexports.assertThisTypeAnnotation = assertThisTypeAnnotation;\nexports.assertTupleTypeAnnotation = assertTupleTypeAnnotation;\nexports.assertTypeofTypeAnnotation = assertTypeofTypeAnnotation;\nexports.assertTypeAlias = assertTypeAlias;\nexports.assertTypeAnnotation = assertTypeAnnotation;\nexports.assertTypeCastExpression = assertTypeCastExpression;\nexports.assertTypeParameter = assertTypeParameter;\nexports.assertTypeParameterDeclaration = assertTypeParameterDeclaration;\nexports.assertTypeParameterInstantiation = assertTypeParameterInstantiation;\nexports.assertUnionTypeAnnotation = assertUnionTypeAnnotation;\nexports.assertVariance = assertVariance;\nexports.assertVoidTypeAnnotation = assertVoidTypeAnnotation;\nexports.assertEnumDeclaration = assertEnumDeclaration;\nexports.assertEnumBooleanBody = assertEnumBooleanBody;\nexports.assertEnumNumberBody = assertEnumNumberBody;\nexports.assertEnumStringBody = assertEnumStringBody;\nexports.assertEnumSymbolBody = assertEnumSymbolBody;\nexports.assertEnumBooleanMember = assertEnumBooleanMember;\nexports.assertEnumNumberMember = assertEnumNumberMember;\nexports.assertEnumStringMember = assertEnumStringMember;\nexports.assertEnumDefaultedMember = assertEnumDefaultedMember;\nexports.assertJSXAttribute = assertJSXAttribute;\nexports.assertJSXClosingElement = assertJSXClosingElement;\nexports.assertJSXElement = assertJSXElement;\nexports.assertJSXEmptyExpression = assertJSXEmptyExpression;\nexports.assertJSXExpressionContainer = assertJSXExpressionContainer;\nexports.assertJSXSpreadChild = assertJSXSpreadChild;\nexports.assertJSXIdentifier = assertJSXIdentifier;\nexports.assertJSXMemberExpression = assertJSXMemberExpression;\nexports.assertJSXNamespacedName = assertJSXNamespacedName;\nexports.assertJSXOpeningElement = assertJSXOpeningElement;\nexports.assertJSXSpreadAttribute = assertJSXSpreadAttribute;\nexports.assertJSXText = assertJSXText;\nexports.assertJSXFragment = assertJSXFragment;\nexports.assertJSXOpeningFragment = assertJSXOpeningFragment;\nexports.assertJSXClosingFragment = assertJSXClosingFragment;\nexports.assertNoop = assertNoop;\nexports.assertPlaceholder = assertPlaceholder;\nexports.assertV8IntrinsicIdentifier = assertV8IntrinsicIdentifier;\nexports.assertArgumentPlaceholder = assertArgumentPlaceholder;\nexports.assertBindExpression = assertBindExpression;\nexports.assertClassProperty = assertClassProperty;\nexports.assertPipelineTopicExpression = assertPipelineTopicExpression;\nexports.assertPipelineBareFunction = assertPipelineBareFunction;\nexports.assertPipelinePrimaryTopicReference = assertPipelinePrimaryTopicReference;\nexports.assertClassPrivateProperty = assertClassPrivateProperty;\nexports.assertClassPrivateMethod = assertClassPrivateMethod;\nexports.assertImportAttribute = assertImportAttribute;\nexports.assertDecorator = assertDecorator;\nexports.assertDoExpression = assertDoExpression;\nexports.assertExportDefaultSpecifier = assertExportDefaultSpecifier;\nexports.assertPrivateName = assertPrivateName;\nexports.assertRecordExpression = assertRecordExpression;\nexports.assertTupleExpression = assertTupleExpression;\nexports.assertDecimalLiteral = assertDecimalLiteral;\nexports.assertStaticBlock = assertStaticBlock;\nexports.assertTSParameterProperty = assertTSParameterProperty;\nexports.assertTSDeclareFunction = assertTSDeclareFunction;\nexports.assertTSDeclareMethod = assertTSDeclareMethod;\nexports.assertTSQualifiedName = assertTSQualifiedName;\nexports.assertTSCallSignatureDeclaration = assertTSCallSignatureDeclaration;\nexports.assertTSConstructSignatureDeclaration = assertTSConstructSignatureDeclaration;\nexports.assertTSPropertySignature = assertTSPropertySignature;\nexports.assertTSMethodSignature = assertTSMethodSignature;\nexports.assertTSIndexSignature = assertTSIndexSignature;\nexports.assertTSAnyKeyword = assertTSAnyKeyword;\nexports.assertTSBooleanKeyword = assertTSBooleanKeyword;\nexports.assertTSBigIntKeyword = assertTSBigIntKeyword;\nexports.assertTSIntrinsicKeyword = assertTSIntrinsicKeyword;\nexports.assertTSNeverKeyword = assertTSNeverKeyword;\nexports.assertTSNullKeyword = assertTSNullKeyword;\nexports.assertTSNumberKeyword = assertTSNumberKeyword;\nexports.assertTSObjectKeyword = assertTSObjectKeyword;\nexports.assertTSStringKeyword = assertTSStringKeyword;\nexports.assertTSSymbolKeyword = assertTSSymbolKeyword;\nexports.assertTSUndefinedKeyword = assertTSUndefinedKeyword;\nexports.assertTSUnknownKeyword = assertTSUnknownKeyword;\nexports.assertTSVoidKeyword = assertTSVoidKeyword;\nexports.assertTSThisType = assertTSThisType;\nexports.assertTSFunctionType = assertTSFunctionType;\nexports.assertTSConstructorType = assertTSConstructorType;\nexports.assertTSTypeReference = assertTSTypeReference;\nexports.assertTSTypePredicate = assertTSTypePredicate;\nexports.assertTSTypeQuery = assertTSTypeQuery;\nexports.assertTSTypeLiteral = assertTSTypeLiteral;\nexports.assertTSArrayType = assertTSArrayType;\nexports.assertTSTupleType = assertTSTupleType;\nexports.assertTSOptionalType = assertTSOptionalType;\nexports.assertTSRestType = assertTSRestType;\nexports.assertTSNamedTupleMember = assertTSNamedTupleMember;\nexports.assertTSUnionType = assertTSUnionType;\nexports.assertTSIntersectionType = assertTSIntersectionType;\nexports.assertTSConditionalType = assertTSConditionalType;\nexports.assertTSInferType = assertTSInferType;\nexports.assertTSParenthesizedType = assertTSParenthesizedType;\nexports.assertTSTypeOperator = assertTSTypeOperator;\nexports.assertTSIndexedAccessType = assertTSIndexedAccessType;\nexports.assertTSMappedType = assertTSMappedType;\nexports.assertTSLiteralType = assertTSLiteralType;\nexports.assertTSExpressionWithTypeArguments = assertTSExpressionWithTypeArguments;\nexports.assertTSInterfaceDeclaration = assertTSInterfaceDeclaration;\nexports.assertTSInterfaceBody = assertTSInterfaceBody;\nexports.assertTSTypeAliasDeclaration = assertTSTypeAliasDeclaration;\nexports.assertTSAsExpression = assertTSAsExpression;\nexports.assertTSTypeAssertion = assertTSTypeAssertion;\nexports.assertTSEnumDeclaration = assertTSEnumDeclaration;\nexports.assertTSEnumMember = assertTSEnumMember;\nexports.assertTSModuleDeclaration = assertTSModuleDeclaration;\nexports.assertTSModuleBlock = assertTSModuleBlock;\nexports.assertTSImportType = assertTSImportType;\nexports.assertTSImportEqualsDeclaration = assertTSImportEqualsDeclaration;\nexports.assertTSExternalModuleReference = assertTSExternalModuleReference;\nexports.assertTSNonNullExpression = assertTSNonNullExpression;\nexports.assertTSExportAssignment = assertTSExportAssignment;\nexports.assertTSNamespaceExportDeclaration = assertTSNamespaceExportDeclaration;\nexports.assertTSTypeAnnotation = assertTSTypeAnnotation;\nexports.assertTSTypeParameterInstantiation = assertTSTypeParameterInstantiation;\nexports.assertTSTypeParameterDeclaration = assertTSTypeParameterDeclaration;\nexports.assertTSTypeParameter = assertTSTypeParameter;\nexports.assertExpression = assertExpression;\nexports.assertBinary = assertBinary;\nexports.assertScopable = assertScopable;\nexports.assertBlockParent = assertBlockParent;\nexports.assertBlock = assertBlock;\nexports.assertStatement = assertStatement;\nexports.assertTerminatorless = assertTerminatorless;\nexports.assertCompletionStatement = assertCompletionStatement;\nexports.assertConditional = assertConditional;\nexports.assertLoop = assertLoop;\nexports.assertWhile = assertWhile;\nexports.assertExpressionWrapper = assertExpressionWrapper;\nexports.assertFor = assertFor;\nexports.assertForXStatement = assertForXStatement;\nexports.assertFunction = assertFunction;\nexports.assertFunctionParent = assertFunctionParent;\nexports.assertPureish = assertPureish;\nexports.assertDeclaration = assertDeclaration;\nexports.assertPatternLike = assertPatternLike;\nexports.assertLVal = assertLVal;\nexports.assertTSEntityName = assertTSEntityName;\nexports.assertLiteral = assertLiteral;\nexports.assertImmutable = assertImmutable;\nexports.assertUserWhitespacable = assertUserWhitespacable;\nexports.assertMethod = assertMethod;\nexports.assertObjectMember = assertObjectMember;\nexports.assertProperty = assertProperty;\nexports.assertUnaryLike = assertUnaryLike;\nexports.assertPattern = assertPattern;\nexports.assertClass = assertClass;\nexports.assertModuleDeclaration = assertModuleDeclaration;\nexports.assertExportDeclaration = assertExportDeclaration;\nexports.assertModuleSpecifier = assertModuleSpecifier;\nexports.assertFlow = assertFlow;\nexports.assertFlowType = assertFlowType;\nexports.assertFlowBaseAnnotation = assertFlowBaseAnnotation;\nexports.assertFlowDeclaration = assertFlowDeclaration;\nexports.assertFlowPredicate = assertFlowPredicate;\nexports.assertEnumBody = assertEnumBody;\nexports.assertEnumMember = assertEnumMember;\nexports.assertJSX = assertJSX;\nexports.assertPrivate = assertPrivate;\nexports.assertTSTypeElement = assertTSTypeElement;\nexports.assertTSType = assertTSType;\nexports.assertTSBaseType = assertTSBaseType;\nexports.assertNumberLiteral = assertNumberLiteral;\nexports.assertRegexLiteral = assertRegexLiteral;\nexports.assertRestProperty = assertRestProperty;\nexports.assertSpreadProperty = assertSpreadProperty;\n\nvar _is = _interopRequireDefault(require(\"../../validators/is\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction assert(type, node, opts) {\n  if (!(0, _is.default)(type, node, opts)) {\n    throw new Error(`Expected type \"${type}\" with option ${JSON.stringify(opts)}, ` + `but instead got \"${node.type}\".`);\n  }\n}\n\nfunction assertArrayExpression(node, opts = {}) {\n  assert(\"ArrayExpression\", node, opts);\n}\n\nfunction assertAssignmentExpression(node, opts = {}) {\n  assert(\"AssignmentExpression\", node, opts);\n}\n\nfunction assertBinaryExpression(node, opts = {}) {\n  assert(\"BinaryExpression\", node, opts);\n}\n\nfunction assertInterpreterDirective(node, opts = {}) {\n  assert(\"InterpreterDirective\", node, opts);\n}\n\nfunction assertDirective(node, opts = {}) {\n  assert(\"Directive\", node, opts);\n}\n\nfunction assertDirectiveLiteral(node, opts = {}) {\n  assert(\"DirectiveLiteral\", node, opts);\n}\n\nfunction assertBlockStatement(node, opts = {}) {\n  assert(\"BlockStatement\", node, opts);\n}\n\nfunction assertBreakStatement(node, opts = {}) {\n  assert(\"BreakStatement\", node, opts);\n}\n\nfunction assertCallExpression(node, opts = {}) {\n  assert(\"CallExpression\", node, opts);\n}\n\nfunction assertCatchClause(node, opts = {}) {\n  assert(\"CatchClause\", node, opts);\n}\n\nfunction assertConditionalExpression(node, opts = {}) {\n  assert(\"ConditionalExpression\", node, opts);\n}\n\nfunction assertContinueStatement(node, opts = {}) {\n  assert(\"ContinueStatement\", node, opts);\n}\n\nfunction assertDebuggerStatement(node, opts = {}) {\n  assert(\"DebuggerStatement\", node, opts);\n}\n\nfunction assertDoWhileStatement(node, opts = {}) {\n  assert(\"DoWhileStatement\", node, opts);\n}\n\nfunction assertEmptyStatement(node, opts = {}) {\n  assert(\"EmptyStatement\", node, opts);\n}\n\nfunction assertExpressionStatement(node, opts = {}) {\n  assert(\"ExpressionStatement\", node, opts);\n}\n\nfunction assertFile(node, opts = {}) {\n  assert(\"File\", node, opts);\n}\n\nfunction assertForInStatement(node, opts = {}) {\n  assert(\"ForInStatement\", node, opts);\n}\n\nfunction assertForStatement(node, opts = {}) {\n  assert(\"ForStatement\", node, opts);\n}\n\nfunction assertFunctionDeclaration(node, opts = {}) {\n  assert(\"FunctionDeclaration\", node, opts);\n}\n\nfunction assertFunctionExpression(node, opts = {}) {\n  assert(\"FunctionExpression\", node, opts);\n}\n\nfunction assertIdentifier(node, opts = {}) {\n  assert(\"Identifier\", node, opts);\n}\n\nfunction assertIfStatement(node, opts = {}) {\n  assert(\"IfStatement\", node, opts);\n}\n\nfunction assertLabeledStatement(node, opts = {}) {\n  assert(\"LabeledStatement\", node, opts);\n}\n\nfunction assertStringLiteral(node, opts = {}) {\n  assert(\"StringLiteral\", node, opts);\n}\n\nfunction assertNumericLiteral(node, opts = {}) {\n  assert(\"NumericLiteral\", node, opts);\n}\n\nfunction assertNullLiteral(node, opts = {}) {\n  assert(\"NullLiteral\", node, opts);\n}\n\nfunction assertBooleanLiteral(node, opts = {}) {\n  assert(\"BooleanLiteral\", node, opts);\n}\n\nfunction assertRegExpLiteral(node, opts = {}) {\n  assert(\"RegExpLiteral\", node, opts);\n}\n\nfunction assertLogicalExpression(node, opts = {}) {\n  assert(\"LogicalExpression\", node, opts);\n}\n\nfunction assertMemberExpression(node, opts = {}) {\n  assert(\"MemberExpression\", node, opts);\n}\n\nfunction assertNewExpression(node, opts = {}) {\n  assert(\"NewExpression\", node, opts);\n}\n\nfunction assertProgram(node, opts = {}) {\n  assert(\"Program\", node, opts);\n}\n\nfunction assertObjectExpression(node, opts = {}) {\n  assert(\"ObjectExpression\", node, opts);\n}\n\nfunction assertObjectMethod(node, opts = {}) {\n  assert(\"ObjectMethod\", node, opts);\n}\n\nfunction assertObjectProperty(node, opts = {}) {\n  assert(\"ObjectProperty\", node, opts);\n}\n\nfunction assertRestElement(node, opts = {}) {\n  assert(\"RestElement\", node, opts);\n}\n\nfunction assertReturnStatement(node, opts = {}) {\n  assert(\"ReturnStatement\", node, opts);\n}\n\nfunction assertSequenceExpression(node, opts = {}) {\n  assert(\"SequenceExpression\", node, opts);\n}\n\nfunction assertParenthesizedExpression(node, opts = {}) {\n  assert(\"ParenthesizedExpression\", node, opts);\n}\n\nfunction assertSwitchCase(node, opts = {}) {\n  assert(\"SwitchCase\", node, opts);\n}\n\nfunction assertSwitchStatement(node, opts = {}) {\n  assert(\"SwitchStatement\", node, opts);\n}\n\nfunction assertThisExpression(node, opts = {}) {\n  assert(\"ThisExpression\", node, opts);\n}\n\nfunction assertThrowStatement(node, opts = {}) {\n  assert(\"ThrowStatement\", node, opts);\n}\n\nfunction assertTryStatement(node, opts = {}) {\n  assert(\"TryStatement\", node, opts);\n}\n\nfunction assertUnaryExpression(node, opts = {}) {\n  assert(\"UnaryExpression\", node, opts);\n}\n\nfunction assertUpdateExpression(node, opts = {}) {\n  assert(\"UpdateExpression\", node, opts);\n}\n\nfunction assertVariableDeclaration(node, opts = {}) {\n  assert(\"VariableDeclaration\", node, opts);\n}\n\nfunction assertVariableDeclarator(node, opts = {}) {\n  assert(\"VariableDeclarator\", node, opts);\n}\n\nfunction assertWhileStatement(node, opts = {}) {\n  assert(\"WhileStatement\", node, opts);\n}\n\nfunction assertWithStatement(node, opts = {}) {\n  assert(\"WithStatement\", node, opts);\n}\n\nfunction assertAssignmentPattern(node, opts = {}) {\n  assert(\"AssignmentPattern\", node, opts);\n}\n\nfunction assertArrayPattern(node, opts = {}) {\n  assert(\"ArrayPattern\", node, opts);\n}\n\nfunction assertArrowFunctionExpression(node, opts = {}) {\n  assert(\"ArrowFunctionExpression\", node, opts);\n}\n\nfunction assertClassBody(node, opts = {}) {\n  assert(\"ClassBody\", node, opts);\n}\n\nfunction assertClassExpression(node, opts = {}) {\n  assert(\"ClassExpression\", node, opts);\n}\n\nfunction assertClassDeclaration(node, opts = {}) {\n  assert(\"ClassDeclaration\", node, opts);\n}\n\nfunction assertExportAllDeclaration(node, opts = {}) {\n  assert(\"ExportAllDeclaration\", node, opts);\n}\n\nfunction assertExportDefaultDeclaration(node, opts = {}) {\n  assert(\"ExportDefaultDeclaration\", node, opts);\n}\n\nfunction assertExportNamedDeclaration(node, opts = {}) {\n  assert(\"ExportNamedDeclaration\", node, opts);\n}\n\nfunction assertExportSpecifier(node, opts = {}) {\n  assert(\"ExportSpecifier\", node, opts);\n}\n\nfunction assertForOfStatement(node, opts = {}) {\n  assert(\"ForOfStatement\", node, opts);\n}\n\nfunction assertImportDeclaration(node, opts = {}) {\n  assert(\"ImportDeclaration\", node, opts);\n}\n\nfunction assertImportDefaultSpecifier(node, opts = {}) {\n  assert(\"ImportDefaultSpecifier\", node, opts);\n}\n\nfunction assertImportNamespaceSpecifier(node, opts = {}) {\n  assert(\"ImportNamespaceSpecifier\", node, opts);\n}\n\nfunction assertImportSpecifier(node, opts = {}) {\n  assert(\"ImportSpecifier\", node, opts);\n}\n\nfunction assertMetaProperty(node, opts = {}) {\n  assert(\"MetaProperty\", node, opts);\n}\n\nfunction assertClassMethod(node, opts = {}) {\n  assert(\"ClassMethod\", node, opts);\n}\n\nfunction assertObjectPattern(node, opts = {}) {\n  assert(\"ObjectPattern\", node, opts);\n}\n\nfunction assertSpreadElement(node, opts = {}) {\n  assert(\"SpreadElement\", node, opts);\n}\n\nfunction assertSuper(node, opts = {}) {\n  assert(\"Super\", node, opts);\n}\n\nfunction assertTaggedTemplateExpression(node, opts = {}) {\n  assert(\"TaggedTemplateExpression\", node, opts);\n}\n\nfunction assertTemplateElement(node, opts = {}) {\n  assert(\"TemplateElement\", node, opts);\n}\n\nfunction assertTemplateLiteral(node, opts = {}) {\n  assert(\"TemplateLiteral\", node, opts);\n}\n\nfunction assertYieldExpression(node, opts = {}) {\n  assert(\"YieldExpression\", node, opts);\n}\n\nfunction assertAwaitExpression(node, opts = {}) {\n  assert(\"AwaitExpression\", node, opts);\n}\n\nfunction assertImport(node, opts = {}) {\n  assert(\"Import\", node, opts);\n}\n\nfunction assertBigIntLiteral(node, opts = {}) {\n  assert(\"BigIntLiteral\", node, opts);\n}\n\nfunction assertExportNamespaceSpecifier(node, opts = {}) {\n  assert(\"ExportNamespaceSpecifier\", node, opts);\n}\n\nfunction assertOptionalMemberExpression(node, opts = {}) {\n  assert(\"OptionalMemberExpression\", node, opts);\n}\n\nfunction assertOptionalCallExpression(node, opts = {}) {\n  assert(\"OptionalCallExpression\", node, opts);\n}\n\nfunction assertAnyTypeAnnotation(node, opts = {}) {\n  assert(\"AnyTypeAnnotation\", node, opts);\n}\n\nfunction assertArrayTypeAnnotation(node, opts = {}) {\n  assert(\"ArrayTypeAnnotation\", node, opts);\n}\n\nfunction assertBooleanTypeAnnotation(node, opts = {}) {\n  assert(\"BooleanTypeAnnotation\", node, opts);\n}\n\nfunction assertBooleanLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"BooleanLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertNullLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"NullLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertClassImplements(node, opts = {}) {\n  assert(\"ClassImplements\", node, opts);\n}\n\nfunction assertDeclareClass(node, opts = {}) {\n  assert(\"DeclareClass\", node, opts);\n}\n\nfunction assertDeclareFunction(node, opts = {}) {\n  assert(\"DeclareFunction\", node, opts);\n}\n\nfunction assertDeclareInterface(node, opts = {}) {\n  assert(\"DeclareInterface\", node, opts);\n}\n\nfunction assertDeclareModule(node, opts = {}) {\n  assert(\"DeclareModule\", node, opts);\n}\n\nfunction assertDeclareModuleExports(node, opts = {}) {\n  assert(\"DeclareModuleExports\", node, opts);\n}\n\nfunction assertDeclareTypeAlias(node, opts = {}) {\n  assert(\"DeclareTypeAlias\", node, opts);\n}\n\nfunction assertDeclareOpaqueType(node, opts = {}) {\n  assert(\"DeclareOpaqueType\", node, opts);\n}\n\nfunction assertDeclareVariable(node, opts = {}) {\n  assert(\"DeclareVariable\", node, opts);\n}\n\nfunction assertDeclareExportDeclaration(node, opts = {}) {\n  assert(\"DeclareExportDeclaration\", node, opts);\n}\n\nfunction assertDeclareExportAllDeclaration(node, opts = {}) {\n  assert(\"DeclareExportAllDeclaration\", node, opts);\n}\n\nfunction assertDeclaredPredicate(node, opts = {}) {\n  assert(\"DeclaredPredicate\", node, opts);\n}\n\nfunction assertExistsTypeAnnotation(node, opts = {}) {\n  assert(\"ExistsTypeAnnotation\", node, opts);\n}\n\nfunction assertFunctionTypeAnnotation(node, opts = {}) {\n  assert(\"FunctionTypeAnnotation\", node, opts);\n}\n\nfunction assertFunctionTypeParam(node, opts = {}) {\n  assert(\"FunctionTypeParam\", node, opts);\n}\n\nfunction assertGenericTypeAnnotation(node, opts = {}) {\n  assert(\"GenericTypeAnnotation\", node, opts);\n}\n\nfunction assertInferredPredicate(node, opts = {}) {\n  assert(\"InferredPredicate\", node, opts);\n}\n\nfunction assertInterfaceExtends(node, opts = {}) {\n  assert(\"InterfaceExtends\", node, opts);\n}\n\nfunction assertInterfaceDeclaration(node, opts = {}) {\n  assert(\"InterfaceDeclaration\", node, opts);\n}\n\nfunction assertInterfaceTypeAnnotation(node, opts = {}) {\n  assert(\"InterfaceTypeAnnotation\", node, opts);\n}\n\nfunction assertIntersectionTypeAnnotation(node, opts = {}) {\n  assert(\"IntersectionTypeAnnotation\", node, opts);\n}\n\nfunction assertMixedTypeAnnotation(node, opts = {}) {\n  assert(\"MixedTypeAnnotation\", node, opts);\n}\n\nfunction assertEmptyTypeAnnotation(node, opts = {}) {\n  assert(\"EmptyTypeAnnotation\", node, opts);\n}\n\nfunction assertNullableTypeAnnotation(node, opts = {}) {\n  assert(\"NullableTypeAnnotation\", node, opts);\n}\n\nfunction assertNumberLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"NumberLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertNumberTypeAnnotation(node, opts = {}) {\n  assert(\"NumberTypeAnnotation\", node, opts);\n}\n\nfunction assertObjectTypeAnnotation(node, opts = {}) {\n  assert(\"ObjectTypeAnnotation\", node, opts);\n}\n\nfunction assertObjectTypeInternalSlot(node, opts = {}) {\n  assert(\"ObjectTypeInternalSlot\", node, opts);\n}\n\nfunction assertObjectTypeCallProperty(node, opts = {}) {\n  assert(\"ObjectTypeCallProperty\", node, opts);\n}\n\nfunction assertObjectTypeIndexer(node, opts = {}) {\n  assert(\"ObjectTypeIndexer\", node, opts);\n}\n\nfunction assertObjectTypeProperty(node, opts = {}) {\n  assert(\"ObjectTypeProperty\", node, opts);\n}\n\nfunction assertObjectTypeSpreadProperty(node, opts = {}) {\n  assert(\"ObjectTypeSpreadProperty\", node, opts);\n}\n\nfunction assertOpaqueType(node, opts = {}) {\n  assert(\"OpaqueType\", node, opts);\n}\n\nfunction assertQualifiedTypeIdentifier(node, opts = {}) {\n  assert(\"QualifiedTypeIdentifier\", node, opts);\n}\n\nfunction assertStringLiteralTypeAnnotation(node, opts = {}) {\n  assert(\"StringLiteralTypeAnnotation\", node, opts);\n}\n\nfunction assertStringTypeAnnotation(node, opts = {}) {\n  assert(\"StringTypeAnnotation\", node, opts);\n}\n\nfunction assertSymbolTypeAnnotation(node, opts = {}) {\n  assert(\"SymbolTypeAnnotation\", node, opts);\n}\n\nfunction assertThisTypeAnnotation(node, opts = {}) {\n  assert(\"ThisTypeAnnotation\", node, opts);\n}\n\nfunction assertTupleTypeAnnotation(node, opts = {}) {\n  assert(\"TupleTypeAnnotation\", node, opts);\n}\n\nfunction assertTypeofTypeAnnotation(node, opts = {}) {\n  assert(\"TypeofTypeAnnotation\", node, opts);\n}\n\nfunction assertTypeAlias(node, opts = {}) {\n  assert(\"TypeAlias\", node, opts);\n}\n\nfunction assertTypeAnnotation(node, opts = {}) {\n  assert(\"TypeAnnotation\", node, opts);\n}\n\nfunction assertTypeCastExpression(node, opts = {}) {\n  assert(\"TypeCastExpression\", node, opts);\n}\n\nfunction assertTypeParameter(node, opts = {}) {\n  assert(\"TypeParameter\", node, opts);\n}\n\nfunction assertTypeParameterDeclaration(node, opts = {}) {\n  assert(\"TypeParameterDeclaration\", node, opts);\n}\n\nfunction assertTypeParameterInstantiation(node, opts = {}) {\n  assert(\"TypeParameterInstantiation\", node, opts);\n}\n\nfunction assertUnionTypeAnnotation(node, opts = {}) {\n  assert(\"UnionTypeAnnotation\", node, opts);\n}\n\nfunction assertVariance(node, opts = {}) {\n  assert(\"Variance\", node, opts);\n}\n\nfunction assertVoidTypeAnnotation(node, opts = {}) {\n  assert(\"VoidTypeAnnotation\", node, opts);\n}\n\nfunction assertEnumDeclaration(node, opts = {}) {\n  assert(\"EnumDeclaration\", node, opts);\n}\n\nfunction assertEnumBooleanBody(node, opts = {}) {\n  assert(\"EnumBooleanBody\", node, opts);\n}\n\nfunction assertEnumNumberBody(node, opts = {}) {\n  assert(\"EnumNumberBody\", node, opts);\n}\n\nfunction assertEnumStringBody(node, opts = {}) {\n  assert(\"EnumStringBody\", node, opts);\n}\n\nfunction assertEnumSymbolBody(node, opts = {}) {\n  assert(\"EnumSymbolBody\", node, opts);\n}\n\nfunction assertEnumBooleanMember(node, opts = {}) {\n  assert(\"EnumBooleanMember\", node, opts);\n}\n\nfunction assertEnumNumberMember(node, opts = {}) {\n  assert(\"EnumNumberMember\", node, opts);\n}\n\nfunction assertEnumStringMember(node, opts = {}) {\n  assert(\"EnumStringMember\", node, opts);\n}\n\nfunction assertEnumDefaultedMember(node, opts = {}) {\n  assert(\"EnumDefaultedMember\", node, opts);\n}\n\nfunction assertJSXAttribute(node, opts = {}) {\n  assert(\"JSXAttribute\", node, opts);\n}\n\nfunction assertJSXClosingElement(node, opts = {}) {\n  assert(\"JSXClosingElement\", node, opts);\n}\n\nfunction assertJSXElement(node, opts = {}) {\n  assert(\"JSXElement\", node, opts);\n}\n\nfunction assertJSXEmptyExpression(node, opts = {}) {\n  assert(\"JSXEmptyExpression\", node, opts);\n}\n\nfunction assertJSXExpressionContainer(node, opts = {}) {\n  assert(\"JSXExpressionContainer\", node, opts);\n}\n\nfunction assertJSXSpreadChild(node, opts = {}) {\n  assert(\"JSXSpreadChild\", node, opts);\n}\n\nfunction assertJSXIdentifier(node, opts = {}) {\n  assert(\"JSXIdentifier\", node, opts);\n}\n\nfunction assertJSXMemberExpression(node, opts = {}) {\n  assert(\"JSXMemberExpression\", node, opts);\n}\n\nfunction assertJSXNamespacedName(node, opts = {}) {\n  assert(\"JSXNamespacedName\", node, opts);\n}\n\nfunction assertJSXOpeningElement(node, opts = {}) {\n  assert(\"JSXOpeningElement\", node, opts);\n}\n\nfunction assertJSXSpreadAttribute(node, opts = {}) {\n  assert(\"JSXSpreadAttribute\", node, opts);\n}\n\nfunction assertJSXText(node, opts = {}) {\n  assert(\"JSXText\", node, opts);\n}\n\nfunction assertJSXFragment(node, opts = {}) {\n  assert(\"JSXFragment\", node, opts);\n}\n\nfunction assertJSXOpeningFragment(node, opts = {}) {\n  assert(\"JSXOpeningFragment\", node, opts);\n}\n\nfunction assertJSXClosingFragment(node, opts = {}) {\n  assert(\"JSXClosingFragment\", node, opts);\n}\n\nfunction assertNoop(node, opts = {}) {\n  assert(\"Noop\", node, opts);\n}\n\nfunction assertPlaceholder(node, opts = {}) {\n  assert(\"Placeholder\", node, opts);\n}\n\nfunction assertV8IntrinsicIdentifier(node, opts = {}) {\n  assert(\"V8IntrinsicIdentifier\", node, opts);\n}\n\nfunction assertArgumentPlaceholder(node, opts = {}) {\n  assert(\"ArgumentPlaceholder\", node, opts);\n}\n\nfunction assertBindExpression(node, opts = {}) {\n  assert(\"BindExpression\", node, opts);\n}\n\nfunction assertClassProperty(node, opts = {}) {\n  assert(\"ClassProperty\", node, opts);\n}\n\nfunction assertPipelineTopicExpression(node, opts = {}) {\n  assert(\"PipelineTopicExpression\", node, opts);\n}\n\nfunction assertPipelineBareFunction(node, opts = {}) {\n  assert(\"PipelineBareFunction\", node, opts);\n}\n\nfunction assertPipelinePrimaryTopicReference(node, opts = {}) {\n  assert(\"PipelinePrimaryTopicReference\", node, opts);\n}\n\nfunction assertClassPrivateProperty(node, opts = {}) {\n  assert(\"ClassPrivateProperty\", node, opts);\n}\n\nfunction assertClassPrivateMethod(node, opts = {}) {\n  assert(\"ClassPrivateMethod\", node, opts);\n}\n\nfunction assertImportAttribute(node, opts = {}) {\n  assert(\"ImportAttribute\", node, opts);\n}\n\nfunction assertDecorator(node, opts = {}) {\n  assert(\"Decorator\", node, opts);\n}\n\nfunction assertDoExpression(node, opts = {}) {\n  assert(\"DoExpression\", node, opts);\n}\n\nfunction assertExportDefaultSpecifier(node, opts = {}) {\n  assert(\"ExportDefaultSpecifier\", node, opts);\n}\n\nfunction assertPrivateName(node, opts = {}) {\n  assert(\"PrivateName\", node, opts);\n}\n\nfunction assertRecordExpression(node, opts = {}) {\n  assert(\"RecordExpression\", node, opts);\n}\n\nfunction assertTupleExpression(node, opts = {}) {\n  assert(\"TupleExpression\", node, opts);\n}\n\nfunction assertDecimalLiteral(node, opts = {}) {\n  assert(\"DecimalLiteral\", node, opts);\n}\n\nfunction assertStaticBlock(node, opts = {}) {\n  assert(\"StaticBlock\", node, opts);\n}\n\nfunction assertTSParameterProperty(node, opts = {}) {\n  assert(\"TSParameterProperty\", node, opts);\n}\n\nfunction assertTSDeclareFunction(node, opts = {}) {\n  assert(\"TSDeclareFunction\", node, opts);\n}\n\nfunction assertTSDeclareMethod(node, opts = {}) {\n  assert(\"TSDeclareMethod\", node, opts);\n}\n\nfunction assertTSQualifiedName(node, opts = {}) {\n  assert(\"TSQualifiedName\", node, opts);\n}\n\nfunction assertTSCallSignatureDeclaration(node, opts = {}) {\n  assert(\"TSCallSignatureDeclaration\", node, opts);\n}\n\nfunction assertTSConstructSignatureDeclaration(node, opts = {}) {\n  assert(\"TSConstructSignatureDeclaration\", node, opts);\n}\n\nfunction assertTSPropertySignature(node, opts = {}) {\n  assert(\"TSPropertySignature\", node, opts);\n}\n\nfunction assertTSMethodSignature(node, opts = {}) {\n  assert(\"TSMethodSignature\", node, opts);\n}\n\nfunction assertTSIndexSignature(node, opts = {}) {\n  assert(\"TSIndexSignature\", node, opts);\n}\n\nfunction assertTSAnyKeyword(node, opts = {}) {\n  assert(\"TSAnyKeyword\", node, opts);\n}\n\nfunction assertTSBooleanKeyword(node, opts = {}) {\n  assert(\"TSBooleanKeyword\", node, opts);\n}\n\nfunction assertTSBigIntKeyword(node, opts = {}) {\n  assert(\"TSBigIntKeyword\", node, opts);\n}\n\nfunction assertTSIntrinsicKeyword(node, opts = {}) {\n  assert(\"TSIntrinsicKeyword\", node, opts);\n}\n\nfunction assertTSNeverKeyword(node, opts = {}) {\n  assert(\"TSNeverKeyword\", node, opts);\n}\n\nfunction assertTSNullKeyword(node, opts = {}) {\n  assert(\"TSNullKeyword\", node, opts);\n}\n\nfunction assertTSNumberKeyword(node, opts = {}) {\n  assert(\"TSNumberKeyword\", node, opts);\n}\n\nfunction assertTSObjectKeyword(node, opts = {}) {\n  assert(\"TSObjectKeyword\", node, opts);\n}\n\nfunction assertTSStringKeyword(node, opts = {}) {\n  assert(\"TSStringKeyword\", node, opts);\n}\n\nfunction assertTSSymbolKeyword(node, opts = {}) {\n  assert(\"TSSymbolKeyword\", node, opts);\n}\n\nfunction assertTSUndefinedKeyword(node, opts = {}) {\n  assert(\"TSUndefinedKeyword\", node, opts);\n}\n\nfunction assertTSUnknownKeyword(node, opts = {}) {\n  assert(\"TSUnknownKeyword\", node, opts);\n}\n\nfunction assertTSVoidKeyword(node, opts = {}) {\n  assert(\"TSVoidKeyword\", node, opts);\n}\n\nfunction assertTSThisType(node, opts = {}) {\n  assert(\"TSThisType\", node, opts);\n}\n\nfunction assertTSFunctionType(node, opts = {}) {\n  assert(\"TSFunctionType\", node, opts);\n}\n\nfunction assertTSConstructorType(node, opts = {}) {\n  assert(\"TSConstructorType\", node, opts);\n}\n\nfunction assertTSTypeReference(node, opts = {}) {\n  assert(\"TSTypeReference\", node, opts);\n}\n\nfunction assertTSTypePredicate(node, opts = {}) {\n  assert(\"TSTypePredicate\", node, opts);\n}\n\nfunction assertTSTypeQuery(node, opts = {}) {\n  assert(\"TSTypeQuery\", node, opts);\n}\n\nfunction assertTSTypeLiteral(node, opts = {}) {\n  assert(\"TSTypeLiteral\", node, opts);\n}\n\nfunction assertTSArrayType(node, opts = {}) {\n  assert(\"TSArrayType\", node, opts);\n}\n\nfunction assertTSTupleType(node, opts = {}) {\n  assert(\"TSTupleType\", node, opts);\n}\n\nfunction assertTSOptionalType(node, opts = {}) {\n  assert(\"TSOptionalType\", node, opts);\n}\n\nfunction assertTSRestType(node, opts = {}) {\n  assert(\"TSRestType\", node, opts);\n}\n\nfunction assertTSNamedTupleMember(node, opts = {}) {\n  assert(\"TSNamedTupleMember\", node, opts);\n}\n\nfunction assertTSUnionType(node, opts = {}) {\n  assert(\"TSUnionType\", node, opts);\n}\n\nfunction assertTSIntersectionType(node, opts = {}) {\n  assert(\"TSIntersectionType\", node, opts);\n}\n\nfunction assertTSConditionalType(node, opts = {}) {\n  assert(\"TSConditionalType\", node, opts);\n}\n\nfunction assertTSInferType(node, opts = {}) {\n  assert(\"TSInferType\", node, opts);\n}\n\nfunction assertTSParenthesizedType(node, opts = {}) {\n  assert(\"TSParenthesizedType\", node, opts);\n}\n\nfunction assertTSTypeOperator(node, opts = {}) {\n  assert(\"TSTypeOperator\", node, opts);\n}\n\nfunction assertTSIndexedAccessType(node, opts = {}) {\n  assert(\"TSIndexedAccessType\", node, opts);\n}\n\nfunction assertTSMappedType(node, opts = {}) {\n  assert(\"TSMappedType\", node, opts);\n}\n\nfunction assertTSLiteralType(node, opts = {}) {\n  assert(\"TSLiteralType\", node, opts);\n}\n\nfunction assertTSExpressionWithTypeArguments(node, opts = {}) {\n  assert(\"TSExpressionWithTypeArguments\", node, opts);\n}\n\nfunction assertTSInterfaceDeclaration(node, opts = {}) {\n  assert(\"TSInterfaceDeclaration\", node, opts);\n}\n\nfunction assertTSInterfaceBody(node, opts = {}) {\n  assert(\"TSInterfaceBody\", node, opts);\n}\n\nfunction assertTSTypeAliasDeclaration(node, opts = {}) {\n  assert(\"TSTypeAliasDeclaration\", node, opts);\n}\n\nfunction assertTSAsExpression(node, opts = {}) {\n  assert(\"TSAsExpression\", node, opts);\n}\n\nfunction assertTSTypeAssertion(node, opts = {}) {\n  assert(\"TSTypeAssertion\", node, opts);\n}\n\nfunction assertTSEnumDeclaration(node, opts = {}) {\n  assert(\"TSEnumDeclaration\", node, opts);\n}\n\nfunction assertTSEnumMember(node, opts = {}) {\n  assert(\"TSEnumMember\", node, opts);\n}\n\nfunction assertTSModuleDeclaration(node, opts = {}) {\n  assert(\"TSModuleDeclaration\", node, opts);\n}\n\nfunction assertTSModuleBlock(node, opts = {}) {\n  assert(\"TSModuleBlock\", node, opts);\n}\n\nfunction assertTSImportType(node, opts = {}) {\n  assert(\"TSImportType\", node, opts);\n}\n\nfunction assertTSImportEqualsDeclaration(node, opts = {}) {\n  assert(\"TSImportEqualsDeclaration\", node, opts);\n}\n\nfunction assertTSExternalModuleReference(node, opts = {}) {\n  assert(\"TSExternalModuleReference\", node, opts);\n}\n\nfunction assertTSNonNullExpression(node, opts = {}) {\n  assert(\"TSNonNullExpression\", node, opts);\n}\n\nfunction assertTSExportAssignment(node, opts = {}) {\n  assert(\"TSExportAssignment\", node, opts);\n}\n\nfunction assertTSNamespaceExportDeclaration(node, opts = {}) {\n  assert(\"TSNamespaceExportDeclaration\", node, opts);\n}\n\nfunction assertTSTypeAnnotation(node, opts = {}) {\n  assert(\"TSTypeAnnotation\", node, opts);\n}\n\nfunction assertTSTypeParameterInstantiation(node, opts = {}) {\n  assert(\"TSTypeParameterInstantiation\", node, opts);\n}\n\nfunction assertTSTypeParameterDeclaration(node, opts = {}) {\n  assert(\"TSTypeParameterDeclaration\", node, opts);\n}\n\nfunction assertTSTypeParameter(node, opts = {}) {\n  assert(\"TSTypeParameter\", node, opts);\n}\n\nfunction assertExpression(node, opts = {}) {\n  assert(\"Expression\", node, opts);\n}\n\nfunction assertBinary(node, opts = {}) {\n  assert(\"Binary\", node, opts);\n}\n\nfunction assertScopable(node, opts = {}) {\n  assert(\"Scopable\", node, opts);\n}\n\nfunction assertBlockParent(node, opts = {}) {\n  assert(\"BlockParent\", node, opts);\n}\n\nfunction assertBlock(node, opts = {}) {\n  assert(\"Block\", node, opts);\n}\n\nfunction assertStatement(node, opts = {}) {\n  assert(\"Statement\", node, opts);\n}\n\nfunction assertTerminatorless(node, opts = {}) {\n  assert(\"Terminatorless\", node, opts);\n}\n\nfunction assertCompletionStatement(node, opts = {}) {\n  assert(\"CompletionStatement\", node, opts);\n}\n\nfunction assertConditional(node, opts = {}) {\n  assert(\"Conditional\", node, opts);\n}\n\nfunction assertLoop(node, opts = {}) {\n  assert(\"Loop\", node, opts);\n}\n\nfunction assertWhile(node, opts = {}) {\n  assert(\"While\", node, opts);\n}\n\nfunction assertExpressionWrapper(node, opts = {}) {\n  assert(\"ExpressionWrapper\", node, opts);\n}\n\nfunction assertFor(node, opts = {}) {\n  assert(\"For\", node, opts);\n}\n\nfunction assertForXStatement(node, opts = {}) {\n  assert(\"ForXStatement\", node, opts);\n}\n\nfunction assertFunction(node, opts = {}) {\n  assert(\"Function\", node, opts);\n}\n\nfunction assertFunctionParent(node, opts = {}) {\n  assert(\"FunctionParent\", node, opts);\n}\n\nfunction assertPureish(node, opts = {}) {\n  assert(\"Pureish\", node, opts);\n}\n\nfunction assertDeclaration(node, opts = {}) {\n  assert(\"Declaration\", node, opts);\n}\n\nfunction assertPatternLike(node, opts = {}) {\n  assert(\"PatternLike\", node, opts);\n}\n\nfunction assertLVal(node, opts = {}) {\n  assert(\"LVal\", node, opts);\n}\n\nfunction assertTSEntityName(node, opts = {}) {\n  assert(\"TSEntityName\", node, opts);\n}\n\nfunction assertLiteral(node, opts = {}) {\n  assert(\"Literal\", node, opts);\n}\n\nfunction assertImmutable(node, opts = {}) {\n  assert(\"Immutable\", node, opts);\n}\n\nfunction assertUserWhitespacable(node, opts = {}) {\n  assert(\"UserWhitespacable\", node, opts);\n}\n\nfunction assertMethod(node, opts = {}) {\n  assert(\"Method\", node, opts);\n}\n\nfunction assertObjectMember(node, opts = {}) {\n  assert(\"ObjectMember\", node, opts);\n}\n\nfunction assertProperty(node, opts = {}) {\n  assert(\"Property\", node, opts);\n}\n\nfunction assertUnaryLike(node, opts = {}) {\n  assert(\"UnaryLike\", node, opts);\n}\n\nfunction assertPattern(node, opts = {}) {\n  assert(\"Pattern\", node, opts);\n}\n\nfunction assertClass(node, opts = {}) {\n  assert(\"Class\", node, opts);\n}\n\nfunction assertModuleDeclaration(node, opts = {}) {\n  assert(\"ModuleDeclaration\", node, opts);\n}\n\nfunction assertExportDeclaration(node, opts = {}) {\n  assert(\"ExportDeclaration\", node, opts);\n}\n\nfunction assertModuleSpecifier(node, opts = {}) {\n  assert(\"ModuleSpecifier\", node, opts);\n}\n\nfunction assertFlow(node, opts = {}) {\n  assert(\"Flow\", node, opts);\n}\n\nfunction assertFlowType(node, opts = {}) {\n  assert(\"FlowType\", node, opts);\n}\n\nfunction assertFlowBaseAnnotation(node, opts = {}) {\n  assert(\"FlowBaseAnnotation\", node, opts);\n}\n\nfunction assertFlowDeclaration(node, opts = {}) {\n  assert(\"FlowDeclaration\", node, opts);\n}\n\nfunction assertFlowPredicate(node, opts = {}) {\n  assert(\"FlowPredicate\", node, opts);\n}\n\nfunction assertEnumBody(node, opts = {}) {\n  assert(\"EnumBody\", node, opts);\n}\n\nfunction assertEnumMember(node, opts = {}) {\n  assert(\"EnumMember\", node, opts);\n}\n\nfunction assertJSX(node, opts = {}) {\n  assert(\"JSX\", node, opts);\n}\n\nfunction assertPrivate(node, opts = {}) {\n  assert(\"Private\", node, opts);\n}\n\nfunction assertTSTypeElement(node, opts = {}) {\n  assert(\"TSTypeElement\", node, opts);\n}\n\nfunction assertTSType(node, opts = {}) {\n  assert(\"TSType\", node, opts);\n}\n\nfunction assertTSBaseType(node, opts = {}) {\n  assert(\"TSBaseType\", node, opts);\n}\n\nfunction assertNumberLiteral(node, opts) {\n  console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n  assert(\"NumberLiteral\", node, opts);\n}\n\nfunction assertRegexLiteral(node, opts) {\n  console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n  assert(\"RegexLiteral\", node, opts);\n}\n\nfunction assertRestProperty(node, opts) {\n  console.trace(\"The node type RestProperty has been renamed to RestElement\");\n  assert(\"RestProperty\", node, opts);\n}\n\nfunction assertSpreadProperty(node, opts) {\n  console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n  assert(\"SpreadProperty\", node, opts);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createTypeAnnotationBasedOnTypeof;\n\nvar _generated = require(\"../generated\");\n\nfunction createTypeAnnotationBasedOnTypeof(type) {\n  if (type === \"string\") {\n    return (0, _generated.stringTypeAnnotation)();\n  } else if (type === \"number\") {\n    return (0, _generated.numberTypeAnnotation)();\n  } else if (type === \"undefined\") {\n    return (0, _generated.voidTypeAnnotation)();\n  } else if (type === \"boolean\") {\n    return (0, _generated.booleanTypeAnnotation)();\n  } else if (type === \"function\") {\n    return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)(\"Function\"));\n  } else if (type === \"object\") {\n    return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)(\"Object\"));\n  } else if (type === \"symbol\") {\n    return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)(\"Symbol\"));\n  } else {\n    throw new Error(\"Invalid typeof value\");\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeTypeDuplicates;\n\nvar _generated = require(\"../../validators/generated\");\n\nfunction removeTypeDuplicates(nodes) {\n  const generics = {};\n  const bases = {};\n  const typeGroups = [];\n  const types = [];\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (!node) continue;\n\n    if (types.indexOf(node) >= 0) {\n      continue;\n    }\n\n    if ((0, _generated.isAnyTypeAnnotation)(node)) {\n      return [node];\n    }\n\n    if ((0, _generated.isFlowBaseAnnotation)(node)) {\n      bases[node.type] = node;\n      continue;\n    }\n\n    if ((0, _generated.isUnionTypeAnnotation)(node)) {\n      if (typeGroups.indexOf(node.types) < 0) {\n        nodes = nodes.concat(node.types);\n        typeGroups.push(node.types);\n      }\n\n      continue;\n    }\n\n    if ((0, _generated.isGenericTypeAnnotation)(node)) {\n      const name = node.id.name;\n\n      if (generics[name]) {\n        let existing = generics[name];\n\n        if (existing.typeParameters) {\n          if (node.typeParameters) {\n            existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));\n          }\n        } else {\n          existing = node.typeParameters;\n        }\n      } else {\n        generics[name] = node;\n      }\n\n      continue;\n    }\n\n    types.push(node);\n  }\n\n  for (const type of Object.keys(bases)) {\n    types.push(bases[type]);\n  }\n\n  for (const name of Object.keys(generics)) {\n    types.push(generics[name]);\n  }\n\n  return types;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createFlowUnionType;\n\nvar _generated = require(\"../generated\");\n\nvar _removeTypeDuplicates = _interopRequireDefault(require(\"../../modifications/flow/removeTypeDuplicates\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createFlowUnionType(types) {\n  const flattened = (0, _removeTypeDuplicates.default)(types);\n\n  if (flattened.length === 1) {\n    return flattened[0];\n  } else {\n    return (0, _generated.unionTypeAnnotation)(flattened);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeTypeDuplicates;\n\nvar _generated = require(\"../../validators/generated\");\n\nfunction removeTypeDuplicates(nodes) {\n  const generics = {};\n  const bases = {};\n  const typeGroups = [];\n  const types = [];\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (!node) continue;\n\n    if (types.indexOf(node) >= 0) {\n      continue;\n    }\n\n    if ((0, _generated.isTSAnyKeyword)(node.type)) {\n      return [node];\n    }\n\n    if ((0, _generated.isTSBaseType)(node)) {\n      bases[node.type] = node;\n      continue;\n    }\n\n    if ((0, _generated.isTSUnionType)(node)) {\n      if (typeGroups.indexOf(node.types) < 0) {\n        nodes = nodes.concat(node.types);\n        typeGroups.push(node.types);\n      }\n\n      continue;\n    }\n\n    types.push(node);\n  }\n\n  for (const type of Object.keys(bases)) {\n    types.push(bases[type]);\n  }\n\n  for (const name of Object.keys(generics)) {\n    types.push(generics[name]);\n  }\n\n  return types;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createTSUnionType;\n\nvar _generated = require(\"../generated\");\n\nvar _removeTypeDuplicates = _interopRequireDefault(require(\"../../modifications/typescript/removeTypeDuplicates\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createTSUnionType(typeAnnotations) {\n  const types = typeAnnotations.map(type => type.typeAnnotations);\n  const flattened = (0, _removeTypeDuplicates.default)(types);\n\n  if (flattened.length === 1) {\n    return flattened[0];\n  } else {\n    return (0, _generated.tsUnionType)(flattened);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneNode;\n\nvar _definitions = require(\"../definitions\");\n\nconst has = Function.call.bind(Object.prototype.hasOwnProperty);\n\nfunction cloneIfNode(obj, deep, withoutLoc) {\n  if (obj && typeof obj.type === \"string\") {\n    return cloneNode(obj, deep, withoutLoc);\n  }\n\n  return obj;\n}\n\nfunction cloneIfNodeOrArray(obj, deep, withoutLoc) {\n  if (Array.isArray(obj)) {\n    return obj.map(node => cloneIfNode(node, deep, withoutLoc));\n  }\n\n  return cloneIfNode(obj, deep, withoutLoc);\n}\n\nfunction cloneNode(node, deep = true, withoutLoc = false) {\n  if (!node) return node;\n  const {\n    type\n  } = node;\n  const newNode = {\n    type\n  };\n\n  if (type === \"Identifier\") {\n    newNode.name = node.name;\n\n    if (has(node, \"optional\") && typeof node.optional === \"boolean\") {\n      newNode.optional = node.optional;\n    }\n\n    if (has(node, \"typeAnnotation\")) {\n      newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc) : node.typeAnnotation;\n    }\n  } else if (!has(_definitions.NODE_FIELDS, type)) {\n    throw new Error(`Unknown node type: \"${type}\"`);\n  } else {\n    for (const field of Object.keys(_definitions.NODE_FIELDS[type])) {\n      if (has(node, field)) {\n        if (deep) {\n          newNode[field] = type === \"File\" && field === \"comments\" ? maybeCloneComments(node.comments, deep, withoutLoc) : cloneIfNodeOrArray(node[field], true, withoutLoc);\n        } else {\n          newNode[field] = node[field];\n        }\n      }\n    }\n  }\n\n  if (has(node, \"loc\")) {\n    if (withoutLoc) {\n      newNode.loc = null;\n    } else {\n      newNode.loc = node.loc;\n    }\n  }\n\n  if (has(node, \"leadingComments\")) {\n    newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc);\n  }\n\n  if (has(node, \"innerComments\")) {\n    newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc);\n  }\n\n  if (has(node, \"trailingComments\")) {\n    newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc);\n  }\n\n  if (has(node, \"extra\")) {\n    newNode.extra = Object.assign({}, node.extra);\n  }\n\n  return newNode;\n}\n\nfunction cloneCommentsWithoutLoc(comments) {\n  return comments.map(({\n    type,\n    value\n  }) => ({\n    type,\n    value,\n    loc: null\n  }));\n}\n\nfunction maybeCloneComments(comments, deep, withoutLoc) {\n  return deep && withoutLoc ? cloneCommentsWithoutLoc(comments) : comments;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = clone;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction clone(node) {\n  return (0, _cloneNode.default)(node, false);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneDeep;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneDeep(node) {\n  return (0, _cloneNode.default)(node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneDeepWithoutLoc;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneDeepWithoutLoc(node) {\n  return (0, _cloneNode.default)(node, true, true);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = cloneWithoutLoc;\n\nvar _cloneNode = _interopRequireDefault(require(\"./cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cloneWithoutLoc(node) {\n  return (0, _cloneNode.default)(node, false, true);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addComments;\n\nfunction addComments(node, type, comments) {\n  if (!comments || !node) return node;\n  const key = `${type}Comments`;\n\n  if (node[key]) {\n    if (type === \"leading\") {\n      node[key] = comments.concat(node[key]);\n    } else {\n      node[key] = node[key].concat(comments);\n    }\n  } else {\n    node[key] = comments;\n  }\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addComment;\n\nvar _addComments = _interopRequireDefault(require(\"./addComments\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction addComment(node, type, content, line) {\n  return (0, _addComments.default)(node, type, [{\n    type: line ? \"CommentLine\" : \"CommentBlock\",\n    value: content\n  }]);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inherit;\n\nfunction inherit(key, child, parent) {\n  if (child && parent) {\n    child[key] = Array.from(new Set([].concat(child[key], parent[key]).filter(Boolean)));\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritInnerComments;\n\nvar _inherit = _interopRequireDefault(require(\"../utils/inherit\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritInnerComments(child, parent) {\n  (0, _inherit.default)(\"innerComments\", child, parent);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritLeadingComments;\n\nvar _inherit = _interopRequireDefault(require(\"../utils/inherit\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritLeadingComments(child, parent) {\n  (0, _inherit.default)(\"leadingComments\", child, parent);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritTrailingComments;\n\nvar _inherit = _interopRequireDefault(require(\"../utils/inherit\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritTrailingComments(child, parent) {\n  (0, _inherit.default)(\"trailingComments\", child, parent);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inheritsComments;\n\nvar _inheritTrailingComments = _interopRequireDefault(require(\"./inheritTrailingComments\"));\n\nvar _inheritLeadingComments = _interopRequireDefault(require(\"./inheritLeadingComments\"));\n\nvar _inheritInnerComments = _interopRequireDefault(require(\"./inheritInnerComments\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inheritsComments(child, parent) {\n  (0, _inheritTrailingComments.default)(child, parent);\n  (0, _inheritLeadingComments.default)(child, parent);\n  (0, _inheritInnerComments.default)(child, parent);\n  return child;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeComments;\n\nvar _constants = require(\"../constants\");\n\nfunction removeComments(node) {\n  _constants.COMMENT_KEYS.forEach(key => {\n    node[key] = null;\n  });\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TSBASETYPE_TYPES = exports.TSTYPE_TYPES = exports.TSTYPEELEMENT_TYPES = exports.PRIVATE_TYPES = exports.JSX_TYPES = exports.ENUMMEMBER_TYPES = exports.ENUMBODY_TYPES = exports.FLOWPREDICATE_TYPES = exports.FLOWDECLARATION_TYPES = exports.FLOWBASEANNOTATION_TYPES = exports.FLOWTYPE_TYPES = exports.FLOW_TYPES = exports.MODULESPECIFIER_TYPES = exports.EXPORTDECLARATION_TYPES = exports.MODULEDECLARATION_TYPES = exports.CLASS_TYPES = exports.PATTERN_TYPES = exports.UNARYLIKE_TYPES = exports.PROPERTY_TYPES = exports.OBJECTMEMBER_TYPES = exports.METHOD_TYPES = exports.USERWHITESPACABLE_TYPES = exports.IMMUTABLE_TYPES = exports.LITERAL_TYPES = exports.TSENTITYNAME_TYPES = exports.LVAL_TYPES = exports.PATTERNLIKE_TYPES = exports.DECLARATION_TYPES = exports.PUREISH_TYPES = exports.FUNCTIONPARENT_TYPES = exports.FUNCTION_TYPES = exports.FORXSTATEMENT_TYPES = exports.FOR_TYPES = exports.EXPRESSIONWRAPPER_TYPES = exports.WHILE_TYPES = exports.LOOP_TYPES = exports.CONDITIONAL_TYPES = exports.COMPLETIONSTATEMENT_TYPES = exports.TERMINATORLESS_TYPES = exports.STATEMENT_TYPES = exports.BLOCK_TYPES = exports.BLOCKPARENT_TYPES = exports.SCOPABLE_TYPES = exports.BINARY_TYPES = exports.EXPRESSION_TYPES = void 0;\n\nvar _definitions = require(\"../../definitions\");\n\nconst EXPRESSION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Expression\"];\nexports.EXPRESSION_TYPES = EXPRESSION_TYPES;\nconst BINARY_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Binary\"];\nexports.BINARY_TYPES = BINARY_TYPES;\nconst SCOPABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Scopable\"];\nexports.SCOPABLE_TYPES = SCOPABLE_TYPES;\nconst BLOCKPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"BlockParent\"];\nexports.BLOCKPARENT_TYPES = BLOCKPARENT_TYPES;\nconst BLOCK_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Block\"];\nexports.BLOCK_TYPES = BLOCK_TYPES;\nconst STATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Statement\"];\nexports.STATEMENT_TYPES = STATEMENT_TYPES;\nconst TERMINATORLESS_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Terminatorless\"];\nexports.TERMINATORLESS_TYPES = TERMINATORLESS_TYPES;\nconst COMPLETIONSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"CompletionStatement\"];\nexports.COMPLETIONSTATEMENT_TYPES = COMPLETIONSTATEMENT_TYPES;\nconst CONDITIONAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Conditional\"];\nexports.CONDITIONAL_TYPES = CONDITIONAL_TYPES;\nconst LOOP_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Loop\"];\nexports.LOOP_TYPES = LOOP_TYPES;\nconst WHILE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"While\"];\nexports.WHILE_TYPES = WHILE_TYPES;\nconst EXPRESSIONWRAPPER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ExpressionWrapper\"];\nexports.EXPRESSIONWRAPPER_TYPES = EXPRESSIONWRAPPER_TYPES;\nconst FOR_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"For\"];\nexports.FOR_TYPES = FOR_TYPES;\nconst FORXSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ForXStatement\"];\nexports.FORXSTATEMENT_TYPES = FORXSTATEMENT_TYPES;\nconst FUNCTION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Function\"];\nexports.FUNCTION_TYPES = FUNCTION_TYPES;\nconst FUNCTIONPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FunctionParent\"];\nexports.FUNCTIONPARENT_TYPES = FUNCTIONPARENT_TYPES;\nconst PUREISH_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Pureish\"];\nexports.PUREISH_TYPES = PUREISH_TYPES;\nconst DECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Declaration\"];\nexports.DECLARATION_TYPES = DECLARATION_TYPES;\nconst PATTERNLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"PatternLike\"];\nexports.PATTERNLIKE_TYPES = PATTERNLIKE_TYPES;\nconst LVAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"LVal\"];\nexports.LVAL_TYPES = LVAL_TYPES;\nconst TSENTITYNAME_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSEntityName\"];\nexports.TSENTITYNAME_TYPES = TSENTITYNAME_TYPES;\nconst LITERAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Literal\"];\nexports.LITERAL_TYPES = LITERAL_TYPES;\nconst IMMUTABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Immutable\"];\nexports.IMMUTABLE_TYPES = IMMUTABLE_TYPES;\nconst USERWHITESPACABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"UserWhitespacable\"];\nexports.USERWHITESPACABLE_TYPES = USERWHITESPACABLE_TYPES;\nconst METHOD_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Method\"];\nexports.METHOD_TYPES = METHOD_TYPES;\nconst OBJECTMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ObjectMember\"];\nexports.OBJECTMEMBER_TYPES = OBJECTMEMBER_TYPES;\nconst PROPERTY_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Property\"];\nexports.PROPERTY_TYPES = PROPERTY_TYPES;\nconst UNARYLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"UnaryLike\"];\nexports.UNARYLIKE_TYPES = UNARYLIKE_TYPES;\nconst PATTERN_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Pattern\"];\nexports.PATTERN_TYPES = PATTERN_TYPES;\nconst CLASS_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Class\"];\nexports.CLASS_TYPES = CLASS_TYPES;\nconst MODULEDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ModuleDeclaration\"];\nexports.MODULEDECLARATION_TYPES = MODULEDECLARATION_TYPES;\nconst EXPORTDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ExportDeclaration\"];\nexports.EXPORTDECLARATION_TYPES = EXPORTDECLARATION_TYPES;\nconst MODULESPECIFIER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"ModuleSpecifier\"];\nexports.MODULESPECIFIER_TYPES = MODULESPECIFIER_TYPES;\nconst FLOW_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Flow\"];\nexports.FLOW_TYPES = FLOW_TYPES;\nconst FLOWTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowType\"];\nexports.FLOWTYPE_TYPES = FLOWTYPE_TYPES;\nconst FLOWBASEANNOTATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowBaseAnnotation\"];\nexports.FLOWBASEANNOTATION_TYPES = FLOWBASEANNOTATION_TYPES;\nconst FLOWDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowDeclaration\"];\nexports.FLOWDECLARATION_TYPES = FLOWDECLARATION_TYPES;\nconst FLOWPREDICATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"FlowPredicate\"];\nexports.FLOWPREDICATE_TYPES = FLOWPREDICATE_TYPES;\nconst ENUMBODY_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"EnumBody\"];\nexports.ENUMBODY_TYPES = ENUMBODY_TYPES;\nconst ENUMMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"EnumMember\"];\nexports.ENUMMEMBER_TYPES = ENUMMEMBER_TYPES;\nconst JSX_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"JSX\"];\nexports.JSX_TYPES = JSX_TYPES;\nconst PRIVATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"Private\"];\nexports.PRIVATE_TYPES = PRIVATE_TYPES;\nconst TSTYPEELEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSTypeElement\"];\nexports.TSTYPEELEMENT_TYPES = TSTYPEELEMENT_TYPES;\nconst TSTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSType\"];\nexports.TSTYPE_TYPES = TSTYPE_TYPES;\nconst TSBASETYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS[\"TSBaseType\"];\nexports.TSBASETYPE_TYPES = TSBASETYPE_TYPES;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toBlock;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toBlock(node, parent) {\n  if ((0, _generated.isBlockStatement)(node)) {\n    return node;\n  }\n\n  let blockNodes = [];\n\n  if ((0, _generated.isEmptyStatement)(node)) {\n    blockNodes = [];\n  } else {\n    if (!(0, _generated.isStatement)(node)) {\n      if ((0, _generated.isFunction)(parent)) {\n        node = (0, _generated2.returnStatement)(node);\n      } else {\n        node = (0, _generated2.expressionStatement)(node);\n      }\n    }\n\n    blockNodes = [node];\n  }\n\n  return (0, _generated2.blockStatement)(blockNodes);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = ensureBlock;\n\nvar _toBlock = _interopRequireDefault(require(\"./toBlock\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ensureBlock(node, key = \"body\") {\n  return node[key] = (0, _toBlock.default)(node[key], node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toIdentifier;\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"../validators/isValidIdentifier\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toIdentifier(name) {\n  name = name + \"\";\n  name = name.replace(/[^a-zA-Z0-9$_]/g, \"-\");\n  name = name.replace(/^[-0-9]+/, \"\");\n  name = name.replace(/[-\\s]+(.)?/g, function (match, c) {\n    return c ? c.toUpperCase() : \"\";\n  });\n\n  if (!(0, _isValidIdentifier.default)(name)) {\n    name = `_${name}`;\n  }\n\n  return name || \"_\";\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toBindingIdentifierName;\n\nvar _toIdentifier = _interopRequireDefault(require(\"./toIdentifier\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toBindingIdentifierName(name) {\n  name = (0, _toIdentifier.default)(name);\n  if (name === \"eval\" || name === \"arguments\") name = \"_\" + name;\n  return name;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toComputedKey;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toComputedKey(node, key = node.key || node.property) {\n  if (!node.computed && (0, _generated.isIdentifier)(key)) key = (0, _generated2.stringLiteral)(key.name);\n  return key;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toExpression;\n\nvar _generated = require(\"../validators/generated\");\n\nfunction toExpression(node) {\n  if ((0, _generated.isExpressionStatement)(node)) {\n    node = node.expression;\n  }\n\n  if ((0, _generated.isExpression)(node)) {\n    return node;\n  }\n\n  if ((0, _generated.isClass)(node)) {\n    node.type = \"ClassExpression\";\n  } else if ((0, _generated.isFunction)(node)) {\n    node.type = \"FunctionExpression\";\n  }\n\n  if (!(0, _generated.isExpression)(node)) {\n    throw new Error(`cannot turn ${node.type} to an expression`);\n  }\n\n  return node;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = traverseFast;\n\nvar _definitions = require(\"../definitions\");\n\nfunction traverseFast(node, enter, opts) {\n  if (!node) return;\n  const keys = _definitions.VISITOR_KEYS[node.type];\n  if (!keys) return;\n  opts = opts || {};\n  enter(node, opts);\n\n  for (const key of keys) {\n    const subNode = node[key];\n\n    if (Array.isArray(subNode)) {\n      for (const node of subNode) {\n        traverseFast(node, enter, opts);\n      }\n    } else {\n      traverseFast(subNode, enter, opts);\n    }\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removeProperties;\n\nvar _constants = require(\"../constants\");\n\nconst CLEAR_KEYS = [\"tokens\", \"start\", \"end\", \"loc\", \"raw\", \"rawValue\"];\n\nconst CLEAR_KEYS_PLUS_COMMENTS = _constants.COMMENT_KEYS.concat([\"comments\"]).concat(CLEAR_KEYS);\n\nfunction removeProperties(node, opts = {}) {\n  const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;\n\n  for (const key of map) {\n    if (node[key] != null) node[key] = undefined;\n  }\n\n  for (const key of Object.keys(node)) {\n    if (key[0] === \"_\" && node[key] != null) node[key] = undefined;\n  }\n\n  const symbols = Object.getOwnPropertySymbols(node);\n\n  for (const sym of symbols) {\n    node[sym] = null;\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = removePropertiesDeep;\n\nvar _traverseFast = _interopRequireDefault(require(\"../traverse/traverseFast\"));\n\nvar _removeProperties = _interopRequireDefault(require(\"./removeProperties\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction removePropertiesDeep(tree, opts) {\n  (0, _traverseFast.default)(tree, _removeProperties.default, opts);\n  return tree;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toKeyAlias;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _cloneNode = _interopRequireDefault(require(\"../clone/cloneNode\"));\n\nvar _removePropertiesDeep = _interopRequireDefault(require(\"../modifications/removePropertiesDeep\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toKeyAlias(node, key = node.key) {\n  let alias;\n\n  if (node.kind === \"method\") {\n    return toKeyAlias.increment() + \"\";\n  } else if ((0, _generated.isIdentifier)(key)) {\n    alias = key.name;\n  } else if ((0, _generated.isStringLiteral)(key)) {\n    alias = JSON.stringify(key.value);\n  } else {\n    alias = JSON.stringify((0, _removePropertiesDeep.default)((0, _cloneNode.default)(key)));\n  }\n\n  if (node.computed) {\n    alias = `[${alias}]`;\n  }\n\n  if (node.static) {\n    alias = `static:${alias}`;\n  }\n\n  return alias;\n}\n\ntoKeyAlias.uid = 0;\n\ntoKeyAlias.increment = function () {\n  if (toKeyAlias.uid >= Number.MAX_SAFE_INTEGER) {\n    return toKeyAlias.uid = 0;\n  } else {\n    return toKeyAlias.uid++;\n  }\n};", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getBindingIdentifiers;\n\nvar _generated = require(\"../validators/generated\");\n\nfunction getBindingIdentifiers(node, duplicates, outerOnly) {\n  let search = [].concat(node);\n  const ids = Object.create(null);\n\n  while (search.length) {\n    const id = search.shift();\n    if (!id) continue;\n    const keys = getBindingIdentifiers.keys[id.type];\n\n    if ((0, _generated.isIdentifier)(id)) {\n      if (duplicates) {\n        const _ids = ids[id.name] = ids[id.name] || [];\n\n        _ids.push(id);\n      } else {\n        ids[id.name] = id;\n      }\n\n      continue;\n    }\n\n    if ((0, _generated.isExportDeclaration)(id)) {\n      if ((0, _generated.isDeclaration)(id.declaration)) {\n        search.push(id.declaration);\n      }\n\n      continue;\n    }\n\n    if (outerOnly) {\n      if ((0, _generated.isFunctionDeclaration)(id)) {\n        search.push(id.id);\n        continue;\n      }\n\n      if ((0, _generated.isFunctionExpression)(id)) {\n        continue;\n      }\n    }\n\n    if (keys) {\n      for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n\n        if (id[key]) {\n          search = search.concat(id[key]);\n        }\n      }\n    }\n  }\n\n  return ids;\n}\n\ngetBindingIdentifiers.keys = {\n  DeclareClass: [\"id\"],\n  DeclareFunction: [\"id\"],\n  DeclareModule: [\"id\"],\n  DeclareVariable: [\"id\"],\n  DeclareInterface: [\"id\"],\n  DeclareTypeAlias: [\"id\"],\n  DeclareOpaqueType: [\"id\"],\n  InterfaceDeclaration: [\"id\"],\n  TypeAlias: [\"id\"],\n  OpaqueType: [\"id\"],\n  CatchClause: [\"param\"],\n  LabeledStatement: [\"label\"],\n  UnaryExpression: [\"argument\"],\n  AssignmentExpression: [\"left\"],\n  ImportSpecifier: [\"local\"],\n  ImportNamespaceSpecifier: [\"local\"],\n  ImportDefaultSpecifier: [\"local\"],\n  ImportDeclaration: [\"specifiers\"],\n  ExportSpecifier: [\"exported\"],\n  ExportNamespaceSpecifier: [\"exported\"],\n  ExportDefaultSpecifier: [\"exported\"],\n  FunctionDeclaration: [\"id\", \"params\"],\n  FunctionExpression: [\"id\", \"params\"],\n  ArrowFunctionExpression: [\"params\"],\n  ObjectMethod: [\"params\"],\n  ClassMethod: [\"params\"],\n  ForInStatement: [\"left\"],\n  ForOfStatement: [\"left\"],\n  ClassDeclaration: [\"id\"],\n  ClassExpression: [\"id\"],\n  RestElement: [\"argument\"],\n  UpdateExpression: [\"argument\"],\n  ObjectProperty: [\"value\"],\n  AssignmentPattern: [\"left\"],\n  ArrayPattern: [\"elements\"],\n  ObjectPattern: [\"properties\"],\n  VariableDeclaration: [\"declarations\"],\n  VariableDeclarator: [\"id\"]\n};", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = gatherSequenceExpressions;\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"../retrievers/getBindingIdentifiers\"));\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nvar _cloneNode = _interopRequireDefault(require(\"../clone/cloneNode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction gatherSequenceExpressions(nodes, scope, declars) {\n  const exprs = [];\n  let ensureLastUndefined = true;\n\n  for (const node of nodes) {\n    if (!(0, _generated.isEmptyStatement)(node)) {\n      ensureLastUndefined = false;\n    }\n\n    if ((0, _generated.isExpression)(node)) {\n      exprs.push(node);\n    } else if ((0, _generated.isExpressionStatement)(node)) {\n      exprs.push(node.expression);\n    } else if ((0, _generated.isVariableDeclaration)(node)) {\n      if (node.kind !== \"var\") return;\n\n      for (const declar of node.declarations) {\n        const bindings = (0, _getBindingIdentifiers.default)(declar);\n\n        for (const key of Object.keys(bindings)) {\n          declars.push({\n            kind: node.kind,\n            id: (0, _cloneNode.default)(bindings[key])\n          });\n        }\n\n        if (declar.init) {\n          exprs.push((0, _generated2.assignmentExpression)(\"=\", declar.id, declar.init));\n        }\n      }\n\n      ensureLastUndefined = true;\n    } else if ((0, _generated.isIfStatement)(node)) {\n      const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode();\n      const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode();\n      if (!consequent || !alternate) return;\n      exprs.push((0, _generated2.conditionalExpression)(node.test, consequent, alternate));\n    } else if ((0, _generated.isBlockStatement)(node)) {\n      const body = gatherSequenceExpressions(node.body, scope, declars);\n      if (!body) return;\n      exprs.push(body);\n    } else if ((0, _generated.isEmptyStatement)(node)) {\n      if (nodes.indexOf(node) === 0) {\n        ensureLastUndefined = true;\n      }\n    } else {\n      return;\n    }\n  }\n\n  if (ensureLastUndefined) {\n    exprs.push(scope.buildUndefinedNode());\n  }\n\n  if (exprs.length === 1) {\n    return exprs[0];\n  } else {\n    return (0, _generated2.sequenceExpression)(exprs);\n  }\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toSequenceExpression;\n\nvar _gatherSequenceExpressions = _interopRequireDefault(require(\"./gatherSequenceExpressions\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction toSequenceExpression(nodes, scope) {\n  if (!(nodes == null ? void 0 : nodes.length)) return;\n  const declars = [];\n  const result = (0, _gatherSequenceExpressions.default)(nodes, scope, declars);\n  if (!result) return;\n\n  for (const declar of declars) {\n    scope.push(declar);\n  }\n\n  return result;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toStatement;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toStatement(node, ignore) {\n  if ((0, _generated.isStatement)(node)) {\n    return node;\n  }\n\n  let mustHaveId = false;\n  let newType;\n\n  if ((0, _generated.isClass)(node)) {\n    mustHaveId = true;\n    newType = \"ClassDeclaration\";\n  } else if ((0, _generated.isFunction)(node)) {\n    mustHaveId = true;\n    newType = \"FunctionDeclaration\";\n  } else if ((0, _generated.isAssignmentExpression)(node)) {\n    return (0, _generated2.expressionStatement)(node);\n  }\n\n  if (mustHaveId && !node.id) {\n    newType = false;\n  }\n\n  if (!newType) {\n    if (ignore) {\n      return false;\n    } else {\n      throw new Error(`cannot turn ${node.type} to a statement`);\n    }\n  }\n\n  node.type = newType;\n  return node;\n}", "var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n  return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n", "var baseIsRegExp = require('./_baseIsRegExp'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = valueToNode;\n\nvar _isPlainObject = _interopRequireDefault(require(\"lodash/isPlainObject\"));\n\nvar _isRegExp = _interopRequireDefault(require(\"lodash/isRegExp\"));\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"../validators/isValidIdentifier\"));\n\nvar _generated = require(\"../builders/generated\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction valueToNode(value) {\n  if (value === undefined) {\n    return (0, _generated.identifier)(\"undefined\");\n  }\n\n  if (value === true || value === false) {\n    return (0, _generated.booleanLiteral)(value);\n  }\n\n  if (value === null) {\n    return (0, _generated.nullLiteral)();\n  }\n\n  if (typeof value === \"string\") {\n    return (0, _generated.stringLiteral)(value);\n  }\n\n  if (typeof value === \"number\") {\n    let result;\n\n    if (Number.isFinite(value)) {\n      result = (0, _generated.numericLiteral)(Math.abs(value));\n    } else {\n      let numerator;\n\n      if (Number.isNaN(value)) {\n        numerator = (0, _generated.numericLiteral)(0);\n      } else {\n        numerator = (0, _generated.numericLiteral)(1);\n      }\n\n      result = (0, _generated.binaryExpression)(\"/\", numerator, (0, _generated.numericLiteral)(0));\n    }\n\n    if (value < 0 || Object.is(value, -0)) {\n      result = (0, _generated.unaryExpression)(\"-\", result);\n    }\n\n    return result;\n  }\n\n  if ((0, _isRegExp.default)(value)) {\n    const pattern = value.source;\n    const flags = value.toString().match(/\\/([a-z]+|)$/)[1];\n    return (0, _generated.regExpLiteral)(pattern, flags);\n  }\n\n  if (Array.isArray(value)) {\n    return (0, _generated.arrayExpression)(value.map(valueToNode));\n  }\n\n  if ((0, _isPlainObject.default)(value)) {\n    const props = [];\n\n    for (const key of Object.keys(value)) {\n      let nodeKey;\n\n      if ((0, _isValidIdentifier.default)(key)) {\n        nodeKey = (0, _generated.identifier)(key);\n      } else {\n        nodeKey = (0, _generated.stringLiteral)(key);\n      }\n\n      props.push((0, _generated.objectProperty)(nodeKey, valueToNode(value[key])));\n    }\n\n    return (0, _generated.objectExpression)(props);\n  }\n\n  throw new Error(\"don't know how to turn this value into a node\");\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = appendToMemberExpression;\n\nvar _generated = require(\"../builders/generated\");\n\nfunction appendToMemberExpression(member, append, computed = false) {\n  member.object = (0, _generated.memberExpression)(member.object, member.property, member.computed);\n  member.property = append;\n  member.computed = !!computed;\n  return member;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inherits;\n\nvar _constants = require(\"../constants\");\n\nvar _inheritsComments = _interopRequireDefault(require(\"../comments/inheritsComments\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction inherits(child, parent) {\n  if (!child || !parent) return child;\n\n  for (const key of _constants.INHERIT_KEYS.optional) {\n    if (child[key] == null) {\n      child[key] = parent[key];\n    }\n  }\n\n  for (const key of Object.keys(parent)) {\n    if (key[0] === \"_\" && key !== \"__clone\") child[key] = parent[key];\n  }\n\n  for (const key of _constants.INHERIT_KEYS.force) {\n    child[key] = parent[key];\n  }\n\n  (0, _inheritsComments.default)(child, parent);\n  return child;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prependToMemberExpression;\n\nvar _generated = require(\"../builders/generated\");\n\nfunction prependToMemberExpression(member, prepend) {\n  member.object = (0, _generated.memberExpression)(prepend, member.object);\n  return member;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getOuterBindingIdentifiers;\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"./getBindingIdentifiers\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getOuterBindingIdentifiers(node, duplicates) {\n  return (0, _getBindingIdentifiers.default)(node, duplicates, true);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = traverse;\n\nvar _definitions = require(\"../definitions\");\n\nfunction traverse(node, handlers, state) {\n  if (typeof handlers === \"function\") {\n    handlers = {\n      enter: handlers\n    };\n  }\n\n  const {\n    enter,\n    exit\n  } = handlers;\n  traverseSimpleImpl(node, enter, exit, state, []);\n}\n\nfunction traverseSimpleImpl(node, enter, exit, state, ancestors) {\n  const keys = _definitions.VISITOR_KEYS[node.type];\n  if (!keys) return;\n  if (enter) enter(node, ancestors, state);\n\n  for (const key of keys) {\n    const subNode = node[key];\n\n    if (Array.isArray(subNode)) {\n      for (let i = 0; i < subNode.length; i++) {\n        const child = subNode[i];\n        if (!child) continue;\n        ancestors.push({\n          node,\n          key,\n          index: i\n        });\n        traverseSimpleImpl(child, enter, exit, state, ancestors);\n        ancestors.pop();\n      }\n    } else if (subNode) {\n      ancestors.push({\n        node,\n        key\n      });\n      traverseSimpleImpl(subNode, enter, exit, state, ancestors);\n      ancestors.pop();\n    }\n  }\n\n  if (exit) exit(node, ancestors, state);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBinding;\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"../retrievers/getBindingIdentifiers\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isBinding(node, parent, grandparent) {\n  if (grandparent && node.type === \"Identifier\" && parent.type === \"ObjectProperty\" && grandparent.type === \"ObjectExpression\") {\n    return false;\n  }\n\n  const keys = _getBindingIdentifiers.default.keys[parent.type];\n\n  if (keys) {\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      const val = parent[key];\n\n      if (Array.isArray(val)) {\n        if (val.indexOf(node) >= 0) return true;\n      } else {\n        if (val === node) return true;\n      }\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLet;\n\nvar _generated = require(\"./generated\");\n\nvar _constants = require(\"../constants\");\n\nfunction isLet(node) {\n  return (0, _generated.isVariableDeclaration)(node) && (node.kind !== \"var\" || node[_constants.BLOCK_SCOPED_SYMBOL]);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBlockScoped;\n\nvar _generated = require(\"./generated\");\n\nvar _isLet = _interopRequireDefault(require(\"./isLet\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isBlockScoped(node) {\n  return (0, _generated.isFunctionDeclaration)(node) || (0, _generated.isClassDeclaration)(node) || (0, _isLet.default)(node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isImmutable;\n\nvar _isType = _interopRequireDefault(require(\"./isType\"));\n\nvar _generated = require(\"./generated\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isImmutable(node) {\n  if ((0, _isType.default)(node.type, \"Immutable\")) return true;\n\n  if ((0, _generated.isIdentifier)(node)) {\n    if (node.name === \"undefined\") {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  return false;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNodesEquivalent;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isNodesEquivalent(a, b) {\n  if (typeof a !== \"object\" || typeof b !== \"object\" || a == null || b == null) {\n    return a === b;\n  }\n\n  if (a.type !== b.type) {\n    return false;\n  }\n\n  const fields = Object.keys(_definitions.NODE_FIELDS[a.type] || a.type);\n  const visitorKeys = _definitions.VISITOR_KEYS[a.type];\n\n  for (const field of fields) {\n    if (typeof a[field] !== typeof b[field]) {\n      return false;\n    }\n\n    if (a[field] == null && b[field] == null) {\n      continue;\n    } else if (a[field] == null || b[field] == null) {\n      return false;\n    }\n\n    if (Array.isArray(a[field])) {\n      if (!Array.isArray(b[field])) {\n        return false;\n      }\n\n      if (a[field].length !== b[field].length) {\n        return false;\n      }\n\n      for (let i = 0; i < a[field].length; i++) {\n        if (!isNodesEquivalent(a[field][i], b[field][i])) {\n          return false;\n        }\n      }\n\n      continue;\n    }\n\n    if (typeof a[field] === \"object\" && !(visitorKeys == null ? void 0 : visitorKeys.includes(field))) {\n      for (const key of Object.keys(a[field])) {\n        if (a[field][key] !== b[field][key]) {\n          return false;\n        }\n      }\n\n      continue;\n    }\n\n    if (!isNodesEquivalent(a[field], b[field])) {\n      return false;\n    }\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isReferenced;\n\nfunction isReferenced(node, parent, grandparent) {\n  switch (parent.type) {\n    case \"MemberExpression\":\n    case \"JSXMemberExpression\":\n    case \"OptionalMemberExpression\":\n      if (parent.property === node) {\n        return !!parent.computed;\n      }\n\n      return parent.object === node;\n\n    case \"VariableDeclarator\":\n      return parent.init === node;\n\n    case \"ArrowFunctionExpression\":\n      return parent.body === node;\n\n    case \"ExportSpecifier\":\n      if (parent.source) {\n        return false;\n      }\n\n      return parent.local === node;\n\n    case \"PrivateName\":\n      return false;\n\n    case \"ClassMethod\":\n    case \"ClassPrivateMethod\":\n    case \"ObjectMethod\":\n      if (parent.params.includes(node)) {\n        return false;\n      }\n\n    case \"ObjectProperty\":\n    case \"ClassProperty\":\n    case \"ClassPrivateProperty\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n\n      if (parent.value === node) {\n        return !grandparent || grandparent.type !== \"ObjectPattern\";\n      }\n\n      return true;\n\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n      return parent.superClass === node;\n\n    case \"AssignmentExpression\":\n      return parent.right === node;\n\n    case \"AssignmentPattern\":\n      return parent.right === node;\n\n    case \"LabeledStatement\":\n      return false;\n\n    case \"CatchClause\":\n      return false;\n\n    case \"RestElement\":\n      return false;\n\n    case \"BreakStatement\":\n    case \"ContinueStatement\":\n      return false;\n\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n      return false;\n\n    case \"ExportNamespaceSpecifier\":\n    case \"ExportDefaultSpecifier\":\n      return false;\n\n    case \"ImportDefaultSpecifier\":\n    case \"ImportNamespaceSpecifier\":\n    case \"ImportSpecifier\":\n      return false;\n\n    case \"JSXAttribute\":\n      return false;\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n      return false;\n\n    case \"MetaProperty\":\n      return false;\n\n    case \"ObjectTypeProperty\":\n      return parent.key !== node;\n\n    case \"TSEnumMember\":\n      return parent.id !== node;\n\n    case \"TSPropertySignature\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n\n      return true;\n  }\n\n  return true;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isScope;\n\nvar _generated = require(\"./generated\");\n\nfunction isScope(node, parent) {\n  if ((0, _generated.isBlockStatement)(node) && ((0, _generated.isFunction)(parent) || (0, _generated.isCatchClause)(parent))) {\n    return false;\n  }\n\n  if ((0, _generated.isPattern)(node) && ((0, _generated.isFunction)(parent) || (0, _generated.isCatchClause)(parent))) {\n    return true;\n  }\n\n  return (0, _generated.isScopable)(node);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSpecifierDefault;\n\nvar _generated = require(\"./generated\");\n\nfunction isSpecifierDefault(specifier) {\n  return (0, _generated.isImportDefaultSpecifier)(specifier) || (0, _generated.isIdentifier)(specifier.imported || specifier.exported, {\n    name: \"default\"\n  });\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isValidES3Identifier;\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"./isValidIdentifier\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst 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\"]);\n\nfunction isValidES3Identifier(name) {\n  return (0, _isValidIdentifier.default)(name) && !RESERVED_WORDS_ES3_ONLY.has(name);\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isVar;\n\nvar _generated = require(\"./generated\");\n\nvar _constants = require(\"../constants\");\n\nfunction isVar(node) {\n  return (0, _generated.isVariableDeclaration)(node, {\n    kind: \"var\"\n  }) && !node[_constants.BLOCK_SCOPED_SYMBOL];\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar _exportNames = {\n  react: true,\n  assertNode: true,\n  createTypeAnnotationBasedOnTypeof: true,\n  createUnionTypeAnnotation: true,\n  createFlowUnionType: true,\n  createTSUnionType: true,\n  cloneNode: true,\n  clone: true,\n  cloneDeep: true,\n  cloneDeepWithoutLoc: true,\n  cloneWithoutLoc: true,\n  addComment: true,\n  addComments: true,\n  inheritInnerComments: true,\n  inheritLeadingComments: true,\n  inheritsComments: true,\n  inheritTrailingComments: true,\n  removeComments: true,\n  ensureBlock: true,\n  toBindingIdentifierName: true,\n  toBlock: true,\n  toComputedKey: true,\n  toExpression: true,\n  toIdentifier: true,\n  toKeyAlias: true,\n  toSequenceExpression: true,\n  toStatement: true,\n  valueToNode: true,\n  appendToMemberExpression: true,\n  inherits: true,\n  prependToMemberExpression: true,\n  removeProperties: true,\n  removePropertiesDeep: true,\n  removeTypeDuplicates: true,\n  getBindingIdentifiers: true,\n  getOuterBindingIdentifiers: true,\n  traverse: true,\n  traverseFast: true,\n  shallowEqual: true,\n  is: true,\n  isBinding: true,\n  isBlockScoped: true,\n  isImmutable: true,\n  isLet: true,\n  isNode: true,\n  isNodesEquivalent: true,\n  isPlaceholderType: true,\n  isReferenced: true,\n  isScope: true,\n  isSpecifierDefault: true,\n  isType: true,\n  isValidES3Identifier: true,\n  isValidIdentifier: true,\n  isVar: true,\n  matchesPattern: true,\n  validate: true,\n  buildMatchMemberExpression: true\n};\nObject.defineProperty(exports, \"assertNode\", {\n  enumerable: true,\n  get: function () {\n    return _assertNode.default;\n  }\n});\nObject.defineProperty(exports, \"createTypeAnnotationBasedOnTypeof\", {\n  enumerable: true,\n  get: function () {\n    return _createTypeAnnotationBasedOnTypeof.default;\n  }\n});\nObject.defineProperty(exports, \"createUnionTypeAnnotation\", {\n  enumerable: true,\n  get: function () {\n    return _createFlowUnionType.default;\n  }\n});\nObject.defineProperty(exports, \"createFlowUnionType\", {\n  enumerable: true,\n  get: function () {\n    return _createFlowUnionType.default;\n  }\n});\nObject.defineProperty(exports, \"createTSUnionType\", {\n  enumerable: true,\n  get: function () {\n    return _createTSUnionType.default;\n  }\n});\nObject.defineProperty(exports, \"cloneNode\", {\n  enumerable: true,\n  get: function () {\n    return _cloneNode.default;\n  }\n});\nObject.defineProperty(exports, \"clone\", {\n  enumerable: true,\n  get: function () {\n    return _clone.default;\n  }\n});\nObject.defineProperty(exports, \"cloneDeep\", {\n  enumerable: true,\n  get: function () {\n    return _cloneDeep.default;\n  }\n});\nObject.defineProperty(exports, \"cloneDeepWithoutLoc\", {\n  enumerable: true,\n  get: function () {\n    return _cloneDeepWithoutLoc.default;\n  }\n});\nObject.defineProperty(exports, \"cloneWithoutLoc\", {\n  enumerable: true,\n  get: function () {\n    return _cloneWithoutLoc.default;\n  }\n});\nObject.defineProperty(exports, \"addComment\", {\n  enumerable: true,\n  get: function () {\n    return _addComment.default;\n  }\n});\nObject.defineProperty(exports, \"addComments\", {\n  enumerable: true,\n  get: function () {\n    return _addComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritInnerComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritInnerComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritLeadingComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritLeadingComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritsComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritsComments.default;\n  }\n});\nObject.defineProperty(exports, \"inheritTrailingComments\", {\n  enumerable: true,\n  get: function () {\n    return _inheritTrailingComments.default;\n  }\n});\nObject.defineProperty(exports, \"removeComments\", {\n  enumerable: true,\n  get: function () {\n    return _removeComments.default;\n  }\n});\nObject.defineProperty(exports, \"ensureBlock\", {\n  enumerable: true,\n  get: function () {\n    return _ensureBlock.default;\n  }\n});\nObject.defineProperty(exports, \"toBindingIdentifierName\", {\n  enumerable: true,\n  get: function () {\n    return _toBindingIdentifierName.default;\n  }\n});\nObject.defineProperty(exports, \"toBlock\", {\n  enumerable: true,\n  get: function () {\n    return _toBlock.default;\n  }\n});\nObject.defineProperty(exports, \"toComputedKey\", {\n  enumerable: true,\n  get: function () {\n    return _toComputedKey.default;\n  }\n});\nObject.defineProperty(exports, \"toExpression\", {\n  enumerable: true,\n  get: function () {\n    return _toExpression.default;\n  }\n});\nObject.defineProperty(exports, \"toIdentifier\", {\n  enumerable: true,\n  get: function () {\n    return _toIdentifier.default;\n  }\n});\nObject.defineProperty(exports, \"toKeyAlias\", {\n  enumerable: true,\n  get: function () {\n    return _toKeyAlias.default;\n  }\n});\nObject.defineProperty(exports, \"toSequenceExpression\", {\n  enumerable: true,\n  get: function () {\n    return _toSequenceExpression.default;\n  }\n});\nObject.defineProperty(exports, \"toStatement\", {\n  enumerable: true,\n  get: function () {\n    return _toStatement.default;\n  }\n});\nObject.defineProperty(exports, \"valueToNode\", {\n  enumerable: true,\n  get: function () {\n    return _valueToNode.default;\n  }\n});\nObject.defineProperty(exports, \"appendToMemberExpression\", {\n  enumerable: true,\n  get: function () {\n    return _appendToMemberExpression.default;\n  }\n});\nObject.defineProperty(exports, \"inherits\", {\n  enumerable: true,\n  get: function () {\n    return _inherits.default;\n  }\n});\nObject.defineProperty(exports, \"prependToMemberExpression\", {\n  enumerable: true,\n  get: function () {\n    return _prependToMemberExpression.default;\n  }\n});\nObject.defineProperty(exports, \"removeProperties\", {\n  enumerable: true,\n  get: function () {\n    return _removeProperties.default;\n  }\n});\nObject.defineProperty(exports, \"removePropertiesDeep\", {\n  enumerable: true,\n  get: function () {\n    return _removePropertiesDeep.default;\n  }\n});\nObject.defineProperty(exports, \"removeTypeDuplicates\", {\n  enumerable: true,\n  get: function () {\n    return _removeTypeDuplicates.default;\n  }\n});\nObject.defineProperty(exports, \"getBindingIdentifiers\", {\n  enumerable: true,\n  get: function () {\n    return _getBindingIdentifiers.default;\n  }\n});\nObject.defineProperty(exports, \"getOuterBindingIdentifiers\", {\n  enumerable: true,\n  get: function () {\n    return _getOuterBindingIdentifiers.default;\n  }\n});\nObject.defineProperty(exports, \"traverse\", {\n  enumerable: true,\n  get: function () {\n    return _traverse.default;\n  }\n});\nObject.defineProperty(exports, \"traverseFast\", {\n  enumerable: true,\n  get: function () {\n    return _traverseFast.default;\n  }\n});\nObject.defineProperty(exports, \"shallowEqual\", {\n  enumerable: true,\n  get: function () {\n    return _shallowEqual.default;\n  }\n});\nObject.defineProperty(exports, \"is\", {\n  enumerable: true,\n  get: function () {\n    return _is.default;\n  }\n});\nObject.defineProperty(exports, \"isBinding\", {\n  enumerable: true,\n  get: function () {\n    return _isBinding.default;\n  }\n});\nObject.defineProperty(exports, \"isBlockScoped\", {\n  enumerable: true,\n  get: function () {\n    return _isBlockScoped.default;\n  }\n});\nObject.defineProperty(exports, \"isImmutable\", {\n  enumerable: true,\n  get: function () {\n    return _isImmutable.default;\n  }\n});\nObject.defineProperty(exports, \"isLet\", {\n  enumerable: true,\n  get: function () {\n    return _isLet.default;\n  }\n});\nObject.defineProperty(exports, \"isNode\", {\n  enumerable: true,\n  get: function () {\n    return _isNode.default;\n  }\n});\nObject.defineProperty(exports, \"isNodesEquivalent\", {\n  enumerable: true,\n  get: function () {\n    return _isNodesEquivalent.default;\n  }\n});\nObject.defineProperty(exports, \"isPlaceholderType\", {\n  enumerable: true,\n  get: function () {\n    return _isPlaceholderType.default;\n  }\n});\nObject.defineProperty(exports, \"isReferenced\", {\n  enumerable: true,\n  get: function () {\n    return _isReferenced.default;\n  }\n});\nObject.defineProperty(exports, \"isScope\", {\n  enumerable: true,\n  get: function () {\n    return _isScope.default;\n  }\n});\nObject.defineProperty(exports, \"isSpecifierDefault\", {\n  enumerable: true,\n  get: function () {\n    return _isSpecifierDefault.default;\n  }\n});\nObject.defineProperty(exports, \"isType\", {\n  enumerable: true,\n  get: function () {\n    return _isType.default;\n  }\n});\nObject.defineProperty(exports, \"isValidES3Identifier\", {\n  enumerable: true,\n  get: function () {\n    return _isValidES3Identifier.default;\n  }\n});\nObject.defineProperty(exports, \"isValidIdentifier\", {\n  enumerable: true,\n  get: function () {\n    return _isValidIdentifier.default;\n  }\n});\nObject.defineProperty(exports, \"isVar\", {\n  enumerable: true,\n  get: function () {\n    return _isVar.default;\n  }\n});\nObject.defineProperty(exports, \"matchesPattern\", {\n  enumerable: true,\n  get: function () {\n    return _matchesPattern.default;\n  }\n});\nObject.defineProperty(exports, \"validate\", {\n  enumerable: true,\n  get: function () {\n    return _validate.default;\n  }\n});\nObject.defineProperty(exports, \"buildMatchMemberExpression\", {\n  enumerable: true,\n  get: function () {\n    return _buildMatchMemberExpression.default;\n  }\n});\nexports.react = void 0;\n\nvar _isReactComponent = _interopRequireDefault(require(\"./validators/react/isReactComponent\"));\n\nvar _isCompatTag = _interopRequireDefault(require(\"./validators/react/isCompatTag\"));\n\nvar _buildChildren = _interopRequireDefault(require(\"./builders/react/buildChildren\"));\n\nvar _assertNode = _interopRequireDefault(require(\"./asserts/assertNode\"));\n\nvar _generated = require(\"./asserts/generated\");\n\nObject.keys(_generated).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated[key];\n    }\n  });\n});\n\nvar _createTypeAnnotationBasedOnTypeof = _interopRequireDefault(require(\"./builders/flow/createTypeAnnotationBasedOnTypeof\"));\n\nvar _createFlowUnionType = _interopRequireDefault(require(\"./builders/flow/createFlowUnionType\"));\n\nvar _createTSUnionType = _interopRequireDefault(require(\"./builders/typescript/createTSUnionType\"));\n\nvar _generated2 = require(\"./builders/generated\");\n\nObject.keys(_generated2).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated2[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated2[key];\n    }\n  });\n});\n\nvar _cloneNode = _interopRequireDefault(require(\"./clone/cloneNode\"));\n\nvar _clone = _interopRequireDefault(require(\"./clone/clone\"));\n\nvar _cloneDeep = _interopRequireDefault(require(\"./clone/cloneDeep\"));\n\nvar _cloneDeepWithoutLoc = _interopRequireDefault(require(\"./clone/cloneDeepWithoutLoc\"));\n\nvar _cloneWithoutLoc = _interopRequireDefault(require(\"./clone/cloneWithoutLoc\"));\n\nvar _addComment = _interopRequireDefault(require(\"./comments/addComment\"));\n\nvar _addComments = _interopRequireDefault(require(\"./comments/addComments\"));\n\nvar _inheritInnerComments = _interopRequireDefault(require(\"./comments/inheritInnerComments\"));\n\nvar _inheritLeadingComments = _interopRequireDefault(require(\"./comments/inheritLeadingComments\"));\n\nvar _inheritsComments = _interopRequireDefault(require(\"./comments/inheritsComments\"));\n\nvar _inheritTrailingComments = _interopRequireDefault(require(\"./comments/inheritTrailingComments\"));\n\nvar _removeComments = _interopRequireDefault(require(\"./comments/removeComments\"));\n\nvar _generated3 = require(\"./constants/generated\");\n\nObject.keys(_generated3).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated3[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated3[key];\n    }\n  });\n});\n\nvar _constants = require(\"./constants\");\n\nObject.keys(_constants).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _constants[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _constants[key];\n    }\n  });\n});\n\nvar _ensureBlock = _interopRequireDefault(require(\"./converters/ensureBlock\"));\n\nvar _toBindingIdentifierName = _interopRequireDefault(require(\"./converters/toBindingIdentifierName\"));\n\nvar _toBlock = _interopRequireDefault(require(\"./converters/toBlock\"));\n\nvar _toComputedKey = _interopRequireDefault(require(\"./converters/toComputedKey\"));\n\nvar _toExpression = _interopRequireDefault(require(\"./converters/toExpression\"));\n\nvar _toIdentifier = _interopRequireDefault(require(\"./converters/toIdentifier\"));\n\nvar _toKeyAlias = _interopRequireDefault(require(\"./converters/toKeyAlias\"));\n\nvar _toSequenceExpression = _interopRequireDefault(require(\"./converters/toSequenceExpression\"));\n\nvar _toStatement = _interopRequireDefault(require(\"./converters/toStatement\"));\n\nvar _valueToNode = _interopRequireDefault(require(\"./converters/valueToNode\"));\n\nvar _definitions = require(\"./definitions\");\n\nObject.keys(_definitions).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _definitions[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _definitions[key];\n    }\n  });\n});\n\nvar _appendToMemberExpression = _interopRequireDefault(require(\"./modifications/appendToMemberExpression\"));\n\nvar _inherits = _interopRequireDefault(require(\"./modifications/inherits\"));\n\nvar _prependToMemberExpression = _interopRequireDefault(require(\"./modifications/prependToMemberExpression\"));\n\nvar _removeProperties = _interopRequireDefault(require(\"./modifications/removeProperties\"));\n\nvar _removePropertiesDeep = _interopRequireDefault(require(\"./modifications/removePropertiesDeep\"));\n\nvar _removeTypeDuplicates = _interopRequireDefault(require(\"./modifications/flow/removeTypeDuplicates\"));\n\nvar _getBindingIdentifiers = _interopRequireDefault(require(\"./retrievers/getBindingIdentifiers\"));\n\nvar _getOuterBindingIdentifiers = _interopRequireDefault(require(\"./retrievers/getOuterBindingIdentifiers\"));\n\nvar _traverse = _interopRequireDefault(require(\"./traverse/traverse\"));\n\nvar _traverseFast = _interopRequireDefault(require(\"./traverse/traverseFast\"));\n\nvar _shallowEqual = _interopRequireDefault(require(\"./utils/shallowEqual\"));\n\nvar _is = _interopRequireDefault(require(\"./validators/is\"));\n\nvar _isBinding = _interopRequireDefault(require(\"./validators/isBinding\"));\n\nvar _isBlockScoped = _interopRequireDefault(require(\"./validators/isBlockScoped\"));\n\nvar _isImmutable = _interopRequireDefault(require(\"./validators/isImmutable\"));\n\nvar _isLet = _interopRequireDefault(require(\"./validators/isLet\"));\n\nvar _isNode = _interopRequireDefault(require(\"./validators/isNode\"));\n\nvar _isNodesEquivalent = _interopRequireDefault(require(\"./validators/isNodesEquivalent\"));\n\nvar _isPlaceholderType = _interopRequireDefault(require(\"./validators/isPlaceholderType\"));\n\nvar _isReferenced = _interopRequireDefault(require(\"./validators/isReferenced\"));\n\nvar _isScope = _interopRequireDefault(require(\"./validators/isScope\"));\n\nvar _isSpecifierDefault = _interopRequireDefault(require(\"./validators/isSpecifierDefault\"));\n\nvar _isType = _interopRequireDefault(require(\"./validators/isType\"));\n\nvar _isValidES3Identifier = _interopRequireDefault(require(\"./validators/isValidES3Identifier\"));\n\nvar _isValidIdentifier = _interopRequireDefault(require(\"./validators/isValidIdentifier\"));\n\nvar _isVar = _interopRequireDefault(require(\"./validators/isVar\"));\n\nvar _matchesPattern = _interopRequireDefault(require(\"./validators/matchesPattern\"));\n\nvar _validate = _interopRequireDefault(require(\"./validators/validate\"));\n\nvar _buildMatchMemberExpression = _interopRequireDefault(require(\"./validators/buildMatchMemberExpression\"));\n\nvar _generated4 = require(\"./validators/generated\");\n\nObject.keys(_generated4).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n  if (key in exports && exports[key] === _generated4[key]) return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _generated4[key];\n    }\n  });\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst react = {\n  isReactComponent: _isReactComponent.default,\n  isCompatTag: _isCompatTag.default,\n  buildChildren: _buildChildren.default\n};\nexports.react = react;", "import { findProp, createSimpleExpression, createCompoundExpression, createStructuralDirectiveTransform, processFor, isSimpleIdentifier as isSimpleIdentifier$1, findDir, processIf, baseParse, transform } from '@vue/compiler-core/dist/compiler-core.cjs.js';\nimport { last, pascalCase, invariant, capitalize, camelize, getClassNameForTagName, camelCase, isVoidTag, isHTMLTag, isSVGTag, isRawTextContainer, first, createCache, SourceTransformer, rebaseSourceMap } from '@vuedx/shared';\nimport { traverse, isSlotNode, isCommentNode, isPlainElementNode, traverseEvery, isRootNode, isTemplateNode, NodeTypes, isTextNode, isSimpleExpressionNode, ElementTypes, isAttributeNode, isExpressionNode, isSimpleIdentifier, isDirectiveNode, isComponentNode, isElementNode, createSimpleExpression as createSimpleExpression$1 } from '@vuedx/template-ast-types';\nimport { parse as parse$2 } from '@vuedx/compiler-sfc';\nimport { transformScript as transformScript$1, transformScriptSetup as transformScriptSetup$1, createProgram } from '@vuedx/transforms';\nimport { encode } from 'sourcemap-codec';\nimport { parse as parse$1, parseExpression } from '@babel/parser';\nimport { traverse as traverse$1, isFunctionDeclaration, isArrowFunctionExpression, isIdentifier, isFunction, isMemberExpression, isOptionalMemberExpression, isObjectMember } from '@babel/types';\n\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n    return advancePositionWithMutation(Object.assign({}, pos), source, numberOfCharacters);\n}\n// advance by mutation without cloning (for performance reasons), since this\n// gets called a lot in the parser\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n    let linesCount = 0;\n    let lastNewLinePos = -1;\n    for (let i = 0; i < numberOfCharacters; i++) {\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\n            linesCount++;\n            lastNewLinePos = i;\n        }\n    }\n    pos.offset += numberOfCharacters;\n    pos.line += linesCount;\n    pos.column =\n        lastNewLinePos === -1\n            ? pos.column + numberOfCharacters\n            : numberOfCharacters - lastNewLinePos;\n    return pos;\n}\nfunction createLoc(loc, offset, length) {\n    if (loc == null)\n        return;\n    length = length ?? loc.source.length - offset;\n    const source = loc.source.slice(offset, offset + length);\n    const start = advancePositionWithClone(loc.start, loc.source.slice(0, offset));\n    const end = advancePositionWithClone(start, source);\n    return { source, start, end };\n}\nfunction sliceLoc(loc, start, end) {\n    if (loc == null)\n        return;\n    if (end == null) {\n        end = loc.source.length;\n    }\n    else if (end < 0) {\n        end = loc.source.length + end;\n    }\n    if (start < 0) {\n        start = loc.source.length + start;\n    }\n    return createLoc(loc, start, Math.max(0, end - start));\n}\n\nfunction getRuntimeFn(prefix, name) {\n    return `${prefix}.internal.${name}`;\n}\n\nconst annotations = {\n    /**\n     * Mark range to ignore diagnostics.\n     */\n    diagnosticsIgnore: {\n        start: '/*<vuedx:diagnosticsIgnore>*/',\n        end: '/*</vuedx:diagnosticsIgnore>*/',\n    },\n    /**\n     * Used to define range for hoists or defining global variables.\n     */\n    templateGlobals: {\n        start: '/*<vuedx:templateGlobals>*/',\n        end: '/*</vuedx:templateGlobals>*/',\n    },\n    /**\n     * Used to define range for return from setup() function, generated from <script setup>\n     */\n    setupGlobals: {\n        start: '/*<vuedx:setupGlobals>*/',\n        end: '/*</vuedx:setupGlobals>*/',\n    },\n    /**\n     * Missing expression in v-if or v-else-if.\n     */\n    missingExpression: '/*<vuedx:missingExpression>*/',\n    /**\n     * Used in every JSX element to provide position for attribute completion.\n     */\n    tsxCompletions: '/*<vuedx:tsx-completions-target/>*/',\n    /**\n     * Used once in render function to get completions from context.\n     */\n    tsCompletions: '/*<vuedx:ts-completions-target/>*/',\n};\nlet ctx;\nfunction generate(root, options) {\n    ctx = createGenerateContext(options);\n    genRootNode(root);\n    genSlotTypes(root);\n    genAttrTypes(root);\n    return ctx.getOutput();\n}\nfunction genNode(node) {\n    switch (node.type) {\n        case NodeTypes.ROOT:\n            return genRootNode(node);\n        case NodeTypes.ELEMENT: {\n            const el = node;\n            switch (el.tagType) {\n                case ElementTypes.ELEMENT:\n                    return genElementNode(node);\n                case ElementTypes.COMPONENT:\n                    return genComponentNode(node);\n                case ElementTypes.SLOT:\n                    return genSlotOutletNode(node);\n                case ElementTypes.TEMPLATE:\n                    return genTemplateNode(node);\n                default:\n                    throw new Error(`Unexpected element type: ${node.type}`);\n            }\n        }\n        case NodeTypes.SIMPLE_EXPRESSION:\n        case NodeTypes.COMPOUND_EXPRESSION:\n            return genExpressionNode(node);\n        case NodeTypes.TEXT:\n            return genTextNode(node);\n        case NodeTypes.INTERPOLATION:\n            return genInterpolationNode(node);\n        case NodeTypes.COMMENT:\n            return genCommentNode(node);\n        case NodeTypes.FOR:\n            return genForNode(node);\n        case NodeTypes.IF:\n            return genIfNode(node);\n        default:\n            throw new Error(`Unsupported node type: ${node.type}`);\n    }\n}\nfunction indent(fn) {\n    ctx.indent();\n    fn();\n    ctx.deindent();\n}\nfunction writeLine(code) {\n    ctx.write(code).newLine();\n}\nfunction genRootNode(node) {\n    genKnownIdentifierGetters(node.scope.globals);\n    writeLine(`function ${ctx.internalIdentifierPrefix}render() {`);\n    indent(() => {\n        node.scope.getBinding('$slots'); // forces to declare $slots\n        genGlobalDeclarations(node);\n        genNodeHoists({ hoists: ctx.scope.getRootScope() });\n        writeLine('return (');\n        indent(() => {\n            writeLine('<>');\n            indent(() => genChildren(node));\n            writeLine('</>');\n        });\n        writeLine(')');\n    });\n    writeLine('}');\n    writeLine(`${ctx.internalIdentifierPrefix}render();`);\n}\nfunction genKnownIdentifierGetters(ids) {\n    ids = Array.from(new Set([...ids, ...ctx.used.components, ...ctx.used.directives]));\n    if (!ids.some((id) => ctx.identifiers.has(id)))\n        return;\n    wrap(annotations.templateGlobals.start, annotations.templateGlobals.end, () => {\n        ctx.newLine();\n        ids.forEach((id) => {\n            const knownId = ctx.identifiers.get(id);\n            if (knownId == null)\n                return;\n            if (!['ref', 'maybeRef', 'externalMaybeRef', 'externalRef'].includes(knownId.kind))\n                return;\n            writeLine(`const ${ctx.internalIdentifierPrefix}_get_identifier_${id} = () => ${getRuntimeFn(ctx.typeIdentifier, 'unref')}(${id});`);\n        });\n    });\n    ctx.newLine();\n}\nfunction genDirectiveChecks(el) {\n    const directives = el.props.filter(isDirectiveNode).filter((directive) => {\n        return !['on', 'bind', 'text', 'html', 'model'].includes(directive.name);\n    });\n    if (directives.length === 0)\n        return;\n    wrap('{(() => {', '})()}', () => indent(() => {\n        ctx.newLine();\n        directives.forEach((directive) => {\n            ctx.write(`${getRuntimeFn(ctx.typeIdentifier, 'checkDirective')}(`);\n            ctx.write(directive.resolvedName ?? asConst(JSON.stringify(directive.name)), createLoc(directive.loc, 0, 2 + directive.name.length), true);\n            ctx.write(', ');\n            if (isComponentNode(el)) {\n                ctx.write(el.resolvedName ?? asConst(JSON.stringify(el.tag)), el.tagLoc);\n            }\n            else {\n                ctx.write(asConst(JSON.stringify(el.tag)), el.tagLoc);\n            }\n            ctx.write(', ');\n            if (directive.arg != null)\n                genExpressionNode(directive.arg);\n            else\n                ctx.write('undefined');\n            ctx.write(', ');\n            if (directive.exp != null)\n                genExpressionNode(directive.exp);\n            else\n                ctx.write('undefined');\n            ctx.write(', ');\n            wrap('{ ', ' }', () => {\n                directive.modifiers.forEach((modifier, index) => {\n                    if (modifier.trim() === '')\n                        return;\n                    ctx.write(`${JSON.stringify(modifier)}`, directive.modifierLocs[index], true);\n                    ctx.write(': true, ');\n                });\n            });\n            ctx.write(');');\n            ctx.newLine();\n        });\n    }));\n    ctx.newLine(); // rendered before element or component, so add a new line\n}\nfunction genGlobalDeclarations(node) {\n    if (node.scope.globals.length === 0)\n        return;\n    writeLine(annotations.templateGlobals.start);\n    node.scope.globals.forEach((id) => {\n        const knownId = ctx.identifiers.get(id);\n        if (knownId != null) {\n            if (['ref', 'maybeRef', 'externalMaybeRef', 'externalRef'].includes(knownId.kind)) {\n                writeLine(`let ${id} = ${ctx.internalIdentifierPrefix}_get_identifier_${id}();`);\n            }\n        }\n        else {\n            writeLine(`let ${id} = ${ctx.contextIdentifier}.${id}`);\n        }\n    });\n    writeLine(annotations.templateGlobals.end);\n}\nfunction genNodeHoists(node) {\n    if (node.hoists.length === 0)\n        return;\n    writeLine(annotations.templateGlobals.start);\n    node.hoists.forEach((hoist) => {\n        genExpressionNode(hoist);\n        ctx.newLine();\n    });\n    writeLine(annotations.templateGlobals.end);\n}\nfunction genElementNode(node) {\n    genDirectiveChecks(node);\n    ctx.write('<', node.startTagLoc);\n    if (node.tag !== '') {\n        ctx.write(node.tag, node.tagLoc, true).newLine();\n        indent(() => {\n            genProps(node);\n            ctx.write(`${annotations.tsxCompletions}`);\n        });\n        ctx.newLine();\n    }\n    else {\n        return; // tag is empty, when only \"<\" is present\n    }\n    if (node.isSelfClosing) {\n        ctx.write('/>', node.endTagLoc);\n        return; // done\n    }\n    ctx.write('>').newLine();\n    indent(() => genChildren(node));\n    ctx.write('</', node.endTagLoc);\n    ctx.write(node.tag);\n    ctx.write('>');\n}\nfunction genComponentNode(node) {\n    // if (node.tag.includes('-')) return genElementNode(node) // assume custom element\n    if (node.resolvedName == null) {\n        ctx.write('{(() => {').newLine();\n        indent(() => {\n            const name = `${ctx.internalIdentifierPrefix}component`;\n            genTypeGuards();\n            ctx.newLine();\n            ctx.write(`const ${name} = ${getRuntimeFn(ctx.typeIdentifier, 'resolveComponent')}(${ctx.isTypeScript\n                ? `{} as unknown as ${ctx.internalIdentifierPrefix}GlobalComponents`\n                : `/** @type {${ctx.internalIdentifierPrefix}GlobalComponents} */ (/** @type {unknown} */ ({}))`}, ${ctx.isTypeScript\n                ? `{} as unknown as JSX.IntrinsicElements`\n                : `/** @type {JSX.IntrinsicElements} */ (/** @type {unknown} */ ({}))`}, ${ctx.contextIdentifier}, `);\n            if (isAttributeNode(node.is)) {\n                const name = node.is.value?.content ?? '';\n                ctx.write(JSON.stringify(name), node.is.value?.loc, true);\n                ctx.write(', ');\n                ctx.write(JSON.stringify(name), node.is.value?.loc, true);\n                ctx.write(', ');\n                ctx.write(JSON.stringify(pascalCase(name)), node.is.value?.loc, true);\n            }\n            else if (node.is != null && isExpressionNode(node.is.exp)) {\n                genExpressionNode(node.is.exp);\n                ctx.write(', ');\n                genExpressionNode(node.is.exp);\n                ctx.write(', ');\n                genExpressionNode(node.is.exp);\n            }\n            else {\n                ctx.write('undefined, undefined, undefined');\n            }\n            ctx.write(');').newLine();\n            writeLine(`if (${name} == null) throw new Error`);\n            ctx.write('return (').newLine();\n            indent(() => {\n                node.resolvedName = name;\n                genComponentNode(node);\n                node.resolvedName = undefined;\n            });\n            ctx.newLine().write(');').newLine();\n        });\n        ctx.write('})()}');\n        return; // - done\n    }\n    genDirectiveChecks(node);\n    ctx.write('<', node.loc);\n    ctx.write(node.resolvedName ?? node.tag, node.tagLoc, true).newLine();\n    indent(() => {\n        genProps(node);\n        ctx.write(`${annotations.tsxCompletions}`);\n    });\n    ctx.newLine();\n    if (node.isSelfClosing) {\n        ctx.write('$slots={{}}');\n        ctx.write('/>', node.endTagLoc).newLine();\n        return; // done\n    }\n    ctx.write('$slots=');\n    indent(() => {\n        wrap('{', '}', () => {\n            ctx.write(`{`);\n            ctx.newLine();\n            indent(() => {\n                node.slots.forEach((slotNode) => {\n                    if (slotNode.name == null) {\n                        ctx.write(`default`);\n                    }\n                    else if (isStaticExpression(slotNode.name)) {\n                        ctx.write(JSON.stringify(slotNode.name.content), slotNode.name.loc);\n                    }\n                    else {\n                        ctx.write('[');\n                        genExpressionNode(slotNode.name);\n                        ctx.write(']');\n                    }\n                    ctx.write(': (');\n                    if (slotNode.args != null) {\n                        genExpressionNode(slotNode.args);\n                    }\n                    ctx.write(') => {').newLine();\n                    indent(() => {\n                        genTypeGuards();\n                        genNodeHoists(slotNode);\n                        writeLine('return (');\n                        indent(() => {\n                            writeLine('<>');\n                            indent(() => genChildren(slotNode));\n                            writeLine('</>');\n                        });\n                        writeLine(')');\n                    });\n                    ctx.write('},').newLine();\n                });\n            });\n            ctx.write('}');\n        });\n    });\n    writeLine('>');\n    ctx.newLine();\n    ctx.write('</', node.endTagLoc);\n    ctx.write(node.resolvedName ?? node.tag);\n    ctx.write('>');\n}\nfunction genTypeGuards() {\n    const value = ctx.setSourceMapMode(false);\n    ctx.typeGuards.forEach((guard) => {\n        if (guard == null)\n            return;\n        ctx.write(`if(!(`);\n        genExpressionNode(guard);\n        ctx.write(')) throw new Error;').newLine();\n    });\n    ctx.setSourceMapMode(value);\n}\nfunction genSlotOutletNode(node) {\n    const name = findProp(node, 'name', false, true);\n    const accessor = ['$slots'];\n    if (isAttributeNode(name) && name.value != null) {\n        if (isSimpleIdentifier(name.value.content)) {\n            accessor.push('.', createSimpleExpression(name.value.content, false, name.value.loc));\n        }\n        else {\n            accessor.push('[', name.value, ']');\n        }\n    }\n    else if (isDirectiveNode(name) && name.arg != null) {\n        if (isSimpleExpressionNode(name.arg) &&\n            isSimpleIdentifier(name.arg.content)) {\n            accessor.push('.', createSimpleExpression(name.arg.content, false, name.arg.loc));\n        }\n        else {\n            accessor.push('[', name.arg, ']');\n        }\n    }\n    else {\n        accessor.push(`.default`);\n    }\n    const genSlotAccessor = () => {\n        genExpressionNode(createCompoundExpression(accessor));\n    };\n    wrap('{', '}', () => {\n        ctx.newLine();\n        indent(() => {\n            genSlotAccessor();\n            ctx.write(' != null ? ');\n            genSlotAccessor();\n            ctx.write('({');\n            const props = node.props.filter((node) => node !== name);\n            if (props.length > 0) {\n                indent(() => {\n                    ctx.newLine();\n                    props.forEach((prop) => {\n                        genObjectProperty(prop);\n                    });\n                });\n            }\n            ctx.write('})');\n        });\n        ctx.write(' : ');\n        if (node.children.length > 0) {\n            ctx.typeGuards.push(createCompoundExpression([...accessor, ' == null']));\n            indent(() => {\n                wrap('(', ')', () => {\n                    ctx.newLine();\n                    indent(() => {\n                        wrap('<>', '</>', () => {\n                            ctx.newLine();\n                            indent(() => genChildren(node));\n                        });\n                    });\n                    ctx.newLine();\n                });\n                ctx.newLine();\n            });\n            ctx.typeGuards.pop();\n        }\n        else {\n            ctx.write('null');\n        }\n        ctx.newLine();\n    });\n}\nfunction genChildren(node) {\n    node.children.forEach((node) => {\n        if (isTextNode(node)) {\n            ctx.write('{');\n            genTextNode(node);\n            ctx.write('}');\n            ctx.newLine();\n        }\n        else {\n            genNode(node);\n            ctx.newLine();\n        }\n    });\n}\nfunction genProps(el) {\n    if (el.props.length === 0)\n        return;\n    const rendered = new Set();\n    const directives = el.props.filter(isDirectiveNode);\n    el.props.forEach((prop) => {\n        if (isAttributeNode(prop)) {\n            genAttribute(prop, el);\n            ctx.newLine();\n        }\n        else if (rendered.has(prop)) ;\n        else if (prop.name === 'bind') {\n            genVBindDirective(prop, el);\n            ctx.newLine();\n        }\n        else if (prop.name === 'on') {\n            if (prop.arg == null) {\n                if (prop.exp == null) {\n                    ctx.write('on', prop.loc, true);\n                }\n                else {\n                    ctx.write('{...(');\n                    genExpressionNode(prop.exp);\n                    ctx.write(')}');\n                }\n            }\n            else {\n                invariant(isSimpleExpressionNode(prop.arg));\n                const id = prop.arg.content;\n                const all = directives.filter((directive) => directive.name === 'on' &&\n                    isSimpleExpressionNode(directive.arg) &&\n                    directive.arg.content === id);\n                const genHandler = () => {\n                    if (isPlainElementNode(el)) {\n                        ctx.typeGuards.push(createCompoundExpression([\n                            `$event.currentTarget instanceof `,\n                            getClassNameForTagName(el.tag),\n                        ]));\n                    }\n                    ctx.write(`${getRuntimeFn(ctx.typeIdentifier, 'first')}([`).newLine();\n                    indent(() => {\n                        all.forEach((directive) => {\n                            rendered.add(directive);\n                            if (directive.exp != null) {\n                                genExpressionNodeAsFunction(directive.exp);\n                            }\n                            else {\n                                ctx.write(annotations.missingExpression, directive.loc);\n                            }\n                            ctx.write(', ');\n                            ctx.newLine();\n                        });\n                    });\n                    ctx.write('])');\n                    if (isPlainElementNode(el)) {\n                        ctx.typeGuards.pop();\n                    }\n                };\n                if (isStaticExpression(prop.arg)) {\n                    ctx.write(`on${capitalize(prop.arg.content)}`, prop.arg.loc, true);\n                    ctx.write('=');\n                    wrap('{', '}', genHandler);\n                }\n                else {\n                    ctx.write('{...({');\n                    ctx.write('[');\n                    genExpressionNode(prop.arg); // TODO: Capitalize\n                    ctx.write(']: ');\n                    genHandler();\n                    ctx.write('})}');\n                }\n            }\n            ctx.newLine();\n        }\n        else if (prop.name === 'text' || prop.name === 'html') {\n            ctx.write('innerHTML', createLoc(prop.loc, 2, 4), true).write('=');\n            wrap('{', '}', () => {\n                if (prop.exp != null) {\n                    genExpressionNode(prop.exp);\n                }\n                else {\n                    ctx.write(annotations.missingExpression);\n                }\n            });\n            ctx.newLine();\n        }\n        else if (prop.name === 'model') {\n            const genExp = () => {\n                if (prop.exp != null) {\n                    genExpressionNode(prop.exp);\n                }\n                else {\n                    ctx.write(annotations.missingExpression, sliceLoc(prop.loc, -1));\n                }\n            };\n            if (prop.arg == null) {\n                // TODO: get attribute name at runtime\n                let isCheckbox = false;\n                if (['input', 'select', 'textarea'].includes(el.tag)) {\n                    const type = findProp(el, 'type');\n                    if (isAttributeNode(type) &&\n                        (type.value?.content === 'checkbox' ||\n                            type.value?.content === 'radio')) {\n                        isCheckbox = true;\n                        ctx.write('checked', prop.nameLoc, true);\n                    }\n                    else {\n                        ctx.write('value', prop.nameLoc, true);\n                    }\n                }\n                else {\n                    ctx.write('modelValue', prop.nameLoc, true);\n                }\n                ctx.write('={');\n                genExp();\n                if (isCheckbox) {\n                    const value = findProp(el, 'value');\n                    if (isAttributeNode(value)) {\n                        ctx.write(' === ');\n                        if (value.value != null) {\n                            genTextNode(value.value);\n                        }\n                        else {\n                            ctx.write('undefined', value.loc);\n                        }\n                    }\n                    else if (isDirectiveNode(value)) {\n                        ctx.write(' === ');\n                        if (value.exp != null) {\n                            genExpressionNode(value.exp);\n                        }\n                        else {\n                            ctx.write('undefined', value.loc);\n                        }\n                    }\n                }\n                ctx.write('}');\n            }\n            else if (isStaticExpression(prop.arg)) {\n                ctx.write(prop.arg.content, prop.arg.loc);\n                ctx.write('={');\n                genExp();\n                ctx.write('}');\n            }\n            else {\n                ctx.write('{...({');\n                genExpressionNode(prop.arg);\n                ctx.write(': ');\n                genExp();\n                ctx.write('})}');\n            }\n            ctx.newLine();\n        }\n    });\n}\nfunction genAttribute(attribute, element) {\n    if (attribute.name === 'class' || attribute.name === 'style')\n        return; // TODO: handle class and style eventually\n    const name = isPlainElementNode(element) ||\n        attribute.name.startsWith('data-') ||\n        attribute.name.startsWith('aria-')\n        ? attribute.name\n        : camelize(attribute.name);\n    ctx.write(name, attribute.nameLoc, true);\n    if (attribute.value != null) {\n        ctx.write('=');\n        genTextNode(attribute.value);\n    }\n}\nfunction genVBindDirective(prop, element) {\n    if (isStaticExpression(prop.arg)) {\n        const name = isPlainElementNode(element) ||\n            prop.arg.content.startsWith('data-') ||\n            prop.arg.content.startsWith('aria-')\n            ? prop.arg.content\n            : camelize(prop.arg.content);\n        ctx.write(name, prop.arg.loc, true);\n        if (prop.exp != null) {\n            ctx.write('=');\n            ctx.write('{');\n            genExpressionNode(prop.exp);\n            ctx.write('}');\n        }\n    }\n    else if (prop.arg != null) {\n        ctx.write('{...({[');\n        genExpressionNode(prop.arg);\n        ctx.write(']');\n        if (prop.exp != null) {\n            ctx.write(': ');\n            genExpressionNode(prop.exp);\n        }\n        else {\n            ctx.write(': true');\n        }\n        ctx.write('})}');\n    }\n    else if (prop.exp == null) {\n        ctx.write(' ', prop.loc);\n    }\n    else {\n        ctx.write('{...(');\n        if (prop.exp != null) {\n            genExpressionNode(prop.exp);\n        }\n        else {\n            ctx.write(' ', createLoc(prop.loc, prop.loc.source.length));\n        }\n        ctx.write(')}');\n    }\n}\nfunction genTextNode(node) {\n    ctx.write(JSON.stringify(node.content), node.loc, true);\n}\nfunction genInterpolationNode(node) {\n    ctx.write(' {', node.loc);\n    genExpressionNode(node.content);\n    ctx.write('} ', sliceLoc(node.loc, -2));\n}\nfunction genExpressionNode(node) {\n    if (isSimpleExpressionNode(node)) {\n        if (isStaticExpression(node)) {\n            ctx.write(JSON.stringify(node.content), node.loc, true);\n        }\n        else {\n            genSimpleExpressionNode(node);\n        }\n    }\n    else {\n        genCompoundExpressionNode(node);\n    }\n}\nfunction genExpressionNodeAsFunction(node) {\n    invariant(isSimpleExpressionNode(node), 'v-on directive expression must be simple.');\n    if (\n    // is identifier?\n    isSimpleIdentifier(node.content) ||\n        // is arrow function expression?\n        /^(\\([^)]*\\)|[A-Za-z$_][A-Za-z0-9$_]*)\\s*=>/i.test(node.content.trim()) ||\n        // is function expression?\n        /^function[\\s(]/.test(node.content.trim())) {\n        genSimpleExpressionNode(node);\n    }\n    else {\n        node.content.includes('$event')\n            ? ctx.write('($event) => {').newLine()\n            : ctx.write('() => {').newLine();\n        genTypeGuards();\n        genSimpleExpressionNode(node);\n        ctx.newLine().write('}');\n    }\n}\nfunction genSimpleExpressionNode(node) {\n    ctx.write(node.content, node.loc, true);\n}\nfunction genCompoundExpressionNode(node) {\n    node.children.forEach((node) => {\n        if (typeof node === 'string') {\n            ctx.write(node);\n        }\n        else if (typeof node === 'symbol') {\n            throw new Error('Unsupported symbol node');\n        }\n        else {\n            genNode(node);\n        }\n    });\n}\nfunction createGenerateContext(options) {\n    let indent = 0;\n    let output = '';\n    let line = 0;\n    let column = 0;\n    const names = [];\n    const mappings = [[]];\n    let shouldIndent = false;\n    let shouldWriteMapping = true;\n    const nl = '\\n';\n    function push(chunk, loc, addMappingType = false) {\n        output += chunk;\n        const lines = chunk.split(nl);\n        if (loc != null && shouldWriteMapping) {\n            let index = null;\n            if (addMappingType) {\n                const name = loc.source.startsWith(chunk)\n                    ? `<<P>>${chunk.length}`\n                    : loc.source.endsWith(chunk)\n                        ? `<<S>>${loc.source.length}|${chunk.length}`\n                        : `<<T>>${loc.source.length}|${chunk.length}`;\n                index = names.indexOf(name);\n                if (index === -1) {\n                    index = names.push(name) - 1;\n                }\n            }\n            mappings[line]?.push(index != null\n                ? [column, 0, loc.start.line - 1, loc.start.column - 1, index]\n                : [column, 0, loc.start.line - 1, loc.start.column - 1]);\n        }\n        else {\n            mappings[line]?.push([column]);\n        }\n        if (lines.length > 1) {\n            line += lines.length - 1;\n            column = last(lines).length;\n        }\n        else {\n            column += chunk.length;\n        }\n        for (let i = mappings.length; i <= line; i++) {\n            mappings.push([]);\n        }\n    }\n    const context = {\n        ...options,\n        typeGuards: [],\n        setSourceMapMode(enabled) {\n            const current = shouldWriteMapping;\n            shouldWriteMapping = enabled;\n            return current;\n        },\n        write(code, loc, addMappingType) {\n            if (shouldIndent) {\n                shouldIndent = false;\n                push(' '.repeat(indent));\n            }\n            push(code, loc, addMappingType);\n            return context;\n        },\n        newLine() {\n            push(nl);\n            shouldIndent = true;\n            return context;\n        },\n        indent() {\n            indent = Math.max(0, indent) + 2;\n            return context;\n        },\n        deindent() {\n            indent = Math.max(0, indent - 2);\n            return context;\n        },\n        getOutput() {\n            return {\n                code: output,\n                map: {\n                    file: options.fileName,\n                    sources: [],\n                    sourcesContent: [],\n                    names,\n                    mappings,\n                },\n            };\n        },\n    };\n    return context;\n}\nfunction isStaticExpression(node) {\n    return isSimpleExpressionNode(node) && node.isStatic;\n}\nfunction genSlotTypes(root) {\n    const slots = [];\n    const value = ctx.setSourceMapMode(false);\n    traverse(root, (node, ancestors) => {\n        if (isSlotNode(node)) {\n            slots.push([node, ancestors.slice()]);\n        }\n    });\n    writeLine(annotations.diagnosticsIgnore.start);\n    ctx.write(`function ${ctx.internalIdentifierPrefix}_slots() {`).newLine();\n    indent(() => {\n        genGlobalDeclarations(root);\n        ctx\n            .write(`return ${getRuntimeFn(ctx.typeIdentifier, 'union')}(...${getRuntimeFn(ctx.typeIdentifier, 'flat')}([`)\n            .newLine();\n        indent(() => {\n            for (const [slot, ancestors] of slots) {\n                recurse(ancestors.slice().map((path) => path.node), {\n                    enter(node, index, nodes) {\n                        if (isForNode(node)) {\n                            ctx.write(getRuntimeFn(ctx.typeIdentifier, 'flat'));\n                            ctx.write('(');\n                            ctx.newLine().indent();\n                            ctx.write(getRuntimeFn(ctx.typeIdentifier, 'renderList'));\n                            ctx.write('(');\n                            genForNodeArgs(node);\n                            ctx.write(' => (');\n                            ctx.newLine().indent();\n                        }\n                        else if (isComponentNode(node)) {\n                            ctx.write(getRuntimeFn(ctx.typeIdentifier, 'flat'));\n                            const next = nodes[index + 1];\n                            const currentSlot = next != null\n                                ? node.slots.find((slot) => slot.template === next)\n                                : null;\n                            ctx.write('(((');\n                            if (currentSlot?.args != null) {\n                                genExpressionNode(currentSlot.args);\n                            }\n                            else {\n                                ctx.write('_');\n                            }\n                            if (ctx.isTypeScript) {\n                                ctx.write(`: ${ctx.typeIdentifier}.internal.GetSlotProps<`);\n                                if (node.resolvedName != null) {\n                                    ctx.write('typeof ');\n                                    ctx.write(node.resolvedName);\n                                }\n                                else if (node.is != null) {\n                                    if (isDirectiveNode(node.is) && node.is.exp != null) {\n                                        ctx.write('typeof ');\n                                        genExpressionNode(node.is.exp);\n                                    }\n                                    else {\n                                        ctx.write('{}');\n                                    }\n                                }\n                                else {\n                                    ctx.write('{}');\n                                }\n                                ctx.write(', ');\n                                if (currentSlot?.name != null) {\n                                    if (!isStaticExpression(currentSlot.name)) {\n                                        ctx.write('typeof ');\n                                    }\n                                    genExpressionNode(currentSlot.name);\n                                }\n                                else {\n                                    ctx.write('\"default\"');\n                                }\n                                ctx.write('>');\n                            }\n                            ctx.write(') => {');\n                            ctx.newLine().indent();\n                            ctx.write('return [');\n                            ctx.newLine().indent();\n                        }\n                    },\n                    exit(node) {\n                        if (isComponentNode(node)) {\n                            ctx.deindent().newLine();\n                            ctx.write(']');\n                            ctx.deindent().newLine();\n                            ctx.write(`})(${typeCastAs('null', 'any')}))`);\n                        }\n                        else if (isForNode(node)) {\n                            ctx.deindent().newLine();\n                            ctx.write('))');\n                            ctx.deindent().newLine();\n                            ctx.write(')');\n                        }\n                    },\n                    fn() {\n                        const name = findProp(slot, 'name', false, true);\n                        ctx\n                            .write(getRuntimeFn(ctx.typeIdentifier, 'record'))\n                            .write('(')\n                            .newLine();\n                        indent(() => {\n                            if (isAttributeNode(name)) {\n                                if (name.value != null) {\n                                    ctx.write(JSON.stringify(name.value.content));\n                                }\n                                else {\n                                    ctx.write('undefined');\n                                }\n                            }\n                            else if (isDirectiveNode(name)) {\n                                if (name.exp != null) {\n                                    genExpressionNode(name.exp);\n                                }\n                                else {\n                                    ctx.write('undefined');\n                                }\n                            }\n                            else {\n                                ctx.write('\"default\" as const');\n                            }\n                            ctx.write(', ');\n                            ctx.write('{');\n                            indent(() => {\n                                const props = slot.props.filter((prop) => prop !== name);\n                                if (props.length === 0)\n                                    return;\n                                ctx.newLine();\n                                slot.props.forEach((prop) => {\n                                    if (prop === name)\n                                        return;\n                                    genObjectProperty(prop);\n                                });\n                            });\n                            ctx.write('},').newLine();\n                        });\n                        ctx.write(')');\n                    },\n                });\n                ctx.write(',').newLine();\n            }\n        });\n        ctx.write(']))').newLine();\n    });\n    ctx.write('}').newLine();\n    writeLine(annotations.diagnosticsIgnore.end);\n    ctx.setSourceMapMode(value);\n}\nfunction genObjectProperty(prop, newLine = true) {\n    if (isAttributeNode(prop)) {\n        breakMapping(prop.loc);\n        ctx.write(prop.name, prop.nameLoc, true).write(': ');\n        if (prop.value != null) {\n            genTextNode(prop.value);\n        }\n        else {\n            ctx.write('true');\n        }\n        ctx.write(',');\n        if (newLine)\n            ctx.newLine();\n    }\n    else if (prop.name !== 'bind') ;\n    else if (prop.arg != null) {\n        breakMapping(prop.loc);\n        if (isStaticExpression(prop.arg)) {\n            if (/^[a-zA-Z_$0-9]+$/.test(prop.arg.content)) {\n                ctx.write(prop.arg.content, prop.arg.loc, true);\n            }\n            else {\n                ctx.write(JSON.stringify(prop.arg.content), prop.arg.loc, true);\n            }\n        }\n        else {\n            ctx.write('[', prop.loc);\n            genExpressionNode(prop.arg);\n            ctx.write(']');\n        }\n        ctx.write(': ');\n        if (prop.exp != null) {\n            genExpressionNode(prop.exp);\n        }\n        else {\n            ctx.write('true');\n        }\n        ctx.write(',');\n        if (newLine)\n            ctx.newLine();\n    }\n    else if (prop.exp != null) {\n        ctx.write('...(', prop.loc);\n        genExpressionNode(prop.exp);\n        ctx.write(')');\n        ctx.write(',');\n        if (newLine)\n            ctx.newLine();\n    }\n}\nfunction recurse(items, options) {\n    if (options.enter != null) {\n        for (let i = 0; i < items.length; i++) {\n            options.enter(items[i], i, items);\n        }\n    }\n    options.fn();\n    if (options.exit != null) {\n        for (let i = items.length - 1; i >= 0; i--) {\n            options.exit(items[i], i, items);\n        }\n    }\n}\n// function isIfNode(node: Node): node is IfNode {\n//   return node.type === NodeTypes.IF\n// }\nfunction isForNode(node) {\n    return node.type === NodeTypes.FOR;\n}\nfunction genForNodeArgs(node) {\n    const context = ctx;\n    const forExps = node.parseResult;\n    // Source\n    if (isSimpleExpressionNode(forExps.source)) {\n        const quote = !isSimpleIdentifier(forExps.source.content);\n        if (quote)\n            context.write('(');\n        context.write(forExps.source.content, forExps.source.loc, true);\n        if (quote)\n            context.write(')');\n    }\n    else {\n        context.write('undefined');\n    }\n    context.write(', ');\n    // Handler Args\n    context.write('(');\n    const args = ['_', '__'];\n    if (isSimpleExpressionNode(forExps.value)) {\n        context.write(forExps.value.content, forExps.value.loc, true);\n    }\n    else if (forExps.key != null || forExps.index != null) {\n        context.write(args.pop() ?? '_');\n    }\n    if (isSimpleExpressionNode(forExps.key)) {\n        context.write(', ');\n        context.write(forExps.key.content, forExps.key.loc, true);\n    }\n    else if (forExps.index != null) {\n        context.write(', ');\n        context.write(args.pop() ?? '_');\n    }\n    if (isSimpleExpressionNode(forExps.index)) {\n        context.write(', ');\n        context.write(forExps.index.content, forExps.index.loc, true);\n    }\n    context.write(')');\n}\nfunction genCommentNode(node) {\n    ctx.write('{/*').write(node.content, node.loc).write('*/}');\n}\nfunction genForNode(forNode) {\n    wrap('{', '}', () => {\n        ctx.newLine();\n        indent(() => {\n            genFn(getRuntimeFn(ctx.typeIdentifier, 'renderList'), () => {\n                genForNodeArgs(forNode);\n                ctx.write(' => {').newLine();\n                indent(() => {\n                    genNodeHoists(forNode);\n                    wrap('return (', ')', () => {\n                        if (forNode.children.length === 1) {\n                            ctx.newLine();\n                            indent(() => genChildren(forNode));\n                        }\n                        else {\n                            wrap('<>', '</>', () => {\n                                ctx.newLine();\n                                indent(() => genChildren(forNode));\n                            });\n                        }\n                    });\n                });\n                ctx.newLine().write('}');\n            });\n        });\n        ctx.newLine();\n    });\n}\nfunction genFn(name, fn) {\n    wrap(`${name}(`, ')', fn);\n}\nfunction wrap(open, close, fn) {\n    ctx.write(open);\n    fn();\n    ctx.write(close);\n}\nfunction genIfNode(node) {\n    wrap('{', '}', () => {\n        let i = 0;\n        let hasElse = false;\n        const n = node.branches.length - 1;\n        recurse(node.branches, {\n            enter(branch) {\n                ctx.typeGuards.push(branch.condition);\n                if (i > 0)\n                    indent(() => ctx.write(': '));\n                if (branch.condition != null) {\n                    genExpressionNode(branch.condition);\n                    ctx.newLine();\n                    indent(() => ctx.write('? '));\n                }\n                else if (i < n) {\n                    ctx.write(annotations.missingExpression, node.loc).newLine();\n                    ctx.newLine();\n                    indent(() => ctx.write('? '));\n                }\n                else {\n                    hasElse = true;\n                }\n                ++i;\n                indent(() => {\n                    indent(() => {\n                        wrap('<>', '</>', () => {\n                            ctx.newLine();\n                            indent(() => genChildren(branch));\n                        });\n                    });\n                });\n                ctx.newLine();\n            },\n            exit() {\n                ctx.typeGuards.pop();\n            },\n            fn() {\n                if (!hasElse) {\n                    ctx.write('  : null').newLine();\n                }\n            },\n        });\n    });\n}\nfunction genTemplateNode(node) {\n    wrap('<>', '</>', () => {\n        ctx.newLine();\n        indent(() => genChildren(node));\n    });\n}\nfunction breakMapping(loc) {\n    // Break mapping\n    ctx.deindent();\n    ctx.write('  ', loc);\n    ctx.indent();\n}\nfunction asConst(value) {\n    return typeCastAs(value, 'const');\n}\nfunction typeCastAs(value, type) {\n    return ctx.isTypeScript\n        ? `${value} as ${type}`\n        : `/** @type {${type}} */ (${value})`;\n}\nfunction genAttrTypes(root) {\n    const value = ctx.setSourceMapMode(false);\n    // TODO: Support components.\n    const nodes = [];\n    if (root.loc.source.includes('@vue-attrs-target')) {\n        traverse(root, {\n            enter(node, ancestors) {\n                if (isCommentNode(node)) {\n                    if (node.content.includes('@vue-attrs-target')) {\n                        const { node: parent, key, index } = last(ancestors);\n                        if (index != null) {\n                            const el = parent[key]?.[index + 1];\n                            if (isPlainElementNode(el)) {\n                                nodes.push(el);\n                            }\n                        }\n                    }\n                }\n            },\n        });\n    }\n    else {\n        traverseEvery(root, (node, ancestors) => {\n            if (isPlainElementNode(node)) {\n                const { node: parent } = last(ancestors);\n                if (isRootNode(parent)) {\n                    if (parent.children.filter(isPlainElementNode).length === 1) {\n                        nodes.push(node);\n                    }\n                }\n                else {\n                    nodes.push(node);\n                }\n            }\n            else if (isTemplateNode(node) || isRootNode(node)) {\n                return true;\n            }\n            else if (node.type === NodeTypes.IF ||\n                node.type === NodeTypes.IF_BRANCH ||\n                node.type === NodeTypes.FOR) {\n                return true;\n            }\n            return false;\n        });\n    }\n    ctx.write(`const ${ctx.internalIdentifierPrefix}_attrs = (() => {`).newLine();\n    indent(() => {\n        const value = typeCastAs('{}', 'unknown');\n        ctx.write('return ');\n        ctx.write(getRuntimeFn(ctx.typeIdentifier, 'first'));\n        ctx.write('(');\n        ctx.write(getRuntimeFn(ctx.typeIdentifier, 'flat'));\n        ctx.write('([');\n        if (nodes.length > 0) {\n            indent(() => {\n                ctx.newLine();\n                for (const node of nodes) {\n                    const type = JSON.stringify(node.tag);\n                    ctx.write(typeCastAs(value, `${ctx.typeIdentifier}.internal.PropsOf<JSX.IntrinsicElements, ${type}>`));\n                    ctx.write(',');\n                    ctx.newLine();\n                }\n            });\n        }\n        else {\n            ctx.write('{}');\n        }\n        ctx.write(']))');\n        ctx.newLine();\n    });\n    ctx.write('})();').newLine();\n    ctx.setSourceMapMode(value);\n}\n\nfunction transformCustomBlock(_block, options) {\n    return {\n        code: '',\n        map: {\n            file: options.fileName,\n            sources: [],\n            names: [],\n            mappings: [],\n            sourcesContent: [],\n        },\n    };\n}\n\nfunction transformScript(script, options) {\n    const content = script?.content ?? '';\n    const result = transformScript$1(content, {\n        internalIdentifierPrefix: options.internalIdentifierPrefix,\n        runtimeModuleName: options.runtimeModuleName,\n        typeIdentifier: options.typeIdentifier,\n        lang: (script?.lang ?? 'ts'),\n        fileName: options.fileName,\n        lib: options.typescript,\n        cache: options.cache,\n    });\n    invariant(result.map != null);\n    return {\n        code: result.code,\n        map: result.map,\n        identifiers: result.identifiers,\n        exportIdentifier: result.componentIdentifier,\n        name: result.name,\n        inheritAttrs: result.inheritAttrs,\n    };\n}\n\nfunction transformScriptSetup(script, options) {\n    const content = script?.content ?? '';\n    const generic = script?.attrs?.['generic'];\n    const result = transformScriptSetup$1(content, {\n        internalIdentifierPrefix: options.internalIdentifierPrefix,\n        runtimeModuleName: options.runtimeModuleName,\n        typeIdentifier: options.typeIdentifier,\n        lang: (script?.lang ?? 'ts'),\n        fileName: options.fileName,\n        lib: options.typescript,\n        cache: options.cache,\n        attrsIdentifier: `${options.internalIdentifierPrefix}_attrs`,\n        slotsIdentifier: `${options.internalIdentifierPrefix}_slots`,\n        generic: typeof generic === 'string' ? generic : undefined,\n    });\n    invariant(result.map != null);\n    return {\n        code: result.code,\n        map: result.map,\n        identifiers: result.identifiers,\n        exportIdentifier: result.privateComponentIdentifier,\n        componentIdentifier: result.publicComponentIdentifier,\n        scopeIdentifier: result.scopeIdentifier,\n        exports: result.exports,\n    };\n}\n\nfunction transformStyle(_style, options) {\n    return {\n        code: '',\n        map: {\n            file: options.fileName,\n            sources: [],\n            names: [],\n            mappings: [],\n            sourcesContent: [],\n        },\n    };\n}\n\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nfunction createTransformFor(customContext) {\n    return createStructuralDirectiveTransform(/^for$/, (node, dir, context) => {\n        return processFor(node, dir, context, (forNode) => {\n            customContext.scope.createNewHoistScope();\n            return () => {\n                forNode.hoists = customContext.scope.popHoistScope();\n            };\n        });\n    });\n}\n\nclass Scope {\n    constructor(parent = null) {\n        this.parent = parent;\n        this.bindings = {};\n    }\n    get identifiers() {\n        return Array.from(Object.keys(this.bindings));\n    }\n    get globals() {\n        return this.identifiers.filter((identifier) => this.getBinding(identifier) === null);\n    }\n    getBinding(identifier) {\n        if (identifier in this.bindings)\n            return this.bindings[identifier] ?? null;\n        if (this.parent != null) {\n            return (this.bindings[identifier] = this.parent.getBinding(identifier));\n        }\n        else {\n            this.bindings[identifier] = null;\n        }\n        return null;\n    }\n    setBinding(identifier, node) {\n        this.bindings[identifier] = node;\n    }\n}\nfunction withScope(ast) {\n    ast.scope = new Scope(null);\n    traverse(ast, (node, ancestors) => {\n        const parent = (ancestors[ancestors.length - 1]?.node ?? ast);\n        const scope = (node.scope = node.scope ?? new Scope(parent.scope));\n        if (isSimpleExpressionNode(node) && !node.isStatic) {\n            if (parent != null ||\n                !(isDirectiveNode(parent) &&\n                    ['slot', 'for'].includes(parent.name) &&\n                    parent.exp === node)) {\n                const isOnDirective = isDirectiveNode(parent) && parent.name === 'on';\n                getIdentifiers(node.content).forEach((identifier) => {\n                    if (isOnDirective && identifier === '$event')\n                        return;\n                    scope.getBinding(identifier);\n                });\n            }\n        }\n        else if (isElementNode(node)) {\n            node.props.forEach((prop) => {\n                if (isDirectiveNode(prop)) {\n                    const directiveScope = (prop.scope = prop.scope ?? new Scope(scope));\n                    if (prop.name === 'slot') {\n                        if (isSimpleExpressionNode(prop.exp)) {\n                            const localScope = (prop.exp.scope = new Scope(directiveScope));\n                            const content = prop.exp.content.trim();\n                            getIdentifiers(`(${content}) => {}`, false).forEach((identifier) => {\n                                scope.setBinding(identifier, node);\n                                localScope.getBinding(identifier);\n                            });\n                        }\n                    }\n                    else if (prop.name === 'for') {\n                        if (isSimpleExpressionNode(prop.exp)) {\n                            const localScope = (prop.exp.scope = new Scope(directiveScope));\n                            const match = forAliasRE.exec(prop.exp.content);\n                            if (match != null) {\n                                const [, LHS, RHS] = match;\n                                invariant(LHS != null && RHS != null);\n                                getIdentifiers(RHS).forEach((identifier) => {\n                                    localScope.getBinding(identifier);\n                                });\n                                getIdentifiers(`${LHS ?? '()'} => {}`, false).forEach((identifier) => {\n                                    scope.setBinding(identifier, node);\n                                    localScope.getBinding(identifier);\n                                });\n                            }\n                        }\n                    }\n                }\n            });\n        }\n    });\n    return ast;\n}\nfunction getIdentifiers(source, ignoreFunctionParameters = true) {\n    source = source\n        .trim()\n        // Common errors when user is typing.\n        .replace(/(\\.|\\[\\]?)\\s*$/, '');\n    const identifiers = new Set();\n    const add = (id) => {\n        if (isValidIdentifier(id))\n            identifiers.add(id);\n    };\n    if (isSimpleIdentifier$1(source.trim())) {\n        add(source);\n    }\n    else {\n        try {\n            const ast = parseUsingBabel(source, true);\n            let definedInScope = new Set();\n            const scopes = [];\n            const pushScope = (scope) => {\n                if (!ignoreFunctionParameters)\n                    return;\n                scopes.push(scope);\n                definedInScope = new Set([...definedInScope, ...scope]);\n            };\n            const popScope = () => {\n                if (!ignoreFunctionParameters)\n                    return;\n                scopes.pop();\n                definedInScope = new Set(scopes.flatMap((scope) => Array.from(scope)));\n            };\n            traverse$1(ast, {\n                enter: (node, ancestors) => {\n                    if (isFunctionDeclaration(node) || isArrowFunctionExpression(node)) {\n                        const scope = new Set();\n                        node.params.forEach((param) => {\n                            traverse$1(param, (node) => {\n                                if (isIdentifier(node))\n                                    scope.add(node.name);\n                            });\n                        });\n                        pushScope(scope);\n                    }\n                    if (isIdentifier(node) && !definedInScope.has(node.name)) {\n                        if (shouldTrack(node, ancestors.slice())) {\n                            add(node.name);\n                        }\n                    }\n                },\n                exit: (node) => {\n                    if (isFunctionDeclaration(node) || isArrowFunctionExpression(node)) {\n                        popScope();\n                    }\n                },\n            });\n        }\n        catch {\n            const RE = /\\b[a-z$_][a-z0-9$_]+\\b/gi;\n            let match;\n            while ((match = RE.exec(source)) != null) {\n                add(match[0] ?? '');\n            }\n        }\n    }\n    return identifiers;\n}\nfunction isValidIdentifier(id) {\n    return (id.trim().length > 0 &&\n        !/^(of|in|for|while|function|class|const|let|var|true|false)$/.test(id));\n}\nfunction parseUsingBabel(source, withTS = false) {\n    try {\n        return parse$1(source, {\n            plugins: withTS\n                ? ['bigInt', 'optionalChaining', 'typescript']\n                : ['bigInt', 'optionalChaining'],\n            // @ts-expect-error\n            errorRecovery: true,\n        });\n    }\n    catch {\n        return parseExpression(source, {\n            plugins: withTS\n                ? ['bigInt', 'optionalChaining', 'typescript']\n                : ['bigInt', 'optionalChaining'],\n            // @ts-expect-error\n            errorRecovery: true,\n        });\n    }\n}\n// TODO: This misses destructured arguments\nfunction shouldTrack(identifier, ancestors) {\n    const ancestor = ancestors.pop();\n    if (ancestor == null)\n        return true;\n    const parent = ancestor.node;\n    if (\n    // not id of a FunctionDeclaration\n    !(isFunction(parent) && parent.id === identifier) &&\n        // not a key of Property\n        !isStaticPropertyKey(identifier, parent) &&\n        // not a property of a MemberExpression\n        !((isMemberExpression(parent) || isOptionalMemberExpression(parent)) &&\n            parent.property === identifier &&\n            !parent.computed) &&\n        // skip allowed globals\n        !isKnownIdentifier(identifier.name) &&\n        // special case for webpack compilation\n        identifier.name !== `require` &&\n        // is a special keyword but parsed as identifier\n        identifier.name !== `arguments`) {\n        return true;\n    }\n    return false;\n}\nconst KNOWN_IDENTIFIERS = new Set(('Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt').split(','));\nfunction isKnownIdentifier(value) {\n    return KNOWN_IDENTIFIERS.has(value) || /^(true|false|null|this)$/.test(value);\n}\nfunction isStaticProperty(node) {\n    return isObjectMember(node) && !node.computed;\n}\nfunction isStaticPropertyKey(node, parent) {\n    return isStaticProperty(parent) && parent.key === node;\n}\n\nclass ScopeManager {\n    constructor() {\n        this.hoists = [];\n        this.identifiers = {};\n        this.rootScope = [];\n        this.currentScope = this.rootScope;\n    }\n    getRootScope() {\n        return this.rootScope;\n    }\n    addIdentifier(value) {\n        this.identifiers[value] = 1 + (this.identifiers[value] ?? 0);\n    }\n    hasIdentifier(value) {\n        return (this.identifiers[value] ?? 0) > 0;\n    }\n    removeIdentifier(value) {\n        this.identifiers[value] = Math.max(0, this.identifiers[value] ?? 0 - 1);\n    }\n    scopeHoist(expression) {\n        if (typeof expression === 'string') {\n            this.currentScope.push(createCompoundExpression([expression]));\n        }\n        else {\n            this.currentScope.push(expression);\n        }\n    }\n    hoist(expression) {\n        if (typeof expression === 'string') {\n            this.rootScope.push(createCompoundExpression([expression]));\n        }\n        else {\n            this.rootScope.push(expression);\n        }\n    }\n    createNewHoistScope() {\n        this.hoists.push(this.currentScope);\n        this.currentScope = [];\n        return this.currentScope;\n    }\n    popHoistScope() {\n        const scope = this.currentScope;\n        this.currentScope = this.hoists.pop() ?? [];\n        return scope;\n    }\n}\n\nfunction createComponentChildrenTransform(_customContext) {\n    return (node) => {\n        if (!isComponentNode(node))\n            return;\n        const dir = findDir(node, 'slot', true);\n        let hasSlotsAsChildren = false;\n        if (dir == null &&\n            node.children.some((node) => isTemplateNode(node) && findDir(node, 'slot', true) != null)) {\n            hasSlotsAsChildren = true;\n        }\n        return () => {\n            if (dir != null) {\n                node.props = node.props.filter((prop) => prop !== dir);\n                node.slots = [\n                    {\n                        name: dir.arg,\n                        args: dir.exp,\n                        hoists: node.hoists ?? [],\n                        children: node.children,\n                    },\n                ];\n            }\n            else if (hasSlotsAsChildren) {\n                node.slots = [];\n                const slots = node.slots;\n                node.unassignedSlots = node.children.filter((node) => {\n                    if (isTemplateNode(node)) {\n                        const dir = findDir(node, 'slot', true);\n                        if (dir != null) {\n                            const _if = findDir(node, 'if', true);\n                            slots.push({\n                                name: dir.arg,\n                                args: dir.exp,\n                                hoists: node.hoists ?? [],\n                                children: _if == null ? node.children : [createIfNode(node, _if)],\n                                template: node,\n                            });\n                            return false;\n                        }\n                    }\n                    return true;\n                });\n            }\n            else {\n                node.slots = [\n                    {\n                        hoists: node.hoists ?? [],\n                        children: node.children,\n                    },\n                ];\n            }\n        };\n    };\n}\nfunction createIfNode(node, dir) {\n    return {\n        type: NodeTypes.IF,\n        branches: [createIfBranchNode(node, dir)],\n        loc: node.loc,\n        scope: node.scope,\n    };\n}\nfunction createIfBranchNode(node, dir) {\n    return {\n        type: NodeTypes.IF_BRANCH,\n        children: node.children,\n        condition: dir.exp,\n        loc: node.loc,\n        scope: node.scope,\n    };\n}\n\nfunction createTransformIf(_customContext) {\n    return createStructuralDirectiveTransform(/^(if|else-if|else)$/, (node, dir, context) => {\n        const condition = dir.exp;\n        dir.exp = (condition != null\n            ? { ...condition }\n            : createSimpleExpression$1('undefined', false)); // Prevent condition normalization\n        return processIf(node, dir, context, (_ifNode, branch) => () => {\n            branch.condition = condition;\n        });\n    });\n}\n\nconst directives = new Set('text,html,show,if,else,else-if,for,on,bind,model,slot,pre,cloak,once,is,memo'.split(','));\n\nconst s = (text) => JSON.stringify(text) + ' as const';\nfunction createResolveComponentTransform(ctx) {\n    const h = getRuntimeFn.bind(null, ctx.typeIdentifier);\n    const resolveComponentArgs = `${ctx.isTypeScript\n        ? `{} as unknown as ${ctx.internalIdentifierPrefix}GlobalComponents`\n        : `/** @type {${ctx.internalIdentifierPrefix}GlobalComponents} */ (/** @type {unknown} */ ({}))`}, ${ctx.isTypeScript\n        ? `{} as unknown as JSX.IntrinsicElements`\n        : `/** @type JSX.IntrinsicElements} */ (/** @type {unknown} */ ({}))`}, ${ctx.contextIdentifier}, `;\n    return (node) => {\n        if (!isElementNode(node))\n            return;\n        if (isElementNode(node)) {\n            node.props.forEach((node) => {\n                if (isDirectiveNode(node) && !directives.has(node.name)) {\n                    ctx.used.directives.add(node.name);\n                    const id = `v${pascalCase(node.name)}`;\n                    node.resolvedName = id;\n                    if (!ctx.scope.hasIdentifier(id)) {\n                        const knownId = ctx.identifiers.get(id);\n                        if (knownId == null) {\n                            ctx.scope.addIdentifier(id);\n                            ctx.scope.hoist(createCompoundExpression([\n                                'const ',\n                                id,\n                                ` = ${h('resolveDirective')}(${ctx.contextIdentifier}, `,\n                                s(node.name),\n                                ', ',\n                                s(camelCase(node.name)),\n                                ');',\n                            ]));\n                        }\n                        else if (mayBeRef(knownId)) {\n                            ctx.scope.addIdentifier(id);\n                            ctx.scope.hoist(createCompoundExpression([\n                                `const ${id} = ${ctx.internalIdentifierPrefix}_get_identifier_${id}();`,\n                            ]));\n                        }\n                    }\n                }\n            });\n        }\n        let isProp = findDir(node, 'is');\n        if (isProp != null) {\n            node.tagType = 1;\n            node.tag = 'component';\n        }\n        if (!isComponentNode(node))\n            return;\n        if (node.tag !== 'component') {\n            if (/[A-Z.-]/.test(node.tag)) {\n                ctx.used.components.add(node.tag);\n                const name = node.tag.split('.')[0] ?? node.tag;\n                const id = `${pascalCase(name)}`;\n                node.resolvedName = node.tag.includes('.')\n                    ? id + node.tag.slice(name.length)\n                    : id;\n                if (!ctx.scope.hasIdentifier(id)) {\n                    const knownId = ctx.identifiers.get(id);\n                    if (knownId == null || !isSimpleIdentifier(id)) {\n                        ctx.used.components.add(id);\n                        ctx.scope.addIdentifier(id);\n                        ctx.scope.hoist(createCompoundExpression([\n                            'const ',\n                            id,\n                            ` = ${h('resolveComponent')}(${resolveComponentArgs}`,\n                            isSimpleIdentifier(id)\n                                ? `${ctx.internalIdentifierPrefix}_get_identifier_${id}()`\n                                : 'null',\n                            ', ',\n                            s(name),\n                            ', ',\n                            s(pascalCase(name)),\n                            ');',\n                        ]));\n                    }\n                    else if (mayBeRef(knownId)) {\n                        ctx.used.components.add(id);\n                        ctx.scope.addIdentifier(id);\n                        ctx.scope.hoist(createCompoundExpression([\n                            `const ${id} = ${ctx.internalIdentifierPrefix}_get_identifier_${id}();`,\n                        ]));\n                    }\n                }\n            }\n            return undefined;\n        }\n        else {\n            isProp = isProp ?? findProp(node, 'is');\n            if (isProp != null)\n                node.is = isProp;\n            node.props = node.props.filter((prop) => prop !== isProp);\n        }\n        return undefined;\n    };\n}\nfunction mayBeRef(id) {\n    return (id.kind === 'ref' ||\n        id.kind === 'maybeRef' ||\n        id.kind === 'externalRef' ||\n        id.kind === 'externalMaybeRef');\n}\n\nfunction createSlotHoistScopeTransform(context) {\n    return (node) => {\n        if (!isElementNode(node))\n            return;\n        const dir = findDir(node, 'slot', true);\n        if (dir == null)\n            return;\n        node.hoists = context.scope.createNewHoistScope();\n        return () => {\n            node.hoists = context.scope.popHoistScope();\n        };\n    };\n}\n\nconst namedCharacterReferences = {\n    GT: '>',\n    gt: '>',\n    LT: '<',\n    lt: '<',\n    'ac;': '\u223E',\n    'af;': '\u2061',\n    AMP: '&',\n    amp: '&',\n    'ap;': '\u2248',\n    'DD;': '\u2145',\n    'dd;': '\u2146',\n    deg: '\u00B0',\n    'ee;': '\u2147',\n    'eg;': '\u2A9A',\n    'el;': '\u2A99',\n    ETH: '\u00D0',\n    eth: '\u00F0',\n    'gE;': '\u2267',\n    'ge;': '\u2265',\n    'Gg;': '\u22D9',\n    'gg;': '\u226B',\n    'gl;': '\u2277',\n    'GT;': '>',\n    'Gt;': '\u226B',\n    'gt;': '>',\n    'ic;': '\u2063',\n    'ii;': '\u2148',\n    'Im;': '\u2111',\n    'in;': '\u2208',\n    'it;': '\u2062',\n    'lE;': '\u2266',\n    'le;': '\u2264',\n    'lg;': '\u2276',\n    'Ll;': '\u22D8',\n    'll;': '\u226A',\n    'LT;': '<',\n    'Lt;': '\u226A',\n    'lt;': '<',\n    'mp;': '\u2213',\n    'Mu;': '\u039C',\n    'mu;': '\u03BC',\n    'ne;': '\u2260',\n    'ni;': '\u220B',\n    not: '\u00AC',\n    'Nu;': '\u039D',\n    'nu;': '\u03BD',\n    'Or;': '\u2A54',\n    'or;': '\u2228',\n    'oS;': '\u24C8',\n    'Pi;': '\u03A0',\n    'pi;': '\u03C0',\n    'pm;': '\u00B1',\n    'Pr;': '\u2ABB',\n    'pr;': '\u227A',\n    'Re;': '\u211C',\n    REG: '\u00AE',\n    reg: '\u00AE',\n    'rx;': '\u211E',\n    'Sc;': '\u2ABC',\n    'sc;': '\u227B',\n    shy: '\u00AD',\n    uml: '\u00A8',\n    'wp;': '\u2118',\n    'wr;': '\u2240',\n    'Xi;': '\u039E',\n    'xi;': '\u03BE',\n    yen: '\u00A5',\n    'acd;': '\u223F',\n    'acE;': '\u223E\u0333',\n    'Acy;': '\u0410',\n    'acy;': '\u0430',\n    'Afr;': '\uD835\uDD04',\n    'afr;': '\uD835\uDD1E',\n    'AMP;': '&',\n    'amp;': '&',\n    'And;': '\u2A53',\n    'and;': '\u2227',\n    'ang;': '\u2220',\n    'apE;': '\u2A70',\n    'ape;': '\u224A',\n    'ast;': '*',\n    Auml: '\u00C4',\n    auml: '\u00E4',\n    'Bcy;': '\u0411',\n    'bcy;': '\u0431',\n    'Bfr;': '\uD835\uDD05',\n    'bfr;': '\uD835\uDD1F',\n    'bne;': '=\u20E5',\n    'bot;': '\u22A5',\n    'Cap;': '\u22D2',\n    'cap;': '\u2229',\n    cent: '\u00A2',\n    'Cfr;': '\u212D',\n    'cfr;': '\uD835\uDD20',\n    'Chi;': '\u03A7',\n    'chi;': '\u03C7',\n    'cir;': '\u25CB',\n    COPY: '\u00A9',\n    copy: '\u00A9',\n    'Cup;': '\u22D3',\n    'cup;': '\u222A',\n    'Dcy;': '\u0414',\n    'dcy;': '\u0434',\n    'deg;': '\u00B0',\n    'Del;': '\u2207',\n    'Dfr;': '\uD835\uDD07',\n    'dfr;': '\uD835\uDD21',\n    'die;': '\u00A8',\n    'div;': '\u00F7',\n    'Dot;': '\u00A8',\n    'dot;': '\u02D9',\n    'Ecy;': '\u042D',\n    'ecy;': '\u044D',\n    'Efr;': '\uD835\uDD08',\n    'efr;': '\uD835\uDD22',\n    'egs;': '\u2A96',\n    'ell;': '\u2113',\n    'els;': '\u2A95',\n    'ENG;': '\u014A',\n    'eng;': '\u014B',\n    'Eta;': '\u0397',\n    'eta;': '\u03B7',\n    'ETH;': '\u00D0',\n    'eth;': '\u00F0',\n    Euml: '\u00CB',\n    euml: '\u00EB',\n    'Fcy;': '\u0424',\n    'fcy;': '\u0444',\n    'Ffr;': '\uD835\uDD09',\n    'ffr;': '\uD835\uDD23',\n    'gap;': '\u2A86',\n    'Gcy;': '\u0413',\n    'gcy;': '\u0433',\n    'gEl;': '\u2A8C',\n    'gel;': '\u22DB',\n    'geq;': '\u2265',\n    'ges;': '\u2A7E',\n    'Gfr;': '\uD835\uDD0A',\n    'gfr;': '\uD835\uDD24',\n    'ggg;': '\u22D9',\n    'gla;': '\u2AA5',\n    'glE;': '\u2A92',\n    'glj;': '\u2AA4',\n    'gnE;': '\u2269',\n    'gne;': '\u2A88',\n    'Hat;': '^',\n    'Hfr;': '\u210C',\n    'hfr;': '\uD835\uDD25',\n    'Icy;': '\u0418',\n    'icy;': '\u0438',\n    'iff;': '\u21D4',\n    'Ifr;': '\u2111',\n    'ifr;': '\uD835\uDD26',\n    'Int;': '\u222C',\n    'int;': '\u222B',\n    Iuml: '\u00CF',\n    iuml: '\u00EF',\n    'Jcy;': '\u0419',\n    'jcy;': '\u0439',\n    'Jfr;': '\uD835\uDD0D',\n    'jfr;': '\uD835\uDD27',\n    'Kcy;': '\u041A',\n    'kcy;': '\u043A',\n    'Kfr;': '\uD835\uDD0E',\n    'kfr;': '\uD835\uDD28',\n    'lap;': '\u2A85',\n    'lat;': '\u2AAB',\n    'Lcy;': '\u041B',\n    'lcy;': '\u043B',\n    'lEg;': '\u2A8B',\n    'leg;': '\u22DA',\n    'leq;': '\u2264',\n    'les;': '\u2A7D',\n    'Lfr;': '\uD835\uDD0F',\n    'lfr;': '\uD835\uDD29',\n    'lgE;': '\u2A91',\n    'lnE;': '\u2268',\n    'lne;': '\u2A87',\n    'loz;': '\u25CA',\n    'lrm;': '\u200E',\n    'Lsh;': '\u21B0',\n    'lsh;': '\u21B0',\n    macr: '\u00AF',\n    'Map;': '\u2905',\n    'map;': '\u21A6',\n    'Mcy;': '\u041C',\n    'mcy;': '\u043C',\n    'Mfr;': '\uD835\uDD10',\n    'mfr;': '\uD835\uDD2A',\n    'mho;': '\u2127',\n    'mid;': '\u2223',\n    'nap;': '\u2249',\n    nbsp: ' ',\n    'Ncy;': '\u041D',\n    'ncy;': '\u043D',\n    'Nfr;': '\uD835\uDD11',\n    'nfr;': '\uD835\uDD2B',\n    'ngE;': '\u2267\u0338',\n    'nge;': '\u2271',\n    'nGg;': '\u22D9\u0338',\n    'nGt;': '\u226B\u20D2',\n    'ngt;': '\u226F',\n    'nis;': '\u22FC',\n    'niv;': '\u220B',\n    'nlE;': '\u2266\u0338',\n    'nle;': '\u2270',\n    'nLl;': '\u22D8\u0338',\n    'nLt;': '\u226A\u20D2',\n    'nlt;': '\u226E',\n    'Not;': '\u2AEC',\n    'not;': '\u00AC',\n    'npr;': '\u2280',\n    'nsc;': '\u2281',\n    'num;': '#',\n    'Ocy;': '\u041E',\n    'ocy;': '\u043E',\n    'Ofr;': '\uD835\uDD12',\n    'ofr;': '\uD835\uDD2C',\n    'ogt;': '\u29C1',\n    'ohm;': '\u03A9',\n    'olt;': '\u29C0',\n    'ord;': '\u2A5D',\n    ordf: '\u00AA',\n    ordm: '\u00BA',\n    'orv;': '\u2A5B',\n    Ouml: '\u00D6',\n    ouml: '\u00F6',\n    'par;': '\u2225',\n    para: '\u00B6',\n    'Pcy;': '\u041F',\n    'pcy;': '\u043F',\n    'Pfr;': '\uD835\uDD13',\n    'pfr;': '\uD835\uDD2D',\n    'Phi;': '\u03A6',\n    'phi;': '\u03C6',\n    'piv;': '\u03D6',\n    'prE;': '\u2AB3',\n    'pre;': '\u2AAF',\n    'Psi;': '\u03A8',\n    'psi;': '\u03C8',\n    'Qfr;': '\uD835\uDD14',\n    'qfr;': '\uD835\uDD2E',\n    QUOT: '\"',\n    quot: '\"',\n    'Rcy;': '\u0420',\n    'rcy;': '\u0440',\n    'REG;': '\u00AE',\n    'reg;': '\u00AE',\n    'Rfr;': '\u211C',\n    'rfr;': '\uD835\uDD2F',\n    'Rho;': '\u03A1',\n    'rho;': '\u03C1',\n    'rlm;': '\u200F',\n    'Rsh;': '\u21B1',\n    'rsh;': '\u21B1',\n    'scE;': '\u2AB4',\n    'sce;': '\u2AB0',\n    'Scy;': '\u0421',\n    'scy;': '\u0441',\n    sect: '\u00A7',\n    'Sfr;': '\uD835\uDD16',\n    'sfr;': '\uD835\uDD30',\n    'shy;': '\u00AD',\n    'sim;': '\u223C',\n    'smt;': '\u2AAA',\n    'sol;': '/',\n    'squ;': '\u25A1',\n    'Sub;': '\u22D0',\n    'sub;': '\u2282',\n    'Sum;': '\u2211',\n    'sum;': '\u2211',\n    'Sup;': '\u22D1',\n    'sup;': '\u2283',\n    sup1: '\u00B9',\n    sup2: '\u00B2',\n    sup3: '\u00B3',\n    'Tab;': '\\t',\n    'Tau;': '\u03A4',\n    'tau;': '\u03C4',\n    'Tcy;': '\u0422',\n    'tcy;': '\u0442',\n    'Tfr;': '\uD835\uDD17',\n    'tfr;': '\uD835\uDD31',\n    'top;': '\u22A4',\n    'Ucy;': '\u0423',\n    'ucy;': '\u0443',\n    'Ufr;': '\uD835\uDD18',\n    'ufr;': '\uD835\uDD32',\n    'uml;': '\u00A8',\n    Uuml: '\u00DC',\n    uuml: '\u00FC',\n    'Vcy;': '\u0412',\n    'vcy;': '\u0432',\n    'Vee;': '\u22C1',\n    'vee;': '\u2228',\n    'Vfr;': '\uD835\uDD19',\n    'vfr;': '\uD835\uDD33',\n    'Wfr;': '\uD835\uDD1A',\n    'wfr;': '\uD835\uDD34',\n    'Xfr;': '\uD835\uDD1B',\n    'xfr;': '\uD835\uDD35',\n    'Ycy;': '\u042B',\n    'ycy;': '\u044B',\n    'yen;': '\u00A5',\n    'Yfr;': '\uD835\uDD1C',\n    'yfr;': '\uD835\uDD36',\n    yuml: '\u00FF',\n    'Zcy;': '\u0417',\n    'zcy;': '\u0437',\n    'Zfr;': '\u2128',\n    'zfr;': '\uD835\uDD37',\n    'zwj;': '\u200D',\n    Acirc: '\u00C2',\n    acirc: '\u00E2',\n    acute: '\u00B4',\n    AElig: '\u00C6',\n    aelig: '\u00E6',\n    'andd;': '\u2A5C',\n    'andv;': '\u2A5A',\n    'ange;': '\u29A4',\n    'Aopf;': '\uD835\uDD38',\n    'aopf;': '\uD835\uDD52',\n    'apid;': '\u224B',\n    'apos;': \"'\",\n    Aring: '\u00C5',\n    aring: '\u00E5',\n    'Ascr;': '\uD835\uDC9C',\n    'ascr;': '\uD835\uDCB6',\n    'Auml;': '\u00C4',\n    'auml;': '\u00E4',\n    'Barv;': '\u2AE7',\n    'bbrk;': '\u23B5',\n    'Beta;': '\u0392',\n    'beta;': '\u03B2',\n    'beth;': '\u2136',\n    'bNot;': '\u2AED',\n    'bnot;': '\u2310',\n    'Bopf;': '\uD835\uDD39',\n    'bopf;': '\uD835\uDD53',\n    'boxH;': '\u2550',\n    'boxh;': '\u2500',\n    'boxV;': '\u2551',\n    'boxv;': '\u2502',\n    'Bscr;': '\u212C',\n    'bscr;': '\uD835\uDCB7',\n    'bsim;': '\u223D',\n    'bsol;': '\\\\',\n    'bull;': '\u2022',\n    'bump;': '\u224E',\n    'caps;': '\u2229\uFE00',\n    'Cdot;': '\u010A',\n    'cdot;': '\u010B',\n    cedil: '\u00B8',\n    'cent;': '\u00A2',\n    'CHcy;': '\u0427',\n    'chcy;': '\u0447',\n    'circ;': '\u02C6',\n    'cirE;': '\u29C3',\n    'cire;': '\u2257',\n    'comp;': '\u2201',\n    'cong;': '\u2245',\n    'Copf;': '\u2102',\n    'copf;': '\uD835\uDD54',\n    'COPY;': '\u00A9',\n    'copy;': '\u00A9',\n    'Cscr;': '\uD835\uDC9E',\n    'cscr;': '\uD835\uDCB8',\n    'csub;': '\u2ACF',\n    'csup;': '\u2AD0',\n    'cups;': '\u222A\uFE00',\n    'Darr;': '\u21A1',\n    'dArr;': '\u21D3',\n    'darr;': '\u2193',\n    'dash;': '\u2010',\n    'dHar;': '\u2965',\n    'diam;': '\u22C4',\n    'DJcy;': '\u0402',\n    'djcy;': '\u0452',\n    'Dopf;': '\uD835\uDD3B',\n    'dopf;': '\uD835\uDD55',\n    'Dscr;': '\uD835\uDC9F',\n    'dscr;': '\uD835\uDCB9',\n    'DScy;': '\u0405',\n    'dscy;': '\u0455',\n    'dsol;': '\u29F6',\n    'dtri;': '\u25BF',\n    'DZcy;': '\u040F',\n    'dzcy;': '\u045F',\n    'ecir;': '\u2256',\n    Ecirc: '\u00CA',\n    ecirc: '\u00EA',\n    'Edot;': '\u0116',\n    'eDot;': '\u2251',\n    'edot;': '\u0117',\n    'emsp;': '\u2003',\n    'ensp;': '\u2002',\n    'Eopf;': '\uD835\uDD3C',\n    'eopf;': '\uD835\uDD56',\n    'epar;': '\u22D5',\n    'epsi;': '\u03B5',\n    'Escr;': '\u2130',\n    'escr;': '\u212F',\n    'Esim;': '\u2A73',\n    'esim;': '\u2242',\n    'Euml;': '\u00CB',\n    'euml;': '\u00EB',\n    'euro;': '\u20AC',\n    'excl;': '!',\n    'flat;': '\u266D',\n    'fnof;': '\u0192',\n    'Fopf;': '\uD835\uDD3D',\n    'fopf;': '\uD835\uDD57',\n    'fork;': '\u22D4',\n    'Fscr;': '\u2131',\n    'fscr;': '\uD835\uDCBB',\n    'Gdot;': '\u0120',\n    'gdot;': '\u0121',\n    'geqq;': '\u2267',\n    'gesl;': '\u22DB\uFE00',\n    'GJcy;': '\u0403',\n    'gjcy;': '\u0453',\n    'gnap;': '\u2A8A',\n    'gneq;': '\u2A88',\n    'Gopf;': '\uD835\uDD3E',\n    'gopf;': '\uD835\uDD58',\n    'Gscr;': '\uD835\uDCA2',\n    'gscr;': '\u210A',\n    'gsim;': '\u2273',\n    'gtcc;': '\u2AA7',\n    'gvnE;': '\u2269\uFE00',\n    'half;': '\u00BD',\n    'hArr;': '\u21D4',\n    'harr;': '\u2194',\n    'hbar;': '\u210F',\n    'Hopf;': '\u210D',\n    'hopf;': '\uD835\uDD59',\n    'Hscr;': '\u210B',\n    'hscr;': '\uD835\uDCBD',\n    Icirc: '\u00CE',\n    icirc: '\u00EE',\n    'Idot;': '\u0130',\n    'IEcy;': '\u0415',\n    'iecy;': '\u0435',\n    iexcl: '\u00A1',\n    'imof;': '\u22B7',\n    'IOcy;': '\u0401',\n    'iocy;': '\u0451',\n    'Iopf;': '\uD835\uDD40',\n    'iopf;': '\uD835\uDD5A',\n    'Iota;': '\u0399',\n    'iota;': '\u03B9',\n    'Iscr;': '\u2110',\n    'iscr;': '\uD835\uDCBE',\n    'isin;': '\u2208',\n    'Iuml;': '\u00CF',\n    'iuml;': '\u00EF',\n    'Jopf;': '\uD835\uDD41',\n    'jopf;': '\uD835\uDD5B',\n    'Jscr;': '\uD835\uDCA5',\n    'jscr;': '\uD835\uDCBF',\n    'KHcy;': '\u0425',\n    'khcy;': '\u0445',\n    'KJcy;': '\u040C',\n    'kjcy;': '\u045C',\n    'Kopf;': '\uD835\uDD42',\n    'kopf;': '\uD835\uDD5C',\n    'Kscr;': '\uD835\uDCA6',\n    'kscr;': '\uD835\uDCC0',\n    'Lang;': '\u27EA',\n    'lang;': '\u27E8',\n    laquo: '\u00AB',\n    'Larr;': '\u219E',\n    'lArr;': '\u21D0',\n    'larr;': '\u2190',\n    'late;': '\u2AAD',\n    'lcub;': '{',\n    'ldca;': '\u2936',\n    'ldsh;': '\u21B2',\n    'leqq;': '\u2266',\n    'lesg;': '\u22DA\uFE00',\n    'lHar;': '\u2962',\n    'LJcy;': '\u0409',\n    'ljcy;': '\u0459',\n    'lnap;': '\u2A89',\n    'lneq;': '\u2A87',\n    'Lopf;': '\uD835\uDD43',\n    'lopf;': '\uD835\uDD5D',\n    'lozf;': '\u29EB',\n    'lpar;': '(',\n    'Lscr;': '\u2112',\n    'lscr;': '\uD835\uDCC1',\n    'lsim;': '\u2272',\n    'lsqb;': '[',\n    'ltcc;': '\u2AA6',\n    'ltri;': '\u25C3',\n    'lvnE;': '\u2268\uFE00',\n    'macr;': '\u00AF',\n    'male;': '\u2642',\n    'malt;': '\u2720',\n    micro: '\u00B5',\n    'mlcp;': '\u2ADB',\n    'mldr;': '\u2026',\n    'Mopf;': '\uD835\uDD44',\n    'mopf;': '\uD835\uDD5E',\n    'Mscr;': '\u2133',\n    'mscr;': '\uD835\uDCC2',\n    'nang;': '\u2220\u20D2',\n    'napE;': '\u2A70\u0338',\n    'nbsp;': ' ',\n    'ncap;': '\u2A43',\n    'ncup;': '\u2A42',\n    'ngeq;': '\u2271',\n    'nges;': '\u2A7E\u0338',\n    'ngtr;': '\u226F',\n    'nGtv;': '\u226B\u0338',\n    'nisd;': '\u22FA',\n    'NJcy;': '\u040A',\n    'njcy;': '\u045A',\n    'nldr;': '\u2025',\n    'nleq;': '\u2270',\n    'nles;': '\u2A7D\u0338',\n    'nLtv;': '\u226A\u0338',\n    'nmid;': '\u2224',\n    'Nopf;': '\u2115',\n    'nopf;': '\uD835\uDD5F',\n    'npar;': '\u2226',\n    'npre;': '\u2AAF\u0338',\n    'nsce;': '\u2AB0\u0338',\n    'Nscr;': '\uD835\uDCA9',\n    'nscr;': '\uD835\uDCC3',\n    'nsim;': '\u2241',\n    'nsub;': '\u2284',\n    'nsup;': '\u2285',\n    'ntgl;': '\u2279',\n    'ntlg;': '\u2278',\n    'nvap;': '\u224D\u20D2',\n    'nvge;': '\u2265\u20D2',\n    'nvgt;': '>\u20D2',\n    'nvle;': '\u2264\u20D2',\n    'nvlt;': '<\u20D2',\n    'oast;': '\u229B',\n    'ocir;': '\u229A',\n    Ocirc: '\u00D4',\n    ocirc: '\u00F4',\n    'odiv;': '\u2A38',\n    'odot;': '\u2299',\n    'ogon;': '\u02DB',\n    'oint;': '\u222E',\n    'omid;': '\u29B6',\n    'Oopf;': '\uD835\uDD46',\n    'oopf;': '\uD835\uDD60',\n    'opar;': '\u29B7',\n    'ordf;': '\u00AA',\n    'ordm;': '\u00BA',\n    'oror;': '\u2A56',\n    'Oscr;': '\uD835\uDCAA',\n    'oscr;': '\u2134',\n    'osol;': '\u2298',\n    'Ouml;': '\u00D6',\n    'ouml;': '\u00F6',\n    'para;': '\u00B6',\n    'part;': '\u2202',\n    'perp;': '\u22A5',\n    'phiv;': '\u03D5',\n    'plus;': '+',\n    'Popf;': '\u2119',\n    'popf;': '\uD835\uDD61',\n    pound: '\u00A3',\n    'prap;': '\u2AB7',\n    'prec;': '\u227A',\n    'prnE;': '\u2AB5',\n    'prod;': '\u220F',\n    'prop;': '\u221D',\n    'Pscr;': '\uD835\uDCAB',\n    'pscr;': '\uD835\uDCC5',\n    'qint;': '\u2A0C',\n    'Qopf;': '\u211A',\n    'qopf;': '\uD835\uDD62',\n    'Qscr;': '\uD835\uDCAC',\n    'qscr;': '\uD835\uDCC6',\n    'QUOT;': '\"',\n    'quot;': '\"',\n    'race;': '\u223D\u0331',\n    'Rang;': '\u27EB',\n    'rang;': '\u27E9',\n    raquo: '\u00BB',\n    'Rarr;': '\u21A0',\n    'rArr;': '\u21D2',\n    'rarr;': '\u2192',\n    'rcub;': '}',\n    'rdca;': '\u2937',\n    'rdsh;': '\u21B3',\n    'real;': '\u211C',\n    'rect;': '\u25AD',\n    'rHar;': '\u2964',\n    'rhov;': '\u03F1',\n    'ring;': '\u02DA',\n    'Ropf;': '\u211D',\n    'ropf;': '\uD835\uDD63',\n    'rpar;': ')',\n    'Rscr;': '\u211B',\n    'rscr;': '\uD835\uDCC7',\n    'rsqb;': ']',\n    'rtri;': '\u25B9',\n    'scap;': '\u2AB8',\n    'scnE;': '\u2AB6',\n    'sdot;': '\u22C5',\n    'sect;': '\u00A7',\n    'semi;': ';',\n    'sext;': '\u2736',\n    'SHcy;': '\u0428',\n    'shcy;': '\u0448',\n    'sime;': '\u2243',\n    'simg;': '\u2A9E',\n    'siml;': '\u2A9D',\n    'smid;': '\u2223',\n    'smte;': '\u2AAC',\n    'solb;': '\u29C4',\n    'Sopf;': '\uD835\uDD4A',\n    'sopf;': '\uD835\uDD64',\n    'spar;': '\u2225',\n    'Sqrt;': '\u221A',\n    'squf;': '\u25AA',\n    'Sscr;': '\uD835\uDCAE',\n    'sscr;': '\uD835\uDCC8',\n    'Star;': '\u22C6',\n    'star;': '\u2606',\n    'subE;': '\u2AC5',\n    'sube;': '\u2286',\n    'succ;': '\u227B',\n    'sung;': '\u266A',\n    'sup1;': '\u00B9',\n    'sup2;': '\u00B2',\n    'sup3;': '\u00B3',\n    'supE;': '\u2AC6',\n    'supe;': '\u2287',\n    szlig: '\u00DF',\n    'tbrk;': '\u23B4',\n    'tdot;': '\u20DB',\n    THORN: '\u00DE',\n    thorn: '\u00FE',\n    times: '\u00D7',\n    'tint;': '\u222D',\n    'toea;': '\u2928',\n    'Topf;': '\uD835\uDD4B',\n    'topf;': '\uD835\uDD65',\n    'tosa;': '\u2929',\n    'trie;': '\u225C',\n    'Tscr;': '\uD835\uDCAF',\n    'tscr;': '\uD835\uDCC9',\n    'TScy;': '\u0426',\n    'tscy;': '\u0446',\n    'Uarr;': '\u219F',\n    'uArr;': '\u21D1',\n    'uarr;': '\u2191',\n    Ucirc: '\u00DB',\n    ucirc: '\u00FB',\n    'uHar;': '\u2963',\n    'Uopf;': '\uD835\uDD4C',\n    'uopf;': '\uD835\uDD66',\n    'Upsi;': '\u03D2',\n    'upsi;': '\u03C5',\n    'Uscr;': '\uD835\uDCB0',\n    'uscr;': '\uD835\uDCCA',\n    'utri;': '\u25B5',\n    'Uuml;': '\u00DC',\n    'uuml;': '\u00FC',\n    'vArr;': '\u21D5',\n    'varr;': '\u2195',\n    'Vbar;': '\u2AEB',\n    'vBar;': '\u2AE8',\n    'Vert;': '\u2016',\n    'vert;': '|',\n    'Vopf;': '\uD835\uDD4D',\n    'vopf;': '\uD835\uDD67',\n    'Vscr;': '\uD835\uDCB1',\n    'vscr;': '\uD835\uDCCB',\n    'Wopf;': '\uD835\uDD4E',\n    'wopf;': '\uD835\uDD68',\n    'Wscr;': '\uD835\uDCB2',\n    'wscr;': '\uD835\uDCCC',\n    'xcap;': '\u22C2',\n    'xcup;': '\u22C3',\n    'xmap;': '\u27FC',\n    'xnis;': '\u22FB',\n    'Xopf;': '\uD835\uDD4F',\n    'xopf;': '\uD835\uDD69',\n    'Xscr;': '\uD835\uDCB3',\n    'xscr;': '\uD835\uDCCD',\n    'xvee;': '\u22C1',\n    'YAcy;': '\u042F',\n    'yacy;': '\u044F',\n    'YIcy;': '\u0407',\n    'yicy;': '\u0457',\n    'Yopf;': '\uD835\uDD50',\n    'yopf;': '\uD835\uDD6A',\n    'Yscr;': '\uD835\uDCB4',\n    'yscr;': '\uD835\uDCCE',\n    'YUcy;': '\u042E',\n    'yucy;': '\u044E',\n    'Yuml;': '\u0178',\n    'yuml;': '\u00FF',\n    'Zdot;': '\u017B',\n    'zdot;': '\u017C',\n    'Zeta;': '\u0396',\n    'zeta;': '\u03B6',\n    'ZHcy;': '\u0416',\n    'zhcy;': '\u0436',\n    'Zopf;': '\u2124',\n    'zopf;': '\uD835\uDD6B',\n    'Zscr;': '\uD835\uDCB5',\n    'zscr;': '\uD835\uDCCF',\n    'zwnj;': '\u200C',\n    Aacute: '\u00C1',\n    aacute: '\u00E1',\n    'Acirc;': '\u00C2',\n    'acirc;': '\u00E2',\n    'acute;': '\u00B4',\n    'AElig;': '\u00C6',\n    'aelig;': '\u00E6',\n    Agrave: '\u00C0',\n    agrave: '\u00E0',\n    'aleph;': '\u2135',\n    'Alpha;': '\u0391',\n    'alpha;': '\u03B1',\n    'Amacr;': '\u0100',\n    'amacr;': '\u0101',\n    'amalg;': '\u2A3F',\n    'angle;': '\u2220',\n    'angrt;': '\u221F',\n    'angst;': '\u00C5',\n    'Aogon;': '\u0104',\n    'aogon;': '\u0105',\n    'Aring;': '\u00C5',\n    'aring;': '\u00E5',\n    'asymp;': '\u2248',\n    Atilde: '\u00C3',\n    atilde: '\u00E3',\n    'awint;': '\u2A11',\n    'bcong;': '\u224C',\n    'bdquo;': '\u201E',\n    'bepsi;': '\u03F6',\n    'blank;': '\u2423',\n    'blk12;': '\u2592',\n    'blk14;': '\u2591',\n    'blk34;': '\u2593',\n    'block;': '\u2588',\n    'boxDL;': '\u2557',\n    'boxDl;': '\u2556',\n    'boxdL;': '\u2555',\n    'boxdl;': '\u2510',\n    'boxDR;': '\u2554',\n    'boxDr;': '\u2553',\n    'boxdR;': '\u2552',\n    'boxdr;': '\u250C',\n    'boxHD;': '\u2566',\n    'boxHd;': '\u2564',\n    'boxhD;': '\u2565',\n    'boxhd;': '\u252C',\n    'boxHU;': '\u2569',\n    'boxHu;': '\u2567',\n    'boxhU;': '\u2568',\n    'boxhu;': '\u2534',\n    'boxUL;': '\u255D',\n    'boxUl;': '\u255C',\n    'boxuL;': '\u255B',\n    'boxul;': '\u2518',\n    'boxUR;': '\u255A',\n    'boxUr;': '\u2559',\n    'boxuR;': '\u2558',\n    'boxur;': '\u2514',\n    'boxVH;': '\u256C',\n    'boxVh;': '\u256B',\n    'boxvH;': '\u256A',\n    'boxvh;': '\u253C',\n    'boxVL;': '\u2563',\n    'boxVl;': '\u2562',\n    'boxvL;': '\u2561',\n    'boxvl;': '\u2524',\n    'boxVR;': '\u2560',\n    'boxVr;': '\u255F',\n    'boxvR;': '\u255E',\n    'boxvr;': '\u251C',\n    'Breve;': '\u02D8',\n    'breve;': '\u02D8',\n    brvbar: '\u00A6',\n    'bsemi;': '\u204F',\n    'bsime;': '\u22CD',\n    'bsolb;': '\u29C5',\n    'bumpE;': '\u2AAE',\n    'bumpe;': '\u224F',\n    'caret;': '\u2041',\n    'caron;': '\u02C7',\n    'ccaps;': '\u2A4D',\n    Ccedil: '\u00C7',\n    ccedil: '\u00E7',\n    'Ccirc;': '\u0108',\n    'ccirc;': '\u0109',\n    'ccups;': '\u2A4C',\n    'cedil;': '\u00B8',\n    'check;': '\u2713',\n    'clubs;': '\u2663',\n    'Colon;': '\u2237',\n    'colon;': ':',\n    'comma;': ',',\n    'crarr;': '\u21B5',\n    'Cross;': '\u2A2F',\n    'cross;': '\u2717',\n    'csube;': '\u2AD1',\n    'csupe;': '\u2AD2',\n    'ctdot;': '\u22EF',\n    'cuepr;': '\u22DE',\n    'cuesc;': '\u22DF',\n    'cupor;': '\u2A45',\n    curren: '\u00A4',\n    'cuvee;': '\u22CE',\n    'cuwed;': '\u22CF',\n    'cwint;': '\u2231',\n    'Dashv;': '\u2AE4',\n    'dashv;': '\u22A3',\n    'dblac;': '\u02DD',\n    'ddarr;': '\u21CA',\n    'Delta;': '\u0394',\n    'delta;': '\u03B4',\n    'dharl;': '\u21C3',\n    'dharr;': '\u21C2',\n    'diams;': '\u2666',\n    'disin;': '\u22F2',\n    divide: '\u00F7',\n    'doteq;': '\u2250',\n    'dtdot;': '\u22F1',\n    'dtrif;': '\u25BE',\n    'duarr;': '\u21F5',\n    'duhar;': '\u296F',\n    Eacute: '\u00C9',\n    eacute: '\u00E9',\n    'Ecirc;': '\u00CA',\n    'ecirc;': '\u00EA',\n    'eDDot;': '\u2A77',\n    'efDot;': '\u2252',\n    Egrave: '\u00C8',\n    egrave: '\u00E8',\n    'Emacr;': '\u0112',\n    'emacr;': '\u0113',\n    'empty;': '\u2205',\n    'Eogon;': '\u0118',\n    'eogon;': '\u0119',\n    'eplus;': '\u2A71',\n    'epsiv;': '\u03F5',\n    'eqsim;': '\u2242',\n    'Equal;': '\u2A75',\n    'equiv;': '\u2261',\n    'erarr;': '\u2971',\n    'erDot;': '\u2253',\n    'esdot;': '\u2250',\n    'exist;': '\u2203',\n    'fflig;': '\uFB00',\n    'filig;': '\uFB01',\n    'fjlig;': 'fj',\n    'fllig;': '\uFB02',\n    'fltns;': '\u25B1',\n    'forkv;': '\u2AD9',\n    frac12: '\u00BD',\n    frac14: '\u00BC',\n    frac34: '\u00BE',\n    'frasl;': '\u2044',\n    'frown;': '\u2322',\n    'Gamma;': '\u0393',\n    'gamma;': '\u03B3',\n    'Gcirc;': '\u011C',\n    'gcirc;': '\u011D',\n    'gescc;': '\u2AA9',\n    'gimel;': '\u2137',\n    'gneqq;': '\u2269',\n    'gnsim;': '\u22E7',\n    'grave;': '`',\n    'gsime;': '\u2A8E',\n    'gsiml;': '\u2A90',\n    'gtcir;': '\u2A7A',\n    'gtdot;': '\u22D7',\n    'Hacek;': '\u02C7',\n    'harrw;': '\u21AD',\n    'Hcirc;': '\u0124',\n    'hcirc;': '\u0125',\n    'hoarr;': '\u21FF',\n    Iacute: '\u00CD',\n    iacute: '\u00ED',\n    'Icirc;': '\u00CE',\n    'icirc;': '\u00EE',\n    'iexcl;': '\u00A1',\n    Igrave: '\u00CC',\n    igrave: '\u00EC',\n    'iiint;': '\u222D',\n    'iiota;': '\u2129',\n    'IJlig;': '\u0132',\n    'ijlig;': '\u0133',\n    'Imacr;': '\u012A',\n    'imacr;': '\u012B',\n    'image;': '\u2111',\n    'imath;': '\u0131',\n    'imped;': '\u01B5',\n    'infin;': '\u221E',\n    'Iogon;': '\u012E',\n    'iogon;': '\u012F',\n    'iprod;': '\u2A3C',\n    iquest: '\u00BF',\n    'isinE;': '\u22F9',\n    'isins;': '\u22F4',\n    'isinv;': '\u2208',\n    'Iukcy;': '\u0406',\n    'iukcy;': '\u0456',\n    'Jcirc;': '\u0134',\n    'jcirc;': '\u0135',\n    'jmath;': '\u0237',\n    'Jukcy;': '\u0404',\n    'jukcy;': '\u0454',\n    'Kappa;': '\u039A',\n    'kappa;': '\u03BA',\n    'lAarr;': '\u21DA',\n    'langd;': '\u2991',\n    'laquo;': '\u00AB',\n    'larrb;': '\u21E4',\n    'lates;': '\u2AAD\uFE00',\n    'lBarr;': '\u290E',\n    'lbarr;': '\u290C',\n    'lbbrk;': '\u2772',\n    'lbrke;': '\u298B',\n    'lceil;': '\u2308',\n    'ldquo;': '\u201C',\n    'lescc;': '\u2AA8',\n    'lhard;': '\u21BD',\n    'lharu;': '\u21BC',\n    'lhblk;': '\u2584',\n    'llarr;': '\u21C7',\n    'lltri;': '\u25FA',\n    'lneqq;': '\u2268',\n    'lnsim;': '\u22E6',\n    'loang;': '\u27EC',\n    'loarr;': '\u21FD',\n    'lobrk;': '\u27E6',\n    'lopar;': '\u2985',\n    'lrarr;': '\u21C6',\n    'lrhar;': '\u21CB',\n    'lrtri;': '\u22BF',\n    'lsime;': '\u2A8D',\n    'lsimg;': '\u2A8F',\n    'lsquo;': '\u2018',\n    'ltcir;': '\u2A79',\n    'ltdot;': '\u22D6',\n    'ltrie;': '\u22B4',\n    'ltrif;': '\u25C2',\n    'mdash;': '\u2014',\n    'mDDot;': '\u223A',\n    'micro;': '\u00B5',\n    middot: '\u00B7',\n    'minus;': '\u2212',\n    'mumap;': '\u22B8',\n    'nabla;': '\u2207',\n    'napid;': '\u224B\u0338',\n    'napos;': '\u0149',\n    'natur;': '\u266E',\n    'nbump;': '\u224E\u0338',\n    'ncong;': '\u2247',\n    'ndash;': '\u2013',\n    'neArr;': '\u21D7',\n    'nearr;': '\u2197',\n    'nedot;': '\u2250\u0338',\n    'nesim;': '\u2242\u0338',\n    'ngeqq;': '\u2267\u0338',\n    'ngsim;': '\u2275',\n    'nhArr;': '\u21CE',\n    'nharr;': '\u21AE',\n    'nhpar;': '\u2AF2',\n    'nlArr;': '\u21CD',\n    'nlarr;': '\u219A',\n    'nleqq;': '\u2266\u0338',\n    'nless;': '\u226E',\n    'nlsim;': '\u2274',\n    'nltri;': '\u22EA',\n    'notin;': '\u2209',\n    'notni;': '\u220C',\n    'npart;': '\u2202\u0338',\n    'nprec;': '\u2280',\n    'nrArr;': '\u21CF',\n    'nrarr;': '\u219B',\n    'nrtri;': '\u22EB',\n    'nsime;': '\u2244',\n    'nsmid;': '\u2224',\n    'nspar;': '\u2226',\n    'nsubE;': '\u2AC5\u0338',\n    'nsube;': '\u2288',\n    'nsucc;': '\u2281',\n    'nsupE;': '\u2AC6\u0338',\n    'nsupe;': '\u2289',\n    Ntilde: '\u00D1',\n    ntilde: '\u00F1',\n    'numsp;': '\u2007',\n    'nvsim;': '\u223C\u20D2',\n    'nwArr;': '\u21D6',\n    'nwarr;': '\u2196',\n    Oacute: '\u00D3',\n    oacute: '\u00F3',\n    'Ocirc;': '\u00D4',\n    'ocirc;': '\u00F4',\n    'odash;': '\u229D',\n    'OElig;': '\u0152',\n    'oelig;': '\u0153',\n    'ofcir;': '\u29BF',\n    Ograve: '\u00D2',\n    ograve: '\u00F2',\n    'ohbar;': '\u29B5',\n    'olarr;': '\u21BA',\n    'olcir;': '\u29BE',\n    'oline;': '\u203E',\n    'Omacr;': '\u014C',\n    'omacr;': '\u014D',\n    'Omega;': '\u03A9',\n    'omega;': '\u03C9',\n    'operp;': '\u29B9',\n    'oplus;': '\u2295',\n    'orarr;': '\u21BB',\n    'order;': '\u2134',\n    Oslash: '\u00D8',\n    oslash: '\u00F8',\n    Otilde: '\u00D5',\n    otilde: '\u00F5',\n    'ovbar;': '\u233D',\n    'parsl;': '\u2AFD',\n    'phone;': '\u260E',\n    'plusb;': '\u229E',\n    'pluse;': '\u2A72',\n    plusmn: '\u00B1',\n    'pound;': '\u00A3',\n    'prcue;': '\u227C',\n    'Prime;': '\u2033',\n    'prime;': '\u2032',\n    'prnap;': '\u2AB9',\n    'prsim;': '\u227E',\n    'quest;': '?',\n    'rAarr;': '\u21DB',\n    'radic;': '\u221A',\n    'rangd;': '\u2992',\n    'range;': '\u29A5',\n    'raquo;': '\u00BB',\n    'rarrb;': '\u21E5',\n    'rarrc;': '\u2933',\n    'rarrw;': '\u219D',\n    'ratio;': '\u2236',\n    'RBarr;': '\u2910',\n    'rBarr;': '\u290F',\n    'rbarr;': '\u290D',\n    'rbbrk;': '\u2773',\n    'rbrke;': '\u298C',\n    'rceil;': '\u2309',\n    'rdquo;': '\u201D',\n    'reals;': '\u211D',\n    'rhard;': '\u21C1',\n    'rharu;': '\u21C0',\n    'rlarr;': '\u21C4',\n    'rlhar;': '\u21CC',\n    'rnmid;': '\u2AEE',\n    'roang;': '\u27ED',\n    'roarr;': '\u21FE',\n    'robrk;': '\u27E7',\n    'ropar;': '\u2986',\n    'rrarr;': '\u21C9',\n    'rsquo;': '\u2019',\n    'rtrie;': '\u22B5',\n    'rtrif;': '\u25B8',\n    'sbquo;': '\u201A',\n    'sccue;': '\u227D',\n    'Scirc;': '\u015C',\n    'scirc;': '\u015D',\n    'scnap;': '\u2ABA',\n    'scsim;': '\u227F',\n    'sdotb;': '\u22A1',\n    'sdote;': '\u2A66',\n    'seArr;': '\u21D8',\n    'searr;': '\u2198',\n    'setmn;': '\u2216',\n    'sharp;': '\u266F',\n    'Sigma;': '\u03A3',\n    'sigma;': '\u03C3',\n    'simeq;': '\u2243',\n    'simgE;': '\u2AA0',\n    'simlE;': '\u2A9F',\n    'simne;': '\u2246',\n    'slarr;': '\u2190',\n    'smile;': '\u2323',\n    'smtes;': '\u2AAC\uFE00',\n    'sqcap;': '\u2293',\n    'sqcup;': '\u2294',\n    'sqsub;': '\u228F',\n    'sqsup;': '\u2290',\n    'srarr;': '\u2192',\n    'starf;': '\u2605',\n    'strns;': '\u00AF',\n    'subnE;': '\u2ACB',\n    'subne;': '\u228A',\n    'supnE;': '\u2ACC',\n    'supne;': '\u228B',\n    'swArr;': '\u21D9',\n    'swarr;': '\u2199',\n    'szlig;': '\u00DF',\n    'Theta;': '\u0398',\n    'theta;': '\u03B8',\n    'thkap;': '\u2248',\n    'THORN;': '\u00DE',\n    'thorn;': '\u00FE',\n    'Tilde;': '\u223C',\n    'tilde;': '\u02DC',\n    'times;': '\u00D7',\n    'TRADE;': '\u2122',\n    'trade;': '\u2122',\n    'trisb;': '\u29CD',\n    'TSHcy;': '\u040B',\n    'tshcy;': '\u045B',\n    'twixt;': '\u226C',\n    Uacute: '\u00DA',\n    uacute: '\u00FA',\n    'Ubrcy;': '\u040E',\n    'ubrcy;': '\u045E',\n    'Ucirc;': '\u00DB',\n    'ucirc;': '\u00FB',\n    'udarr;': '\u21C5',\n    'udhar;': '\u296E',\n    Ugrave: '\u00D9',\n    ugrave: '\u00F9',\n    'uharl;': '\u21BF',\n    'uharr;': '\u21BE',\n    'uhblk;': '\u2580',\n    'ultri;': '\u25F8',\n    'Umacr;': '\u016A',\n    'umacr;': '\u016B',\n    'Union;': '\u22C3',\n    'Uogon;': '\u0172',\n    'uogon;': '\u0173',\n    'uplus;': '\u228E',\n    'upsih;': '\u03D2',\n    'UpTee;': '\u22A5',\n    'Uring;': '\u016E',\n    'uring;': '\u016F',\n    'urtri;': '\u25F9',\n    'utdot;': '\u22F0',\n    'utrif;': '\u25B4',\n    'uuarr;': '\u21C8',\n    'varpi;': '\u03D6',\n    'vBarv;': '\u2AE9',\n    'VDash;': '\u22AB',\n    'Vdash;': '\u22A9',\n    'vDash;': '\u22A8',\n    'vdash;': '\u22A2',\n    'veeeq;': '\u225A',\n    'vltri;': '\u22B2',\n    'vnsub;': '\u2282\u20D2',\n    'vnsup;': '\u2283\u20D2',\n    'vprop;': '\u221D',\n    'vrtri;': '\u22B3',\n    'Wcirc;': '\u0174',\n    'wcirc;': '\u0175',\n    'Wedge;': '\u22C0',\n    'wedge;': '\u2227',\n    'xcirc;': '\u25EF',\n    'xdtri;': '\u25BD',\n    'xhArr;': '\u27FA',\n    'xharr;': '\u27F7',\n    'xlArr;': '\u27F8',\n    'xlarr;': '\u27F5',\n    'xodot;': '\u2A00',\n    'xrArr;': '\u27F9',\n    'xrarr;': '\u27F6',\n    'xutri;': '\u25B3',\n    Yacute: '\u00DD',\n    yacute: '\u00FD',\n    'Ycirc;': '\u0176',\n    'ycirc;': '\u0177',\n    'Aacute;': '\u00C1',\n    'aacute;': '\u00E1',\n    'Abreve;': '\u0102',\n    'abreve;': '\u0103',\n    'Agrave;': '\u00C0',\n    'agrave;': '\u00E0',\n    'andand;': '\u2A55',\n    'angmsd;': '\u2221',\n    'angsph;': '\u2222',\n    'apacir;': '\u2A6F',\n    'approx;': '\u2248',\n    'Assign;': '\u2254',\n    'Atilde;': '\u00C3',\n    'atilde;': '\u00E3',\n    'barvee;': '\u22BD',\n    'Barwed;': '\u2306',\n    'barwed;': '\u2305',\n    'becaus;': '\u2235',\n    'bernou;': '\u212C',\n    'bigcap;': '\u22C2',\n    'bigcup;': '\u22C3',\n    'bigvee;': '\u22C1',\n    'bkarow;': '\u290D',\n    'bottom;': '\u22A5',\n    'bowtie;': '\u22C8',\n    'boxbox;': '\u29C9',\n    'bprime;': '\u2035',\n    'brvbar;': '\u00A6',\n    'bullet;': '\u2022',\n    'Bumpeq;': '\u224E',\n    'bumpeq;': '\u224F',\n    'Cacute;': '\u0106',\n    'cacute;': '\u0107',\n    'capand;': '\u2A44',\n    'capcap;': '\u2A4B',\n    'capcup;': '\u2A47',\n    'capdot;': '\u2A40',\n    'Ccaron;': '\u010C',\n    'ccaron;': '\u010D',\n    'Ccedil;': '\u00C7',\n    'ccedil;': '\u00E7',\n    'circeq;': '\u2257',\n    'cirmid;': '\u2AEF',\n    'Colone;': '\u2A74',\n    'colone;': '\u2254',\n    'commat;': '@',\n    'compfn;': '\u2218',\n    'Conint;': '\u222F',\n    'conint;': '\u222E',\n    'coprod;': '\u2210',\n    'copysr;': '\u2117',\n    'cularr;': '\u21B6',\n    'CupCap;': '\u224D',\n    'cupcap;': '\u2A46',\n    'cupcup;': '\u2A4A',\n    'cupdot;': '\u228D',\n    'curarr;': '\u21B7',\n    'curren;': '\u00A4',\n    'cylcty;': '\u232D',\n    'Dagger;': '\u2021',\n    'dagger;': '\u2020',\n    'daleth;': '\u2138',\n    'Dcaron;': '\u010E',\n    'dcaron;': '\u010F',\n    'dfisht;': '\u297F',\n    'divide;': '\u00F7',\n    'divonx;': '\u22C7',\n    'dlcorn;': '\u231E',\n    'dlcrop;': '\u230D',\n    'dollar;': '$',\n    'DotDot;': '\u20DC',\n    'drcorn;': '\u231F',\n    'drcrop;': '\u230C',\n    'Dstrok;': '\u0110',\n    'dstrok;': '\u0111',\n    'Eacute;': '\u00C9',\n    'eacute;': '\u00E9',\n    'easter;': '\u2A6E',\n    'Ecaron;': '\u011A',\n    'ecaron;': '\u011B',\n    'ecolon;': '\u2255',\n    'Egrave;': '\u00C8',\n    'egrave;': '\u00E8',\n    'egsdot;': '\u2A98',\n    'elsdot;': '\u2A97',\n    'emptyv;': '\u2205',\n    'emsp13;': '\u2004',\n    'emsp14;': '\u2005',\n    'eparsl;': '\u29E3',\n    'eqcirc;': '\u2256',\n    'equals;': '=',\n    'equest;': '\u225F',\n    'Exists;': '\u2203',\n    'female;': '\u2640',\n    'ffilig;': '\uFB03',\n    'ffllig;': '\uFB04',\n    'ForAll;': '\u2200',\n    'forall;': '\u2200',\n    'frac12;': '\u00BD',\n    'frac13;': '\u2153',\n    'frac14;': '\u00BC',\n    'frac15;': '\u2155',\n    'frac16;': '\u2159',\n    'frac18;': '\u215B',\n    'frac23;': '\u2154',\n    'frac25;': '\u2156',\n    'frac34;': '\u00BE',\n    'frac35;': '\u2157',\n    'frac38;': '\u215C',\n    'frac45;': '\u2158',\n    'frac56;': '\u215A',\n    'frac58;': '\u215D',\n    'frac78;': '\u215E',\n    'gacute;': '\u01F5',\n    'Gammad;': '\u03DC',\n    'gammad;': '\u03DD',\n    'Gbreve;': '\u011E',\n    'gbreve;': '\u011F',\n    'Gcedil;': '\u0122',\n    'gesdot;': '\u2A80',\n    'gesles;': '\u2A94',\n    'gtlPar;': '\u2995',\n    'gtrarr;': '\u2978',\n    'gtrdot;': '\u22D7',\n    'gtrsim;': '\u2273',\n    'hairsp;': '\u200A',\n    'hamilt;': '\u210B',\n    'HARDcy;': '\u042A',\n    'hardcy;': '\u044A',\n    'hearts;': '\u2665',\n    'hellip;': '\u2026',\n    'hercon;': '\u22B9',\n    'homtht;': '\u223B',\n    'horbar;': '\u2015',\n    'hslash;': '\u210F',\n    'Hstrok;': '\u0126',\n    'hstrok;': '\u0127',\n    'hybull;': '\u2043',\n    'hyphen;': '\u2010',\n    'Iacute;': '\u00CD',\n    'iacute;': '\u00ED',\n    'Igrave;': '\u00CC',\n    'igrave;': '\u00EC',\n    'iiiint;': '\u2A0C',\n    'iinfin;': '\u29DC',\n    'incare;': '\u2105',\n    'inodot;': '\u0131',\n    'intcal;': '\u22BA',\n    'iquest;': '\u00BF',\n    'isinsv;': '\u22F3',\n    'Itilde;': '\u0128',\n    'itilde;': '\u0129',\n    'Jsercy;': '\u0408',\n    'jsercy;': '\u0458',\n    'kappav;': '\u03F0',\n    'Kcedil;': '\u0136',\n    'kcedil;': '\u0137',\n    'kgreen;': '\u0138',\n    'Lacute;': '\u0139',\n    'lacute;': '\u013A',\n    'lagran;': '\u2112',\n    'Lambda;': '\u039B',\n    'lambda;': '\u03BB',\n    'langle;': '\u27E8',\n    'larrfs;': '\u291D',\n    'larrhk;': '\u21A9',\n    'larrlp;': '\u21AB',\n    'larrpl;': '\u2939',\n    'larrtl;': '\u21A2',\n    'lAtail;': '\u291B',\n    'latail;': '\u2919',\n    'lbrace;': '{',\n    'lbrack;': '[',\n    'Lcaron;': '\u013D',\n    'lcaron;': '\u013E',\n    'Lcedil;': '\u013B',\n    'lcedil;': '\u013C',\n    'ldquor;': '\u201E',\n    'lesdot;': '\u2A7F',\n    'lesges;': '\u2A93',\n    'lfisht;': '\u297C',\n    'lfloor;': '\u230A',\n    'lharul;': '\u296A',\n    'llhard;': '\u296B',\n    'Lmidot;': '\u013F',\n    'lmidot;': '\u0140',\n    'lmoust;': '\u23B0',\n    'loplus;': '\u2A2D',\n    'lowast;': '\u2217',\n    'lowbar;': '_',\n    'lparlt;': '\u2993',\n    'lrhard;': '\u296D',\n    'lsaquo;': '\u2039',\n    'lsquor;': '\u201A',\n    'Lstrok;': '\u0141',\n    'lstrok;': '\u0142',\n    'lthree;': '\u22CB',\n    'ltimes;': '\u22C9',\n    'ltlarr;': '\u2976',\n    'ltrPar;': '\u2996',\n    'mapsto;': '\u21A6',\n    'marker;': '\u25AE',\n    'mcomma;': '\u2A29',\n    'midast;': '*',\n    'midcir;': '\u2AF0',\n    'middot;': '\u00B7',\n    'minusb;': '\u229F',\n    'minusd;': '\u2238',\n    'mnplus;': '\u2213',\n    'models;': '\u22A7',\n    'mstpos;': '\u223E',\n    'Nacute;': '\u0143',\n    'nacute;': '\u0144',\n    'nbumpe;': '\u224F\u0338',\n    'Ncaron;': '\u0147',\n    'ncaron;': '\u0148',\n    'Ncedil;': '\u0145',\n    'ncedil;': '\u0146',\n    'nearhk;': '\u2924',\n    'nequiv;': '\u2262',\n    'nesear;': '\u2928',\n    'nexist;': '\u2204',\n    'nltrie;': '\u22EC',\n    'notinE;': '\u22F9\u0338',\n    'nparsl;': '\u2AFD\u20E5',\n    'nprcue;': '\u22E0',\n    'nrarrc;': '\u2933\u0338',\n    'nrarrw;': '\u219D\u0338',\n    'nrtrie;': '\u22ED',\n    'nsccue;': '\u22E1',\n    'nsimeq;': '\u2244',\n    'Ntilde;': '\u00D1',\n    'ntilde;': '\u00F1',\n    'numero;': '\u2116',\n    'nVDash;': '\u22AF',\n    'nVdash;': '\u22AE',\n    'nvDash;': '\u22AD',\n    'nvdash;': '\u22AC',\n    'nvHarr;': '\u2904',\n    'nvlArr;': '\u2902',\n    'nvrArr;': '\u2903',\n    'nwarhk;': '\u2923',\n    'nwnear;': '\u2927',\n    'Oacute;': '\u00D3',\n    'oacute;': '\u00F3',\n    'Odblac;': '\u0150',\n    'odblac;': '\u0151',\n    'odsold;': '\u29BC',\n    'Ograve;': '\u00D2',\n    'ograve;': '\u00F2',\n    'ominus;': '\u2296',\n    'origof;': '\u22B6',\n    'Oslash;': '\u00D8',\n    'oslash;': '\u00F8',\n    'Otilde;': '\u00D5',\n    'otilde;': '\u00F5',\n    'Otimes;': '\u2A37',\n    'otimes;': '\u2297',\n    'parsim;': '\u2AF3',\n    'percnt;': '%',\n    'period;': '.',\n    'permil;': '\u2030',\n    'phmmat;': '\u2133',\n    'planck;': '\u210F',\n    'plankv;': '\u210F',\n    'plusdo;': '\u2214',\n    'plusdu;': '\u2A25',\n    'plusmn;': '\u00B1',\n    'preceq;': '\u2AAF',\n    'primes;': '\u2119',\n    'prnsim;': '\u22E8',\n    'propto;': '\u221D',\n    'prurel;': '\u22B0',\n    'puncsp;': '\u2008',\n    'qprime;': '\u2057',\n    'Racute;': '\u0154',\n    'racute;': '\u0155',\n    'rangle;': '\u27E9',\n    'rarrap;': '\u2975',\n    'rarrfs;': '\u291E',\n    'rarrhk;': '\u21AA',\n    'rarrlp;': '\u21AC',\n    'rarrpl;': '\u2945',\n    'Rarrtl;': '\u2916',\n    'rarrtl;': '\u21A3',\n    'rAtail;': '\u291C',\n    'ratail;': '\u291A',\n    'rbrace;': '}',\n    'rbrack;': ']',\n    'Rcaron;': '\u0158',\n    'rcaron;': '\u0159',\n    'Rcedil;': '\u0156',\n    'rcedil;': '\u0157',\n    'rdquor;': '\u201D',\n    'rfisht;': '\u297D',\n    'rfloor;': '\u230B',\n    'rharul;': '\u296C',\n    'rmoust;': '\u23B1',\n    'roplus;': '\u2A2E',\n    'rpargt;': '\u2994',\n    'rsaquo;': '\u203A',\n    'rsquor;': '\u2019',\n    'rthree;': '\u22CC',\n    'rtimes;': '\u22CA',\n    'Sacute;': '\u015A',\n    'sacute;': '\u015B',\n    'Scaron;': '\u0160',\n    'scaron;': '\u0161',\n    'Scedil;': '\u015E',\n    'scedil;': '\u015F',\n    'scnsim;': '\u22E9',\n    'searhk;': '\u2925',\n    'seswar;': '\u2929',\n    'sfrown;': '\u2322',\n    'SHCHcy;': '\u0429',\n    'shchcy;': '\u0449',\n    'sigmaf;': '\u03C2',\n    'sigmav;': '\u03C2',\n    'simdot;': '\u2A6A',\n    'smashp;': '\u2A33',\n    'SOFTcy;': '\u042C',\n    'softcy;': '\u044C',\n    'solbar;': '\u233F',\n    'spades;': '\u2660',\n    'sqcaps;': '\u2293\uFE00',\n    'sqcups;': '\u2294\uFE00',\n    'sqsube;': '\u2291',\n    'sqsupe;': '\u2292',\n    'Square;': '\u25A1',\n    'square;': '\u25A1',\n    'squarf;': '\u25AA',\n    'ssetmn;': '\u2216',\n    'ssmile;': '\u2323',\n    'sstarf;': '\u22C6',\n    'subdot;': '\u2ABD',\n    'Subset;': '\u22D0',\n    'subset;': '\u2282',\n    'subsim;': '\u2AC7',\n    'subsub;': '\u2AD5',\n    'subsup;': '\u2AD3',\n    'succeq;': '\u2AB0',\n    'supdot;': '\u2ABE',\n    'Supset;': '\u22D1',\n    'supset;': '\u2283',\n    'supsim;': '\u2AC8',\n    'supsub;': '\u2AD4',\n    'supsup;': '\u2AD6',\n    'swarhk;': '\u2926',\n    'swnwar;': '\u292A',\n    'target;': '\u2316',\n    'Tcaron;': '\u0164',\n    'tcaron;': '\u0165',\n    'Tcedil;': '\u0162',\n    'tcedil;': '\u0163',\n    'telrec;': '\u2315',\n    'there4;': '\u2234',\n    'thetav;': '\u03D1',\n    'thinsp;': '\u2009',\n    'thksim;': '\u223C',\n    'timesb;': '\u22A0',\n    'timesd;': '\u2A30',\n    'topbot;': '\u2336',\n    'topcir;': '\u2AF1',\n    'tprime;': '\u2034',\n    'tridot;': '\u25EC',\n    'Tstrok;': '\u0166',\n    'tstrok;': '\u0167',\n    'Uacute;': '\u00DA',\n    'uacute;': '\u00FA',\n    'Ubreve;': '\u016C',\n    'ubreve;': '\u016D',\n    'Udblac;': '\u0170',\n    'udblac;': '\u0171',\n    'ufisht;': '\u297E',\n    'Ugrave;': '\u00D9',\n    'ugrave;': '\u00F9',\n    'ulcorn;': '\u231C',\n    'ulcrop;': '\u230F',\n    'urcorn;': '\u231D',\n    'urcrop;': '\u230E',\n    'Utilde;': '\u0168',\n    'utilde;': '\u0169',\n    'vangrt;': '\u299C',\n    'varphi;': '\u03D5',\n    'varrho;': '\u03F1',\n    'Vdashl;': '\u2AE6',\n    'veebar;': '\u22BB',\n    'vellip;': '\u22EE',\n    'Verbar;': '\u2016',\n    'verbar;': '|',\n    'vsubnE;': '\u2ACB\uFE00',\n    'vsubne;': '\u228A\uFE00',\n    'vsupnE;': '\u2ACC\uFE00',\n    'vsupne;': '\u228B\uFE00',\n    'Vvdash;': '\u22AA',\n    'wedbar;': '\u2A5F',\n    'wedgeq;': '\u2259',\n    'weierp;': '\u2118',\n    'wreath;': '\u2240',\n    'xoplus;': '\u2A01',\n    'xotime;': '\u2A02',\n    'xsqcup;': '\u2A06',\n    'xuplus;': '\u2A04',\n    'xwedge;': '\u22C0',\n    'Yacute;': '\u00DD',\n    'yacute;': '\u00FD',\n    'Zacute;': '\u0179',\n    'zacute;': '\u017A',\n    'Zcaron;': '\u017D',\n    'zcaron;': '\u017E',\n    'zeetrf;': '\u2128',\n    'alefsym;': '\u2135',\n    'angrtvb;': '\u22BE',\n    'angzarr;': '\u237C',\n    'asympeq;': '\u224D',\n    'backsim;': '\u223D',\n    'Because;': '\u2235',\n    'because;': '\u2235',\n    'bemptyv;': '\u29B0',\n    'between;': '\u226C',\n    'bigcirc;': '\u25EF',\n    'bigodot;': '\u2A00',\n    'bigstar;': '\u2605',\n    'bnequiv;': '\u2261\u20E5',\n    'boxplus;': '\u229E',\n    'Cayleys;': '\u212D',\n    'Cconint;': '\u2230',\n    'ccupssm;': '\u2A50',\n    'Cedilla;': '\u00B8',\n    'cemptyv;': '\u29B2',\n    'cirscir;': '\u29C2',\n    'coloneq;': '\u2254',\n    'congdot;': '\u2A6D',\n    'cudarrl;': '\u2938',\n    'cudarrr;': '\u2935',\n    'cularrp;': '\u293D',\n    'curarrm;': '\u293C',\n    'dbkarow;': '\u290F',\n    'ddagger;': '\u2021',\n    'ddotseq;': '\u2A77',\n    'demptyv;': '\u29B1',\n    'Diamond;': '\u22C4',\n    'diamond;': '\u22C4',\n    'digamma;': '\u03DD',\n    'dotplus;': '\u2214',\n    'DownTee;': '\u22A4',\n    'dwangle;': '\u29A6',\n    'Element;': '\u2208',\n    'Epsilon;': '\u0395',\n    'epsilon;': '\u03B5',\n    'eqcolon;': '\u2255',\n    'equivDD;': '\u2A78',\n    'gesdoto;': '\u2A82',\n    'gtquest;': '\u2A7C',\n    'gtrless;': '\u2277',\n    'harrcir;': '\u2948',\n    'Implies;': '\u21D2',\n    'intprod;': '\u2A3C',\n    'isindot;': '\u22F5',\n    'larrbfs;': '\u291F',\n    'larrsim;': '\u2973',\n    'lbrksld;': '\u298F',\n    'lbrkslu;': '\u298D',\n    'ldrdhar;': '\u2967',\n    'LeftTee;': '\u22A3',\n    'lesdoto;': '\u2A81',\n    'lessdot;': '\u22D6',\n    'lessgtr;': '\u2276',\n    'lesssim;': '\u2272',\n    'lotimes;': '\u2A34',\n    'lozenge;': '\u25CA',\n    'ltquest;': '\u2A7B',\n    'luruhar;': '\u2966',\n    'maltese;': '\u2720',\n    'minusdu;': '\u2A2A',\n    'napprox;': '\u2249',\n    'natural;': '\u266E',\n    'nearrow;': '\u2197',\n    'NewLine;': '\\n',\n    'nexists;': '\u2204',\n    'NoBreak;': '\u2060',\n    'notinva;': '\u2209',\n    'notinvb;': '\u22F7',\n    'notinvc;': '\u22F6',\n    'NotLess;': '\u226E',\n    'notniva;': '\u220C',\n    'notnivb;': '\u22FE',\n    'notnivc;': '\u22FD',\n    'npolint;': '\u2A14',\n    'npreceq;': '\u2AAF\u0338',\n    'nsqsube;': '\u22E2',\n    'nsqsupe;': '\u22E3',\n    'nsubset;': '\u2282\u20D2',\n    'nsucceq;': '\u2AB0\u0338',\n    'nsupset;': '\u2283\u20D2',\n    'nvinfin;': '\u29DE',\n    'nvltrie;': '\u22B4\u20D2',\n    'nvrtrie;': '\u22B5\u20D2',\n    'nwarrow;': '\u2196',\n    'olcross;': '\u29BB',\n    'Omicron;': '\u039F',\n    'omicron;': '\u03BF',\n    'orderof;': '\u2134',\n    'orslope;': '\u2A57',\n    'OverBar;': '\u203E',\n    'pertenk;': '\u2031',\n    'planckh;': '\u210E',\n    'pluscir;': '\u2A22',\n    'plussim;': '\u2A26',\n    'plustwo;': '\u2A27',\n    'precsim;': '\u227E',\n    'Product;': '\u220F',\n    'quatint;': '\u2A16',\n    'questeq;': '\u225F',\n    'rarrbfs;': '\u2920',\n    'rarrsim;': '\u2974',\n    'rbrksld;': '\u298E',\n    'rbrkslu;': '\u2990',\n    'rdldhar;': '\u2969',\n    'realine;': '\u211B',\n    'rotimes;': '\u2A35',\n    'ruluhar;': '\u2968',\n    'searrow;': '\u2198',\n    'simplus;': '\u2A24',\n    'simrarr;': '\u2972',\n    'subedot;': '\u2AC3',\n    'submult;': '\u2AC1',\n    'subplus;': '\u2ABF',\n    'subrarr;': '\u2979',\n    'succsim;': '\u227F',\n    'supdsub;': '\u2AD8',\n    'supedot;': '\u2AC4',\n    'suphsol;': '\u27C9',\n    'suphsub;': '\u2AD7',\n    'suplarr;': '\u297B',\n    'supmult;': '\u2AC2',\n    'supplus;': '\u2AC0',\n    'swarrow;': '\u2199',\n    'topfork;': '\u2ADA',\n    'triplus;': '\u2A39',\n    'tritime;': '\u2A3B',\n    'UpArrow;': '\u2191',\n    'Uparrow;': '\u21D1',\n    'uparrow;': '\u2191',\n    'Upsilon;': '\u03A5',\n    'upsilon;': '\u03C5',\n    'uwangle;': '\u29A7',\n    'vzigzag;': '\u299A',\n    'zigrarr;': '\u21DD',\n    'andslope;': '\u2A58',\n    'angmsdaa;': '\u29A8',\n    'angmsdab;': '\u29A9',\n    'angmsdac;': '\u29AA',\n    'angmsdad;': '\u29AB',\n    'angmsdae;': '\u29AC',\n    'angmsdaf;': '\u29AD',\n    'angmsdag;': '\u29AE',\n    'angmsdah;': '\u29AF',\n    'angrtvbd;': '\u299D',\n    'approxeq;': '\u224A',\n    'awconint;': '\u2233',\n    'backcong;': '\u224C',\n    'barwedge;': '\u2305',\n    'bbrktbrk;': '\u23B6',\n    'bigoplus;': '\u2A01',\n    'bigsqcup;': '\u2A06',\n    'biguplus;': '\u2A04',\n    'bigwedge;': '\u22C0',\n    'boxminus;': '\u229F',\n    'boxtimes;': '\u22A0',\n    'bsolhsub;': '\u27C8',\n    'capbrcup;': '\u2A49',\n    'circledR;': '\u00AE',\n    'circledS;': '\u24C8',\n    'cirfnint;': '\u2A10',\n    'clubsuit;': '\u2663',\n    'cupbrcap;': '\u2A48',\n    'curlyvee;': '\u22CE',\n    'cwconint;': '\u2232',\n    'DDotrahd;': '\u2911',\n    'doteqdot;': '\u2251',\n    'DotEqual;': '\u2250',\n    'dotminus;': '\u2238',\n    'drbkarow;': '\u2910',\n    'dzigrarr;': '\u27FF',\n    'elinters;': '\u23E7',\n    'emptyset;': '\u2205',\n    'eqvparsl;': '\u29E5',\n    'fpartint;': '\u2A0D',\n    'geqslant;': '\u2A7E',\n    'gesdotol;': '\u2A84',\n    'gnapprox;': '\u2A8A',\n    'hksearow;': '\u2925',\n    'hkswarow;': '\u2926',\n    'imagline;': '\u2110',\n    'imagpart;': '\u2111',\n    'infintie;': '\u29DD',\n    'integers;': '\u2124',\n    'Integral;': '\u222B',\n    'intercal;': '\u22BA',\n    'intlarhk;': '\u2A17',\n    'laemptyv;': '\u29B4',\n    'ldrushar;': '\u294B',\n    'leqslant;': '\u2A7D',\n    'lesdotor;': '\u2A83',\n    'LessLess;': '\u2AA1',\n    'llcorner;': '\u231E',\n    'lnapprox;': '\u2A89',\n    'lrcorner;': '\u231F',\n    'lurdshar;': '\u294A',\n    'mapstoup;': '\u21A5',\n    'multimap;': '\u22B8',\n    'naturals;': '\u2115',\n    'ncongdot;': '\u2A6D\u0338',\n    'NotEqual;': '\u2260',\n    'notindot;': '\u22F5\u0338',\n    'NotTilde;': '\u2241',\n    'otimesas;': '\u2A36',\n    'parallel;': '\u2225',\n    'PartialD;': '\u2202',\n    'plusacir;': '\u2A23',\n    'pointint;': '\u2A15',\n    'Precedes;': '\u227A',\n    'precneqq;': '\u2AB5',\n    'precnsim;': '\u22E8',\n    'profalar;': '\u232E',\n    'profline;': '\u2312',\n    'profsurf;': '\u2313',\n    'raemptyv;': '\u29B3',\n    'realpart;': '\u211C',\n    'RightTee;': '\u22A2',\n    'rppolint;': '\u2A12',\n    'rtriltri;': '\u29CE',\n    'scpolint;': '\u2A13',\n    'setminus;': '\u2216',\n    'shortmid;': '\u2223',\n    'smeparsl;': '\u29E4',\n    'sqsubset;': '\u228F',\n    'sqsupset;': '\u2290',\n    'subseteq;': '\u2286',\n    'Succeeds;': '\u227B',\n    'succneqq;': '\u2AB6',\n    'succnsim;': '\u22E9',\n    'SuchThat;': '\u220B',\n    'Superset;': '\u2283',\n    'supseteq;': '\u2287',\n    'thetasym;': '\u03D1',\n    'thicksim;': '\u223C',\n    'timesbar;': '\u2A31',\n    'triangle;': '\u25B5',\n    'triminus;': '\u2A3A',\n    'trpezium;': '\u23E2',\n    'Uarrocir;': '\u2949',\n    'ulcorner;': '\u231C',\n    'UnderBar;': '_',\n    'urcorner;': '\u231D',\n    'varkappa;': '\u03F0',\n    'varsigma;': '\u03C2',\n    'vartheta;': '\u03D1',\n    'backprime;': '\u2035',\n    'backsimeq;': '\u22CD',\n    'Backslash;': '\u2216',\n    'bigotimes;': '\u2A02',\n    'CenterDot;': '\u00B7',\n    'centerdot;': '\u00B7',\n    'checkmark;': '\u2713',\n    'CircleDot;': '\u2299',\n    'complexes;': '\u2102',\n    'Congruent;': '\u2261',\n    'Coproduct;': '\u2210',\n    'dotsquare;': '\u22A1',\n    'DoubleDot;': '\u00A8',\n    'DownArrow;': '\u2193',\n    'Downarrow;': '\u21D3',\n    'downarrow;': '\u2193',\n    'DownBreve;': '\u0311',\n    'gtrapprox;': '\u2A86',\n    'gtreqless;': '\u22DB',\n    'gvertneqq;': '\u2269\uFE00',\n    'heartsuit;': '\u2665',\n    'HumpEqual;': '\u224F',\n    'LeftArrow;': '\u2190',\n    'Leftarrow;': '\u21D0',\n    'leftarrow;': '\u2190',\n    'LeftFloor;': '\u230A',\n    'lesseqgtr;': '\u22DA',\n    'LessTilde;': '\u2272',\n    'lvertneqq;': '\u2268\uFE00',\n    'Mellintrf;': '\u2133',\n    'MinusPlus;': '\u2213',\n    'ngeqslant;': '\u2A7E\u0338',\n    'nleqslant;': '\u2A7D\u0338',\n    'NotCupCap;': '\u226D',\n    'NotExists;': '\u2204',\n    'NotSubset;': '\u2282\u20D2',\n    'nparallel;': '\u2226',\n    'nshortmid;': '\u2224',\n    'nsubseteq;': '\u2288',\n    'nsupseteq;': '\u2289',\n    'OverBrace;': '\u23DE',\n    'pitchfork;': '\u22D4',\n    'PlusMinus;': '\u00B1',\n    'rationals;': '\u211A',\n    'spadesuit;': '\u2660',\n    'subseteqq;': '\u2AC5',\n    'subsetneq;': '\u228A',\n    'supseteqq;': '\u2AC6',\n    'supsetneq;': '\u228B',\n    'Therefore;': '\u2234',\n    'therefore;': '\u2234',\n    'ThinSpace;': '\u2009',\n    'triangleq;': '\u225C',\n    'TripleDot;': '\u20DB',\n    'UnionPlus;': '\u228E',\n    'varpropto;': '\u221D',\n    'Bernoullis;': '\u212C',\n    'circledast;': '\u229B',\n    'CirclePlus;': '\u2295',\n    'complement;': '\u2201',\n    'curlywedge;': '\u22CF',\n    'eqslantgtr;': '\u2A96',\n    'EqualTilde;': '\u2242',\n    'Fouriertrf;': '\u2131',\n    'gtreqqless;': '\u2A8C',\n    'ImaginaryI;': '\u2148',\n    'Laplacetrf;': '\u2112',\n    'LeftVector;': '\u21BC',\n    'lessapprox;': '\u2A85',\n    'lesseqqgtr;': '\u2A8B',\n    'Lleftarrow;': '\u21DA',\n    'lmoustache;': '\u23B0',\n    'longmapsto;': '\u27FC',\n    'mapstodown;': '\u21A7',\n    'mapstoleft;': '\u21A4',\n    'nLeftarrow;': '\u21CD',\n    'nleftarrow;': '\u219A',\n    'NotElement;': '\u2209',\n    'NotGreater;': '\u226F',\n    'nsubseteqq;': '\u2AC5\u0338',\n    'nsupseteqq;': '\u2AC6\u0338',\n    'precapprox;': '\u2AB7',\n    'Proportion;': '\u2237',\n    'RightArrow;': '\u2192',\n    'Rightarrow;': '\u21D2',\n    'rightarrow;': '\u2192',\n    'RightFloor;': '\u230B',\n    'rmoustache;': '\u23B1',\n    'sqsubseteq;': '\u2291',\n    'sqsupseteq;': '\u2292',\n    'subsetneqq;': '\u2ACB',\n    'succapprox;': '\u2AB8',\n    'supsetneqq;': '\u2ACC',\n    'ThickSpace;': '\u205F\u200A',\n    'TildeEqual;': '\u2243',\n    'TildeTilde;': '\u2248',\n    'UnderBrace;': '\u23DF',\n    'UpArrowBar;': '\u2912',\n    'UpTeeArrow;': '\u21A5',\n    'upuparrows;': '\u21C8',\n    'varepsilon;': '\u03F5',\n    'varnothing;': '\u2205',\n    'backepsilon;': '\u03F6',\n    'blacksquare;': '\u25AA',\n    'circledcirc;': '\u229A',\n    'circleddash;': '\u229D',\n    'CircleMinus;': '\u2296',\n    'CircleTimes;': '\u2297',\n    'curlyeqprec;': '\u22DE',\n    'curlyeqsucc;': '\u22DF',\n    'diamondsuit;': '\u2666',\n    'eqslantless;': '\u2A95',\n    'Equilibrium;': '\u21CC',\n    'expectation;': '\u2130',\n    'GreaterLess;': '\u2277',\n    'LeftCeiling;': '\u2308',\n    'LessGreater;': '\u2276',\n    'MediumSpace;': '\u205F',\n    'NotLessLess;': '\u226A\u0338',\n    'NotPrecedes;': '\u2280',\n    'NotSucceeds;': '\u2281',\n    'NotSuperset;': '\u2283\u20D2',\n    'nRightarrow;': '\u21CF',\n    'nrightarrow;': '\u219B',\n    'OverBracket;': '\u23B4',\n    'preccurlyeq;': '\u227C',\n    'precnapprox;': '\u2AB9',\n    'quaternions;': '\u210D',\n    'RightVector;': '\u21C0',\n    'Rrightarrow;': '\u21DB',\n    'RuleDelayed;': '\u29F4',\n    'SmallCircle;': '\u2218',\n    'SquareUnion;': '\u2294',\n    'straightphi;': '\u03D5',\n    'SubsetEqual;': '\u2286',\n    'succcurlyeq;': '\u227D',\n    'succnapprox;': '\u2ABA',\n    'thickapprox;': '\u2248',\n    'UpDownArrow;': '\u2195',\n    'Updownarrow;': '\u21D5',\n    'updownarrow;': '\u2195',\n    'VerticalBar;': '\u2223',\n    'blacklozenge;': '\u29EB',\n    'DownArrowBar;': '\u2913',\n    'DownTeeArrow;': '\u21A7',\n    'ExponentialE;': '\u2147',\n    'exponentiale;': '\u2147',\n    'GreaterEqual;': '\u2265',\n    'GreaterTilde;': '\u2273',\n    'HilbertSpace;': '\u210B',\n    'HumpDownHump;': '\u224E',\n    'Intersection;': '\u22C2',\n    'LeftArrowBar;': '\u21E4',\n    'LeftTeeArrow;': '\u21A4',\n    'LeftTriangle;': '\u22B2',\n    'LeftUpVector;': '\u21BF',\n    'NotCongruent;': '\u2262',\n    'NotHumpEqual;': '\u224F\u0338',\n    'NotLessEqual;': '\u2270',\n    'NotLessTilde;': '\u2274',\n    'Proportional;': '\u221D',\n    'RightCeiling;': '\u2309',\n    'risingdotseq;': '\u2253',\n    'RoundImplies;': '\u2970',\n    'ShortUpArrow;': '\u2191',\n    'SquareSubset;': '\u228F',\n    'triangledown;': '\u25BF',\n    'triangleleft;': '\u25C3',\n    'UnderBracket;': '\u23B5',\n    'varsubsetneq;': '\u228A\uFE00',\n    'varsupsetneq;': '\u228B\uFE00',\n    'VerticalLine;': '|',\n    'ApplyFunction;': '\u2061',\n    'bigtriangleup;': '\u25B3',\n    'blacktriangle;': '\u25B4',\n    'DifferentialD;': '\u2146',\n    'divideontimes;': '\u22C7',\n    'DoubleLeftTee;': '\u2AE4',\n    'DoubleUpArrow;': '\u21D1',\n    'fallingdotseq;': '\u2252',\n    'hookleftarrow;': '\u21A9',\n    'leftarrowtail;': '\u21A2',\n    'leftharpoonup;': '\u21BC',\n    'LeftTeeVector;': '\u295A',\n    'LeftVectorBar;': '\u2952',\n    'LessFullEqual;': '\u2266',\n    'LongLeftArrow;': '\u27F5',\n    'Longleftarrow;': '\u27F8',\n    'longleftarrow;': '\u27F5',\n    'looparrowleft;': '\u21AB',\n    'measuredangle;': '\u2221',\n    'NotEqualTilde;': '\u2242\u0338',\n    'NotTildeEqual;': '\u2244',\n    'NotTildeTilde;': '\u2249',\n    'ntriangleleft;': '\u22EA',\n    'Poincareplane;': '\u210C',\n    'PrecedesEqual;': '\u2AAF',\n    'PrecedesTilde;': '\u227E',\n    'RightArrowBar;': '\u21E5',\n    'RightTeeArrow;': '\u21A6',\n    'RightTriangle;': '\u22B3',\n    'RightUpVector;': '\u21BE',\n    'shortparallel;': '\u2225',\n    'smallsetminus;': '\u2216',\n    'SucceedsEqual;': '\u2AB0',\n    'SucceedsTilde;': '\u227F',\n    'SupersetEqual;': '\u2287',\n    'triangleright;': '\u25B9',\n    'UpEquilibrium;': '\u296E',\n    'upharpoonleft;': '\u21BF',\n    'varsubsetneqq;': '\u2ACB\uFE00',\n    'varsupsetneqq;': '\u2ACC\uFE00',\n    'VerticalTilde;': '\u2240',\n    'VeryThinSpace;': '\u200A',\n    'curvearrowleft;': '\u21B6',\n    'DiacriticalDot;': '\u02D9',\n    'doublebarwedge;': '\u2306',\n    'DoubleRightTee;': '\u22A8',\n    'downdownarrows;': '\u21CA',\n    'DownLeftVector;': '\u21BD',\n    'GreaterGreater;': '\u2AA2',\n    'hookrightarrow;': '\u21AA',\n    'HorizontalLine;': '\u2500',\n    'InvisibleComma;': '\u2063',\n    'InvisibleTimes;': '\u2062',\n    'LeftDownVector;': '\u21C3',\n    'leftleftarrows;': '\u21C7',\n    'LeftRightArrow;': '\u2194',\n    'Leftrightarrow;': '\u21D4',\n    'leftrightarrow;': '\u2194',\n    'leftthreetimes;': '\u22CB',\n    'LessSlantEqual;': '\u2A7D',\n    'LongRightArrow;': '\u27F6',\n    'Longrightarrow;': '\u27F9',\n    'longrightarrow;': '\u27F6',\n    'looparrowright;': '\u21AC',\n    'LowerLeftArrow;': '\u2199',\n    'NestedLessLess;': '\u226A',\n    'NotGreaterLess;': '\u2279',\n    'NotLessGreater;': '\u2278',\n    'NotSubsetEqual;': '\u2288',\n    'NotVerticalBar;': '\u2224',\n    'nshortparallel;': '\u2226',\n    'ntriangleright;': '\u22EB',\n    'OpenCurlyQuote;': '\u2018',\n    'ReverseElement;': '\u220B',\n    'rightarrowtail;': '\u21A3',\n    'rightharpoonup;': '\u21C0',\n    'RightTeeVector;': '\u295B',\n    'RightVectorBar;': '\u2953',\n    'ShortDownArrow;': '\u2193',\n    'ShortLeftArrow;': '\u2190',\n    'SquareSuperset;': '\u2290',\n    'TildeFullEqual;': '\u2245',\n    'trianglelefteq;': '\u22B4',\n    'upharpoonright;': '\u21BE',\n    'UpperLeftArrow;': '\u2196',\n    'ZeroWidthSpace;': '\u200B',\n    'bigtriangledown;': '\u25BD',\n    'circlearrowleft;': '\u21BA',\n    'CloseCurlyQuote;': '\u2019',\n    'ContourIntegral;': '\u222E',\n    'curvearrowright;': '\u21B7',\n    'DoubleDownArrow;': '\u21D3',\n    'DoubleLeftArrow;': '\u21D0',\n    'downharpoonleft;': '\u21C3',\n    'DownRightVector;': '\u21C1',\n    'leftharpoondown;': '\u21BD',\n    'leftrightarrows;': '\u21C6',\n    'LeftRightVector;': '\u294E',\n    'LeftTriangleBar;': '\u29CF',\n    'LeftUpTeeVector;': '\u2960',\n    'LeftUpVectorBar;': '\u2958',\n    'LowerRightArrow;': '\u2198',\n    'nLeftrightarrow;': '\u21CE',\n    'nleftrightarrow;': '\u21AE',\n    'NotGreaterEqual;': '\u2271',\n    'NotGreaterTilde;': '\u2275',\n    'NotHumpDownHump;': '\u224E\u0338',\n    'NotLeftTriangle;': '\u22EA',\n    'NotSquareSubset;': '\u228F\u0338',\n    'ntrianglelefteq;': '\u22EC',\n    'OverParenthesis;': '\u23DC',\n    'RightDownVector;': '\u21C2',\n    'rightleftarrows;': '\u21C4',\n    'rightsquigarrow;': '\u219D',\n    'rightthreetimes;': '\u22CC',\n    'ShortRightArrow;': '\u2192',\n    'straightepsilon;': '\u03F5',\n    'trianglerighteq;': '\u22B5',\n    'UpperRightArrow;': '\u2197',\n    'vartriangleleft;': '\u22B2',\n    'circlearrowright;': '\u21BB',\n    'DiacriticalAcute;': '\u00B4',\n    'DiacriticalGrave;': '`',\n    'DiacriticalTilde;': '\u02DC',\n    'DoubleRightArrow;': '\u21D2',\n    'DownArrowUpArrow;': '\u21F5',\n    'downharpoonright;': '\u21C2',\n    'EmptySmallSquare;': '\u25FB',\n    'GreaterEqualLess;': '\u22DB',\n    'GreaterFullEqual;': '\u2267',\n    'LeftAngleBracket;': '\u27E8',\n    'LeftUpDownVector;': '\u2951',\n    'LessEqualGreater;': '\u22DA',\n    'NonBreakingSpace;': ' ',\n    'NotPrecedesEqual;': '\u2AAF\u0338',\n    'NotRightTriangle;': '\u22EB',\n    'NotSucceedsEqual;': '\u2AB0\u0338',\n    'NotSucceedsTilde;': '\u227F\u0338',\n    'NotSupersetEqual;': '\u2289',\n    'ntrianglerighteq;': '\u22ED',\n    'rightharpoondown;': '\u21C1',\n    'rightrightarrows;': '\u21C9',\n    'RightTriangleBar;': '\u29D0',\n    'RightUpTeeVector;': '\u295C',\n    'RightUpVectorBar;': '\u2954',\n    'twoheadleftarrow;': '\u219E',\n    'UnderParenthesis;': '\u23DD',\n    'UpArrowDownArrow;': '\u21C5',\n    'vartriangleright;': '\u22B3',\n    'blacktriangledown;': '\u25BE',\n    'blacktriangleleft;': '\u25C2',\n    'DoubleUpDownArrow;': '\u21D5',\n    'DoubleVerticalBar;': '\u2225',\n    'DownLeftTeeVector;': '\u295E',\n    'DownLeftVectorBar;': '\u2956',\n    'FilledSmallSquare;': '\u25FC',\n    'GreaterSlantEqual;': '\u2A7E',\n    'LeftDoubleBracket;': '\u27E6',\n    'LeftDownTeeVector;': '\u2961',\n    'LeftDownVectorBar;': '\u2959',\n    'leftrightharpoons;': '\u21CB',\n    'LeftTriangleEqual;': '\u22B4',\n    'NegativeThinSpace;': '\u200B',\n    'NotGreaterGreater;': '\u226B\u0338',\n    'NotLessSlantEqual;': '\u2A7D\u0338',\n    'NotNestedLessLess;': '\u2AA1\u0338',\n    'NotReverseElement;': '\u220C',\n    'NotSquareSuperset;': '\u2290\u0338',\n    'NotTildeFullEqual;': '\u2247',\n    'RightAngleBracket;': '\u27E9',\n    'rightleftharpoons;': '\u21CC',\n    'RightUpDownVector;': '\u294F',\n    'SquareSubsetEqual;': '\u2291',\n    'twoheadrightarrow;': '\u21A0',\n    'VerticalSeparator;': '\u2758',\n    'blacktriangleright;': '\u25B8',\n    'DownRightTeeVector;': '\u295F',\n    'DownRightVectorBar;': '\u2957',\n    'LongLeftRightArrow;': '\u27F7',\n    'Longleftrightarrow;': '\u27FA',\n    'longleftrightarrow;': '\u27F7',\n    'NegativeThickSpace;': '\u200B',\n    'NotLeftTriangleBar;': '\u29CF\u0338',\n    'PrecedesSlantEqual;': '\u227C',\n    'ReverseEquilibrium;': '\u21CB',\n    'RightDoubleBracket;': '\u27E7',\n    'RightDownTeeVector;': '\u295D',\n    'RightDownVectorBar;': '\u2955',\n    'RightTriangleEqual;': '\u22B5',\n    'SquareIntersection;': '\u2293',\n    'SucceedsSlantEqual;': '\u227D',\n    'DoubleLongLeftArrow;': '\u27F8',\n    'DownLeftRightVector;': '\u2950',\n    'LeftArrowRightArrow;': '\u21C6',\n    'leftrightsquigarrow;': '\u21AD',\n    'NegativeMediumSpace;': '\u200B',\n    'NotGreaterFullEqual;': '\u2267\u0338',\n    'NotRightTriangleBar;': '\u29D0\u0338',\n    'RightArrowLeftArrow;': '\u21C4',\n    'SquareSupersetEqual;': '\u2292',\n    'CapitalDifferentialD;': '\u2145',\n    'DoubleLeftRightArrow;': '\u21D4',\n    'DoubleLongRightArrow;': '\u27F9',\n    'EmptyVerySmallSquare;': '\u25AB',\n    'NestedGreaterGreater;': '\u226B',\n    'NotDoubleVerticalBar;': '\u2226',\n    'NotGreaterSlantEqual;': '\u2A7E\u0338',\n    'NotLeftTriangleEqual;': '\u22EC',\n    'NotSquareSubsetEqual;': '\u22E2',\n    'OpenCurlyDoubleQuote;': '\u201C',\n    'ReverseUpEquilibrium;': '\u296F',\n    'CloseCurlyDoubleQuote;': '\u201D',\n    'DoubleContourIntegral;': '\u222F',\n    'FilledVerySmallSquare;': '\u25AA',\n    'NegativeVeryThinSpace;': '\u200B',\n    'NotPrecedesSlantEqual;': '\u22E0',\n    'NotRightTriangleEqual;': '\u22ED',\n    'NotSucceedsSlantEqual;': '\u22E1',\n    'DiacriticalDoubleAcute;': '\u02DD',\n    'NotSquareSupersetEqual;': '\u22E3',\n    'NotNestedGreaterGreater;': '\u2AA2\u0338',\n    'ClockwiseContourIntegral;': '\u2232',\n    'DoubleLongLeftRightArrow;': '\u27FA',\n    'CounterClockwiseContourIntegral;': '\u2233',\n};\n\nconst maxCRNameLength = Object.keys(namedCharacterReferences).reduce((max, name) => Math.max(max, name.length), 0);\nconst decodeHtml = (rawText, asAttr) => {\n    let offset = 0;\n    const end = rawText.length;\n    let decodedText = '';\n    function advance(length) {\n        offset += length;\n        rawText = rawText.slice(length);\n    }\n    while (offset < end) {\n        const head = /&(?:#x?)?/i.exec(rawText);\n        if (head == null || offset + head.index >= end) {\n            const remaining = end - offset;\n            decodedText += rawText.slice(0, remaining);\n            advance(remaining);\n            break;\n        }\n        // Advance to the \"&\".\n        decodedText += rawText.slice(0, head.index);\n        advance(head.index);\n        if (head[0] === '&') {\n            // Named character reference.\n            let name = '';\n            let value;\n            if (rawText[1] != null && /[0-9a-z]/i.test(rawText[1])) {\n                for (let length = maxCRNameLength; value != null && length > 0; --length) {\n                    name = rawText.substr(1, length);\n                    value = namedCharacterReferences[name];\n                }\n                if (value != null) {\n                    const semi = name.endsWith(';');\n                    if (asAttr &&\n                        !semi &&\n                        /[=a-z0-9]/i.test(rawText[name.length + 1] ?? '')) {\n                        decodedText += '&' + name;\n                        advance(1 + name.length);\n                    }\n                    else {\n                        decodedText += value;\n                        advance(1 + name.length);\n                    }\n                }\n                else {\n                    decodedText += '&' + name;\n                    advance(1 + name.length);\n                }\n            }\n            else {\n                decodedText += '&';\n                advance(1);\n            }\n        }\n        else {\n            // Numeric character reference.\n            const hex = head[0] === '&#x';\n            const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/;\n            const body = pattern.exec(rawText);\n            if (body == null) {\n                if (head[0] != null) {\n                    decodedText = `${decodedText}${head[0]}`;\n                    advance(head[0].length);\n                }\n            }\n            else if (body[1] != null) {\n                // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n                let cp = Number.parseInt(body[1], hex ? 16 : 10);\n                if (cp === 0) {\n                    cp = 0xfffd;\n                }\n                else if (cp > 0x10ffff) {\n                    cp = 0xfffd;\n                }\n                else if (cp >= 0xd800 && cp <= 0xdfff) {\n                    cp = 0xfffd;\n                }\n                else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) ;\n                else if ((cp >= 0x01 && cp <= 0x08) ||\n                    cp === 0x0b ||\n                    (cp >= 0x0d && cp <= 0x1f) ||\n                    (cp >= 0x7f && cp <= 0x9f)) {\n                    cp = CCR_REPLACEMENTS[cp] ?? cp;\n                }\n                decodedText += String.fromCodePoint(cp);\n                if (body[0] != null)\n                    advance(body[0].length);\n            }\n        }\n    }\n    return decodedText;\n};\n// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\nconst CCR_REPLACEMENTS = {\n    0x80: 0x20ac,\n    0x82: 0x201a,\n    0x83: 0x0192,\n    0x84: 0x201e,\n    0x85: 0x2026,\n    0x86: 0x2020,\n    0x87: 0x2021,\n    0x88: 0x02c6,\n    0x89: 0x2030,\n    0x8a: 0x0160,\n    0x8b: 0x2039,\n    0x8c: 0x0152,\n    0x8e: 0x017d,\n    0x91: 0x2018,\n    0x92: 0x2019,\n    0x93: 0x201c,\n    0x94: 0x201d,\n    0x95: 0x2022,\n    0x96: 0x2013,\n    0x97: 0x2014,\n    0x98: 0x02dc,\n    0x99: 0x2122,\n    0x9a: 0x0161,\n    0x9b: 0x203a,\n    0x9c: 0x0153,\n    0x9e: 0x017e,\n    0x9f: 0x0178,\n};\n\nconst parserOptions = {\n    isVoidTag,\n    isNativeTag: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n    isPreTag: (tag) => tag === 'pre',\n    decodeEntities: decodeHtml,\n    isBuiltInComponent: () => { },\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n    getNamespace(tag, parent) {\n        let ns = parent != null ? parent.ns : 0 /* DOMNamespaces.HTML */;\n        if (parent != null && ns === 2 /* DOMNamespaces.MATH_ML */) {\n            if (parent.tag === 'annotation-xml') {\n                if (tag === 'svg') {\n                    return 1 /* DOMNamespaces.SVG */;\n                }\n                if (parent.props.some((a) => a.type === NodeTypes.ATTRIBUTE &&\n                    a.name === 'encoding' &&\n                    a.value != null &&\n                    (a.value.content === 'text/html' ||\n                        a.value.content === 'application/xhtml+xml'))) {\n                    ns = 0 /* DOMNamespaces.HTML */;\n                }\n            }\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                tag !== 'mglyph' &&\n                tag !== 'malignmark') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        else if (parent != null && ns === 1 /* DOMNamespaces.SVG */) {\n            if (parent.tag === 'foreignObject' ||\n                parent.tag === 'desc' ||\n                parent.tag === 'title') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'svg') {\n                return 1 /* DOMNamespaces.SVG */;\n            }\n            if (tag === 'math') {\n                return 2 /* DOMNamespaces.MATH_ML */;\n            }\n        }\n        return ns;\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n    getTextMode({ tag, ns }) {\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'textarea' || tag === 'title') {\n                return 1; /* TextModes.RCDATA */\n            }\n            if (isRawTextContainer(tag)) {\n                return 2; /* TextModes.RAWTEXT */\n            }\n        }\n        return 0; /* TextModes.DATA */\n    },\n};\n\nconst preprocess = (node, context) => {\n    if (isTextNode(node) && node.content.trim().startsWith('<')) {\n        // Incomplete element tag\n        context.replaceNode(createPlainElementNode(node.loc));\n        return;\n    }\n    if (!isElementNode(node))\n        return;\n    if (/^[a-z]+$/.test(node.tag) &&\n        node.tagType === 1 &&\n        node.tag !== 'component') {\n        // force element for lower case unknown tags as user might be typing these partial html/svg tags\n        node.tagType = 0; /* ELEMENT */\n    }\n    node.props.forEach((prop, index) => {\n        // remove empty modifiers\n        if (isDirectiveNode(prop)) {\n            const nameEndOffset = prop.loc.source.startsWith('v-')\n                ? 2 + prop.name.length\n                : 1;\n            let offset = prop.arg != null\n                ? prop.arg.loc.end.offset - prop.loc.start.offset\n                : nameEndOffset;\n            prop.nameLoc = sliceLoc(prop.loc, 0, nameEndOffset);\n            if (prop.modifiers.length === 1 && first(prop.modifiers) === '') {\n                prop.modifiers = [];\n            }\n            prop.modifierLocs = prop.modifiers.map((modifier) => {\n                try {\n                    offset += 1;\n                    return sliceLoc(prop.loc, offset, modifier.length);\n                }\n                finally {\n                    offset += modifier.length;\n                }\n            });\n            // remove braces from arg loc\n            if (prop.arg?.loc.source.startsWith('[') === true) {\n                prop.arg.loc = sliceLoc(prop.arg.loc, 1, -1);\n            }\n            // prop.modifierLocs =\n        }\n        else {\n            // parse ^ shorthand for v-bind\n            if (prop.name.startsWith('^')) {\n                const isDynamic = prop.name.slice(1).startsWith('[');\n                node.props[index] = {\n                    type: 7 /* DIRECTIVE */,\n                    name: 'bind',\n                    nameLoc: createLoc(prop.loc, 0, 1),\n                    arg: isDynamic\n                        ? createSimpleExpression$1(prop.name.slice(2, -1), false, createLoc(prop.loc, 1, prop.name.length - 1))\n                        : prop.name.length > 1\n                            ? createSimpleExpression$1(prop.name.slice(1), true, createLoc(prop.loc, 1, prop.name.length - 1))\n                            : undefined,\n                    loc: prop.loc,\n                    modifiers: [],\n                    modifierLocs: [],\n                    exp: prop.value == null\n                        ? undefined\n                        : createSimpleExpression$1(prop.value.content, false, sliceLoc(prop.value.loc, 1, -1)),\n                    scope: undefined,\n                };\n            }\n            else {\n                prop.nameLoc = createLoc(prop.loc, 0, prop.name.length);\n            }\n        }\n    });\n    node.tagLoc = createLoc(node.loc, 1, node.tag.length);\n    if (node.isSelfClosing) {\n        node.startTagLoc = node.loc;\n        node.endTagLoc = sliceLoc(node.loc, -2);\n    }\n    else {\n        const startTagIndex = node.loc.source.indexOf('>', (node.props.length > 0\n            ? last(node.props).loc.end.offset\n            : node.tagLoc.end.offset) - node.loc.start.offset);\n        if (startTagIndex < 0) {\n            node.startTagLoc = node.loc; // Incomplete open tag\n        }\n        else {\n            node.startTagLoc = createLoc(node.loc, 0, startTagIndex + 1);\n            const endOfStartTagOrLastChild = (node.children.length > 0\n                ? last(node.children).loc.end.offset\n                : node.startTagLoc.end.offset) - node.loc.start.offset;\n            const endTagIndex = Math.max(endOfStartTagOrLastChild, node.loc.source.indexOf('</', endOfStartTagOrLastChild));\n            node.endTagLoc = createLoc(node.loc, endTagIndex, node.loc.source.length - endTagIndex);\n        }\n    }\n};\nfunction parse(template, options) {\n    const ast = baseParse(template, {\n        ...parserOptions,\n        ...options,\n    });\n    transform(ast, { nodeTransforms: [preprocess] });\n    return ast;\n}\nfunction createPlainElementNode(contentLoc) {\n    const offset = contentLoc.source.indexOf('<');\n    const loc = sliceLoc(contentLoc, offset);\n    const tag = loc.source.slice(1).trim();\n    return {\n        type: 1 /* ELEMENT */,\n        tag,\n        tagType: 0 /* ELEMENT */,\n        codegenNode: undefined,\n        children: [],\n        isSelfClosing: tag.length > 0,\n        loc,\n        ns: 0,\n        props: [],\n        tagLoc: sliceLoc(loc, 1),\n        startTagLoc: loc,\n        endTagLoc: undefined,\n        scope: new Scope(),\n    };\n}\n\nfunction compile$1(template, options) {\n    const errors = [];\n    const result = compileFromAST(parse(template, {\n        ...options,\n        onError: (error) => {\n            errors.push(error);\n            options.onError?.(error);\n        },\n    }), options);\n    result.errors.unshift(...errors);\n    return result;\n}\nfunction compileFromAST(source, options) {\n    const root = withScope(clone(source));\n    const ast = clone(source);\n    ast.scope = root.scope;\n    const context = {\n        ...options,\n        scope: new ScopeManager(),\n        used: { components: new Set(), directives: new Set() },\n    };\n    const errors = [];\n    transform(root, {\n        ...options,\n        prefixIdentifiers: false,\n        hoistStatic: false,\n        transformHoist: null,\n        ssr: false,\n        cacheHandlers: false,\n        scopeId: null,\n        nodeTransforms: [\n            createResolveComponentTransform(context),\n            createSlotHoistScopeTransform(context),\n            createTransformFor(context),\n            createTransformIf(),\n            createComponentChildrenTransform(),\n        ],\n        onError(error) {\n            errors.push(error);\n        },\n    });\n    const result = generate(root, context);\n    return { ...result, ast, errors };\n}\nfunction clone(obj) {\n    try {\n        // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n        // @ts-ignore\n        if (typeof structuredClone !== 'undefined')\n            return structuredClone(obj);\n    }\n    catch { }\n    return JSON.parse(JSON.stringify(obj));\n}\n\nfunction transformTemplate(template, options) {\n    const slotsIdentifier = `${options.internalIdentifierPrefix}_slots`;\n    const attrsIdentifier = `${options.internalIdentifierPrefix}_attrs`;\n    if (template == null) {\n        return {\n            code: `function ${slotsIdentifier}() { return {} }; const ${attrsIdentifier} = {};`,\n            map: {\n                file: '',\n                mappings: [],\n                names: [],\n                sources: [],\n                sourcesContent: [],\n            },\n            slotsIdentifier,\n            attrsIdentifier,\n            errors: [],\n        };\n    }\n    const result = compile$1(template?.content, options);\n    const offset = template.loc.start.offset;\n    const line = template.loc.start.line;\n    return {\n        ...result,\n        slotsIdentifier,\n        attrsIdentifier,\n        errors: result.errors.map((error) => {\n            if ('loc' in error && error.loc != null) {\n                error.loc.start.offset += offset;\n                error.loc.end.offset += offset;\n                error.loc.start.line += line;\n                error.loc.end.line += line;\n            }\n            error.message += ` (in <template>)`;\n            return error;\n        }),\n    };\n}\n\nfunction compile(source, options) {\n    const result = compileWithDecodedSourceMap(source, options);\n    return {\n        ...result,\n        map: {\n            version: 3,\n            ...result.map,\n            mappings: encode(result.map.mappings),\n        },\n    };\n}\nfunction compileWithDecodedSourceMap(source, options) {\n    // performance.mark('beforeTransform')\n    const cache = options.cache ?? createCache(100);\n    const key = (name) => `${options.fileName}::block:${name}`;\n    const previous = cache.get(key('descriptor'));\n    const { descriptor, errors } = parse$2(source);\n    const lang = descriptor.script?.lang ?? descriptor.scriptSetup?.lang;\n    const internalIdentifierPrefix = options.internalIdentifierPrefix ?? '__VueDX__';\n    const contextIdentifier = `${internalIdentifierPrefix}ctx`;\n    const typeIdentifier = `${internalIdentifierPrefix}TypeCheck`;\n    const resolvedOptions = {\n        ...options,\n        runtimeModuleName: 'vue',\n        typeCheckModuleName: 'vuedx~runtime',\n        typeIdentifier,\n        contextIdentifier,\n        internalIdentifierPrefix,\n        isTypeScript: options.isTypeScript ?? (lang === 'ts' || lang === 'tsx'),\n        cache,\n        descriptor,\n        identifiers: new Map(),\n    };\n    const builder = new SourceTransformer(options.fileName, source);\n    const isScriptChanged = hasBlockChanged(previous?.script, descriptor.script);\n    const script = runIfNeeded(key('script'), isScriptChanged, cache, () => transformScript(descriptor.script, resolvedOptions));\n    const isScriptSetupChanged = hasBlockChanged(previous?.scriptSetup, descriptor.scriptSetup);\n    const scriptSetup = runIfNeeded(key('scriptSetup'), isScriptSetupChanged, cache, () => transformScriptSetup(descriptor.scriptSetup, resolvedOptions));\n    resolvedOptions.identifiers = new Map();\n    script.identifiers.forEach((identifier) => {\n        resolvedOptions.identifiers.set(identifier.name, identifier);\n    });\n    scriptSetup.identifiers.forEach((identifier) => {\n        resolvedOptions.identifiers.set(identifier.name, identifier);\n    });\n    const template = runIfNeeded(key('template'), isScriptChanged ||\n        isScriptSetupChanged ||\n        hasBlockChanged(previous?.template, descriptor.template), cache, () => transformTemplate(descriptor.template, resolvedOptions));\n    const name = script.name;\n    function region(name, fn) {\n        builder.nextLine();\n        builder.append(`//#region ${name}`);\n        builder.nextLine();\n        fn();\n        builder.nextLine();\n        builder.append(`//#endregion`);\n        builder.nextLine();\n    }\n    builder.append([\n        `import * as ${resolvedOptions.typeIdentifier} from '${resolvedOptions.typeCheckModuleName}';`,\n        `declare const ${resolvedOptions.internalIdentifierPrefix}defineComponent: typeof import(${JSON.stringify(resolvedOptions.runtimeModuleName)}).defineComponent;`,\n        `type ${resolvedOptions.internalIdentifierPrefix}GlobalComponents = import(${JSON.stringify(resolvedOptions.runtimeModuleName)}).GlobalComponents;`,\n    ].join('\\n'));\n    builder.nextLine();\n    region('<script>', () => {\n        builder.append(script.code, rebaseSourceMap(script.map, descriptor.script?.loc.start));\n    });\n    const customBlocksResults = descriptor.customBlocks.map((block, index) => {\n        const result = runIfNeeded(key(`customBlock${index}`), hasBlockChanged(previous?.customBlocks[index], block), cache, () => transformCustomBlock(block, resolvedOptions));\n        region(`<${block.type}>`, () => {\n            builder.append(result.code, rebaseSourceMap(result.map, block.loc.start));\n        });\n        return result;\n    });\n    region('<script setup>', () => {\n        builder.append(scriptSetup.code, rebaseSourceMap(scriptSetup.map, descriptor.scriptSetup?.loc.start));\n    });\n    const defaultExportIdentifier = descriptor.scriptSetup != null\n        ? scriptSetup.exportIdentifier\n        : script.exportIdentifier;\n    builder.append([\n        `function ${internalIdentifierPrefix}RegisterSelf<T>(ctx: T) {`,\n        `  return { ...ctx, [${JSON.stringify(name)}]: ${name} }`,\n        `}`,\n    ].join('\\n'));\n    builder.nextLine();\n    builder.append(`const ${contextIdentifier} = ${customBlocksResults.reduce((code, result) => {\n        if (result.decoratorIdentifier != null) {\n            return `${result.decoratorIdentifier}(${code})`;\n        }\n        return code;\n    }, `${internalIdentifierPrefix}RegisterSelf(new ${defaultExportIdentifier}())`)}`);\n    builder.nextLine();\n    region(`<template>`, () => {\n        builder.append(template.code, rebaseSourceMap(template.map, descriptor.template?.loc.start));\n    });\n    descriptor.styles.forEach((style, index) => {\n        const result = runIfNeeded(key(`style${index}`), hasBlockChanged(previous?.styles[index], style), cache, () => transformStyle(style, resolvedOptions));\n        builder.append('/* <style> */');\n        region('<style>', () => {\n            builder.append(result.code, rebaseSourceMap(result.map, style.loc.start));\n        });\n    });\n    const exported = [\n        ...(descriptor.scriptSetup == null\n            ? [template.attrsIdentifier, template.slotsIdentifier, contextIdentifier]\n            : [scriptSetup.componentIdentifier]),\n        ...Object.values(scriptSetup.exports),\n    ].join(', ');\n    builder.append(`return {${exported}};};`);\n    builder.nextLine();\n    builder.append(`const {${exported}} = ${scriptSetup.scopeIdentifier}();\\n`);\n    Object.entries(scriptSetup.exports).forEach(([name, identifier]) => {\n        builder.append(`export type ${name} = typeof ${identifier};\\n`);\n    });\n    region('public component definition', () => {\n        if (descriptor.scriptSetup == null) {\n            const props = `${resolvedOptions.contextIdentifier}.$props`;\n            const inheritAttrs = descriptor.template?.content.includes('@vue-attrs-target') === true ||\n                script.inheritAttrs;\n            const propsType = `typeof ${props}`;\n            const attrsType = `typeof ${template.attrsIdentifier}`;\n            const slotsType = `${resolvedOptions.typeIdentifier}.internal.Slots<typeof ${template.slotsIdentifier}_value>`;\n            builder.append([\n                `const ${template.slotsIdentifier}_value = ${template.slotsIdentifier}();`,\n                `export default class ${name} {`,\n                defineProperty('$props', inheritAttrs\n                    ? `${resolvedOptions.typeIdentifier}.internal.MergeAttrs<${propsType}, ${attrsType}> & {$slots: ${slotsType}}`\n                    : `${propsType} & {$slots: ${slotsType}}`),\n                `}`,\n            ].join('\\n'));\n        }\n        else {\n            const generic = typeof descriptor.scriptSetup.attrs['generic'] === 'string'\n                ? descriptor.scriptSetup.attrs['generic']\n                : '';\n            const typeArgs = parseGenericArgNames(generic);\n            const component = typeArgs.length > 0\n                ? `(new (${scriptSetup.scopeIdentifier}<${typeArgs.join(', ')}>().${scriptSetup.componentIdentifier}<${typeArgs.join(', ')}>))`\n                : `(new (${scriptSetup.scopeIdentifier}().${scriptSetup.componentIdentifier}))`;\n            const genericExp = typeArgs.length > 0 ? `<${generic}>` : '';\n            builder.append(`export default class ${name}${genericExp} {\\n`);\n            builder.append(` $props = {...${component}.$props, $slots: ${component}.$slots };\\n`);\n            builder.append(`}`);\n        }\n        builder.nextLine();\n    });\n    const output = builder.end();\n    // performance.mark('afterTransform')\n    // performance.measure('transform', 'beforeTransform', 'afterTransform')\n    return {\n        code: output.code,\n        map: {\n            ...output.map,\n            file: options.fileName.replace(/\\.vue$/, resolvedOptions.isTypeScript ? '.tsx' : '.jsx'),\n        },\n        descriptor,\n        errors: [...errors, ...template.errors],\n        template: template.ast,\n    };\n    function defineProperty(name, type) {\n        return resolvedOptions.isTypeScript\n            ? `  ${name} = null as unknown as ${type};`\n            : `  ${name} = /** @type {${type}} */ (/** @type {unknown} */ (null));`;\n    }\n    function parseGenericArgNames(code) {\n        const ts = options.typescript;\n        const program = createProgram(ts, `function _<${code}>() {}`);\n        const sourceFile = program.getSourceFile('input.ts');\n        invariant(sourceFile != null, 'sourceFile should not be null');\n        const decl = first(sourceFile.statements);\n        invariant(ts.isFunctionDeclaration(decl));\n        invariant(decl.typeParameters != null);\n        return decl.typeParameters.map((p) => p.name.getText());\n    }\n}\nfunction runIfNeeded(key, forceEvict, cache, fn) {\n    if (forceEvict)\n        cache.delete(key);\n    return cache.resolve(key, fn);\n}\nfunction hasBlockChanged(previous, current) {\n    if (previous === undefined)\n        return true;\n    if (previous === current)\n        return true;\n    if (previous == null || current == null)\n        return false;\n    if (previous.type !== current.type)\n        return false;\n    if (previous.lang !== current.lang)\n        return false;\n    if (previous.content !== current.content)\n        return false;\n    if (!areObjectsEqual(previous.attrs, current.attrs))\n        return false;\n    return true;\n}\nfunction areObjectsEqual(a, b) {\n    if (Object.keys(a).length !== Object.keys(b).length)\n        return false;\n    for (const key of Object.keys(a)) {\n        if (a[key] !== b[key])\n            return false;\n    }\n    return true;\n}\n\nexport { annotations, compile, compileWithDecodedSourceMap };\n//# sourceMappingURL=index.mjs.map\n", "import { SourceLocation } from '@vuedx/template-ast-types'\n\nexport function isOffsetInSourceLocation(\n  loc: SourceLocation | null | undefined,\n  offset: number,\n): loc is SourceLocation {\n  if (loc == null) return false\n\n  return loc.start.offset <= offset && offset <= loc.end.offset\n}\n", "import { annotations } from '@vuedx/compiler-tsx'\nimport { invariant, last } from '@vuedx/shared'\nimport {\n  AttributeNode,\n  DirectiveNode,\n  ElementNode,\n  findTemplateNodeAt,\n  InterpolationNode,\n  isAttributeNode,\n  isCommentNode,\n  isDirectiveNode,\n  isElementNode,\n  isInterpolationNode,\n  isSimpleExpressionNode,\n  isTextNode,\n  RootNode,\n  SearchResult,\n} from '@vuedx/template-ast-types'\nimport { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { injectable } from 'inversify'\nimport { isOffsetInSourceLocation } from '../helpers/isOffsetInSourceLocation'\n\nexport const enum TemplateContextKind {\n  Tag = 'tag',\n  Attribute = 'attribute',\n  AttributeValue = 'attributeValue',\n  PropName = 'propName',\n  EventName = 'eventName',\n  DirectiveName = 'directiveName',\n  DirectiveArg = 'directiveArg',\n  DirectiveValue = 'directiveValue',\n  DirectiveModifier = 'directiveModifier',\n  Interpolation = 'interpolation',\n}\n\ninterface BaseTemplateContext extends SearchResult {\n  kind: TemplateContextKind\n  document: VueSFCDocument\n  block: Exclude<VueSFCDocument['descriptor']['template'], null>\n  template: RootNode\n  offsetInDocument: number\n  offsetInTemplate: number\n  offsetInGenerated: number\n}\n\nexport interface TagTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.Tag\n  element: ElementNode\n  tag: 'open' | 'close'\n}\nexport interface AttributeTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.Attribute\n  element: ElementNode\n  attribute?: AttributeNode\n}\nexport interface AttributeValueTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.AttributeValue\n  element: ElementNode\n  attribute: AttributeNode\n}\nexport interface PropNameTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.PropName\n  element: ElementNode\n  prop: DirectiveNode\n}\nexport interface EventNameTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.EventName\n  element: ElementNode\n  event: DirectiveNode\n}\n\nexport interface DirectiveNameTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.DirectiveName\n  element: ElementNode\n  directive: DirectiveNode\n}\n\nexport interface DirectiveArgTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.DirectiveArg\n  element: ElementNode\n  directive: DirectiveNode\n}\nexport interface DirectiveValueTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.DirectiveValue\n  element: ElementNode\n  directive: DirectiveNode\n}\n\nexport interface DirectiveModifierTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.DirectiveModifier\n  element: ElementNode\n  directive: DirectiveNode\n}\n\nexport interface InterpolationTemplateContext extends BaseTemplateContext {\n  kind: TemplateContextKind.Interpolation\n  interpolation: InterpolationNode\n}\n\nexport type TemplateContext =\n  | TagTemplateContext\n  | AttributeTemplateContext\n  | AttributeValueTemplateContext\n  | PropNameTemplateContext\n  | EventNameTemplateContext\n  | DirectiveNameTemplateContext\n  | DirectiveArgTemplateContext\n  | DirectiveValueTemplateContext\n  | DirectiveModifierTemplateContext\n  | InterpolationTemplateContext\n\n@injectable()\nexport class TemplateContextService {\n  public getContext(\n    document: VueSFCDocument,\n    offsetInDocument: number,\n  ): TemplateContext | null {\n    const block = document.descriptor.template\n    if (block == null) return null\n    const template = document.templateAST\n    if (template == null) return null\n    const offsetInGenerated = document.generatedOffsetAt(offsetInDocument)\n    if (offsetInGenerated == null) return null\n    const offsetInTemplate = offsetInDocument - block.loc.start.offset\n    const { node, ancestors } = findTemplateNodeAt(template, offsetInTemplate)\n    if (node == null) return null\n    const shared = {\n      document,\n      block,\n      template,\n      offsetInDocument,\n      offsetInTemplate,\n      offsetInGenerated,\n      node,\n      ancestors,\n    }\n\n    if (isElementNode(node)) {\n      const tag = node.tag.trim()\n      const inTagName = isOffsetInSourceLocation(node.tagLoc, offsetInTemplate)\n      const inCloseTag =\n        !node.isSelfClosing &&\n        isOffsetInSourceLocation(node.endTagLoc, offsetInTemplate)\n      if (tag === '' || inTagName || inCloseTag) {\n        return {\n          kind: TemplateContextKind.Tag,\n          ...shared,\n          element: node,\n          tag: inCloseTag ? 'close' : 'open',\n        }\n      }\n\n      return {\n        kind: TemplateContextKind.Attribute,\n        ...shared,\n        element: node,\n      }\n    } else if (isAttributeNode(node)) {\n      const element = last(ancestors).node\n      invariant(isElementNode(element), 'Expected element node.')\n\n      const inAttributeName = isOffsetInSourceLocation(\n        node.nameLoc,\n        offsetInTemplate,\n      )\n      if (inAttributeName) {\n        return {\n          kind: TemplateContextKind.Attribute,\n          ...shared,\n          element,\n          attribute: node,\n        }\n      }\n\n      return {\n        kind: TemplateContextKind.AttributeValue,\n        ...shared,\n        element,\n        attribute: node,\n      }\n    } else if (isDirectiveNode(node)) {\n      const element = last(ancestors).node\n      invariant(isElementNode(element), 'Expected element node.')\n      const isLongHand = node.loc.source.startsWith('v-')\n      const nameEndOffset = isLongHand\n        ? node.loc.start.offset + node.name.length + 2\n        : node.loc.start.offset + 1\n\n      const text = node.loc.source.slice(\n        0,\n        offsetInTemplate - node.loc.start.offset,\n      )\n      const inDirectiveArg =\n        isOffsetInSourceLocation(node.arg?.loc, offsetInTemplate) ||\n        (isLongHand\n          ? offsetInTemplate === nameEndOffset + 1\n          : offsetInTemplate === nameEndOffset)\n\n      if (inDirectiveArg) {\n        if (node.name === 'bind') {\n          return {\n            kind: TemplateContextKind.PropName,\n            ...shared,\n            element,\n            prop: node,\n          }\n        }\n\n        if (node.name === 'on') {\n          return {\n            kind: TemplateContextKind.EventName,\n            ...shared,\n            element,\n            event: node,\n          }\n        }\n\n        return {\n          kind: TemplateContextKind.DirectiveArg,\n          ...shared,\n          element,\n          directive: node,\n        }\n      }\n\n      const modifierOffset =\n        node.arg != null ? node.arg.loc.end.offset : nameEndOffset\n\n      if (offsetInTemplate > modifierOffset && /\\.[a-z0-9_-]*$/i.test(text)) {\n        return {\n          kind: TemplateContextKind.DirectiveModifier,\n          ...shared,\n          element,\n          directive: node,\n        }\n      }\n\n      if (\n        text.trim().endsWith('=') ||\n        (node.exp != null && node.loc.end.offset === offsetInTemplate)\n      ) {\n        return {\n          kind: TemplateContextKind.DirectiveValue,\n          ...shared,\n          element,\n          directive: node,\n        }\n      }\n\n      return {\n        kind: TemplateContextKind.DirectiveName,\n        ...shared,\n        element,\n        directive: node,\n      }\n    } else if (isInterpolationNode(node)) {\n      return {\n        kind: TemplateContextKind.Interpolation,\n        ...shared,\n        interpolation: node,\n      }\n    } else if (isSimpleExpressionNode(node) && ancestors.length > 0) {\n      const parent = last(ancestors).node\n      if (isDirectiveNode(parent)) {\n        // expression can be either directive value or directive arg\n        const element = last(ancestors, 2).node\n\n        invariant(isElementNode(element), 'Expected element node.')\n        const inDirectiveValue = isOffsetInSourceLocation(\n          parent.exp?.loc,\n          offsetInTemplate,\n        )\n\n        if (inDirectiveValue) {\n          return {\n            kind: TemplateContextKind.DirectiveValue,\n            ...shared,\n            element,\n            directive: parent,\n          }\n        }\n\n        if (parent.name === 'bind') {\n          return {\n            kind: TemplateContextKind.PropName,\n            ...shared,\n            element,\n            prop: parent,\n          }\n        }\n\n        if (parent.name === 'on') {\n          return {\n            kind: TemplateContextKind.EventName,\n            ...shared,\n            element,\n            event: parent,\n          }\n        }\n\n        return {\n          kind: TemplateContextKind.DirectiveArg,\n          ...shared,\n          element,\n          directive: parent,\n        }\n      }\n\n      if (isInterpolationNode(parent)) {\n        return {\n          kind: TemplateContextKind.Interpolation,\n          ...shared,\n          interpolation: parent,\n        }\n      }\n    } else if (isCommentNode(node)) {\n      if (node.loc.source.startsWith('</')) {\n        // bogus comment node for close tag\n        const element = last(ancestors).node\n        invariant(isElementNode(element), 'Expected element node.')\n        return {\n          kind: TemplateContextKind.Tag,\n          ...shared,\n          element,\n          tag: 'close',\n        }\n      }\n    } else if (isTextNode(node)) {\n      const parent = last(ancestors).node\n      if (isAttributeNode(parent)) {\n        const element = last(ancestors, 2).node\n        invariant(isElementNode(element), 'Expected element node.')\n\n        return {\n          kind: TemplateContextKind.AttributeValue,\n          ...shared,\n          element,\n          attribute: parent,\n        }\n      }\n    }\n\n    return null\n  }\n\n  public getAttributeCompletionOffset(\n    document: VueSFCDocument,\n    element: ElementNode,\n  ): number | null {\n    if (document.descriptor.template == null) return null\n    const offset =\n      document.descriptor.template.loc.start.offset +\n      element.tagLoc.start.offset\n    const generated = document.generatedOffsetAt(offset)\n    if (generated == null) return null\n    const result = document.generated\n      .getText()\n      .indexOf(annotations.tsxCompletions, generated)\n    if (result === -1) return null\n    return result\n  }\n}\n", "import { ComponentNode } from '@vuedx/template-ast-types'\nimport { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport { TypeScript } from '../contracts/TypeScript'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\nexport interface ComponentSlotsInfo {\n  component: TypeScript.Node\n  slots: TypeScript.Symbol[]\n}\n\n@injectable()\nexport class TemplateSlotsService {\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n  ) {}\n\n  public getSlotsInfo(\n    document: VueSFCDocument,\n    component: ComponentNode,\n  ): ComponentSlotsInfo | undefined {\n    const template = document.descriptor.template\n    if (template == null) return\n    const generatedPosition = document.generatedOffsetAt(\n      component.startTagLoc.end.offset + template.loc.start.offset,\n    )\n    if (generatedPosition == null) return\n    const program = this.ts.service.getProgram()\n    if (program == null) return\n    const sourceFile = program.getSourceFile(document.generatedFileName)\n    if (sourceFile == null) return\n    const checker = program.getTypeChecker()\n    const node = this.ts.getTokenAtPosition(sourceFile, generatedPosition)\n    if (node == null) return\n    if (!this.ts.lib.isJsxOpeningElement(node)) return\n    const tagName = checker.getSymbolAtLocation(node.tagName)\n    if (tagName == null) return\n    const componentType = checker.getDeclaredTypeOfSymbol(tagName)\n    const props = checker.getPropertyOfType(componentType, '$props')\n    if (props == null) return\n    const propsType = checker.getTypeOfSymbolAtLocation(props, node)\n    const slots = checker.getPropertyOfType(propsType, '$slots')\n    if (slots == null) return\n    const slotsType = checker.getTypeOfSymbolAtLocation(slots, node)\n    const slotNames = checker.getPropertiesOfType(slotsType)\n    return { component: node, slots: slotNames }\n  }\n}\n", "import { VueProject } from '@vuedx/projectconfig'\nimport { isHTMLTag, isSVGTag, lcfirst, ucfirst } from '@vuedx/shared'\nimport { isComponentNode } from '@vuedx/template-ast-types'\nimport { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { LoggerService } from '../services/LoggerService'\nimport {\n  TemplateContextKind,\n  TemplateContextService,\n} from '../services/TemplateContextService'\nimport { TemplateSlotsService } from '../services/TemplateSlotsService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class CompletionsService\n  implements\n    Pick<\n      TSLanguageService,\n      | 'getCompletionsAtPosition'\n      | 'getCompletionEntryDetails'\n      | 'getCompletionEntrySymbol'\n      | 'getDocCommentTemplateAtPosition'\n      | 'getJsxClosingTagAtPosition'\n    >\n{\n  public readonly logger = new LoggerService(CompletionsService)\n\n  constructor(\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(TemplateSlotsService)\n    private readonly slots: TemplateSlotsService,\n    @inject(TemplateContextService)\n    private readonly template: TemplateContextService,\n  ) {}\n\n  // TODO: provide component completions\n  // TODO: provide attribute, property and event completions for props and events.\n  // TODO: provide modifiers completions for directives.\n\n  public getCompletionsAtPosition(\n    fileName: string,\n    position: number,\n    options: TypeScript.GetCompletionsAtPositionOptions | undefined,\n  ): TypeScript.WithMetadata<TypeScript.CompletionInfo> | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.processCompletionInfo(\n          this.ts.service.getCompletionsAtPosition(\n            file.generatedFileName,\n            generatedPosition,\n            options,\n          ),\n        )\n      },\n      template: (file) => {\n        const context = this.template.getContext(file, position)\n        if (context == null) return\n\n        this.logger.debug('@@@ completion', context)\n\n        if (context.kind === TemplateContextKind.Attribute) {\n          const before = context.offsetInGenerated\n          context.offsetInGenerated =\n            this.template.getAttributeCompletionOffset(\n              context.document,\n              context.element,\n            ) ?? context.offsetInGenerated\n          this.logger.debug('@@@ completion', { before }, context)\n        }\n\n        if (context.kind === TemplateContextKind.DirectiveArg) {\n          if (\n            context.directive.name === 'slot' &&\n            isComponentNode(context.element)\n          ) {\n            // This should be a separate service.\n            const result = this.slots.getSlotsInfo(file, context.element)\n            if (result == null) return\n\n            return this.processCompletionInfo({\n              isNewIdentifierLocation: false,\n              isGlobalCompletion: false,\n              isMemberCompletion: false,\n              entries: result.slots.map((slot) => ({\n                name: slot.getName(),\n                kind: this.ts.lib.ScriptElementKind.variableElement,\n                sortText: slot.getName(),\n                // TODO: add replacement range from directive.arg\n                // TODO: add displayParts\n              })),\n            })\n          }\n        }\n\n        return this.processCompletionInfo(\n          this.ts.service.getCompletionsAtPosition(\n            file.generatedFileName,\n            context.offsetInGenerated,\n            options,\n          ),\n          context.kind,\n          this.ts.getVueProjectFor(fileName),\n        )\n      },\n    })\n  }\n\n  public getCompletionEntryDetails(\n    fileName: string,\n    position: number,\n    entryName: string,\n    formatOptions:\n      | TypeScript.FormatCodeOptions\n      | TypeScript.FormatCodeSettings\n      | undefined,\n    source: string | undefined,\n    preferences: TypeScript.UserPreferences | undefined,\n    data: TypeScript.CompletionEntryData | undefined,\n  ): TypeScript.CompletionEntryDetails | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.processCompletionEntryDetails(\n          this.ts.service.getCompletionEntryDetails(\n            file.generatedFileName,\n            generatedPosition,\n            entryName,\n            formatOptions,\n            source,\n            preferences,\n            data,\n          ),\n        )\n      },\n      template: (file) => {\n        const context = this.template.getContext(file, position)\n        if (context == null) return\n\n        if (context.kind === TemplateContextKind.Attribute) {\n          context.offsetInGenerated =\n            this.template.getAttributeCompletionOffset(\n              context.document,\n              context.element,\n            ) ?? context.offsetInGenerated\n        }\n\n        const actualEntryName =\n          context.kind === TemplateContextKind.EventName\n            ? `on${ucfirst(entryName)}`\n            : context.kind === TemplateContextKind.Attribute\n            ? entryName.replace(/^(v-(?:bind|on):|[@:^.])/, '')\n            : entryName\n\n        return this.processCompletionEntryDetails(\n          this.ts.service.getCompletionEntryDetails(\n            file.generatedFileName,\n            context.offsetInGenerated,\n            actualEntryName,\n            formatOptions,\n            source,\n            preferences,\n            data,\n          ),\n          entryName,\n        )\n      },\n    })\n  }\n\n  public getCompletionEntrySymbol(\n    fileName: string,\n    position: number,\n    name: string,\n    source: string | undefined,\n  ): TypeScript.Symbol | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.ts.service.getCompletionEntrySymbol(\n          file.generatedFileName,\n          generatedPosition,\n          name,\n          source,\n        )\n      },\n    })\n  }\n\n  public getDocCommentTemplateAtPosition(\n    fileName: string,\n    position: number,\n    options?: TypeScript.DocCommentTemplateOptions,\n  ): TypeScript.TextInsertion | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.ts.service.getDocCommentTemplateAtPosition(\n          file.generatedFileName,\n          generatedPosition,\n          options,\n        )\n      },\n    })\n  }\n\n  public getJsxClosingTagAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.JsxClosingTagInfo | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.ts.service.getJsxClosingTagAtPosition(\n          file.generatedFileName,\n          generatedPosition,\n        )\n      },\n    })\n  }\n\n  private pick<R>(\n    fileName: string,\n    position: number,\n    fns: Record<string, (file: VueSFCDocument) => R>,\n  ): R | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const block = file.getBlockAt(position)\n    if (block == null) return\n    const fn = fns[block.type]\n    if (fn == null) return\n    return fn(file)\n  }\n\n  public processCompletionInfo<T extends TypeScript.CompletionInfo | undefined>(\n    info: T,\n    kind?: TemplateContextKind,\n    project?: VueProject,\n  ): T {\n    if (info == null) return info\n\n    const isLonghand =\n      project?.config.preferences.template.directiveSyntax === 'longhand'\n    const vOn = isLonghand ? 'v-on:' : '@'\n    const vBind = isLonghand ? 'v-bind:' : ':'\n\n    return {\n      ...info,\n      entries: info.entries.flatMap((entry) => {\n        if (entry.name.startsWith('__VueDX_')) return [] // exclude internals\n        if (kind === TemplateContextKind.Tag) {\n          if (\n            entry.kind === this.ts.lib.ScriptElementKind.alias ||\n            entry.kind === this.ts.lib.ScriptElementKind.classElement\n          ) {\n            if (\n              /^[A-Z]/.test(entry.name) &&\n              entry.kindModifiers?.includes('export') === true\n            ) {\n              return [entry]\n            }\n          }\n\n          if (\n            entry.kind === this.ts.lib.ScriptElementKind.memberVariableElement\n          ) {\n            // TODO: filter depending on svg/html context\n            if (isHTMLTag(entry.name) || isSVGTag(entry.name)) return [entry]\n          }\n\n          return []\n        }\n\n        if (\n          kind === TemplateContextKind.Attribute ||\n          kind === TemplateContextKind.EventName ||\n          kind === TemplateContextKind.PropName\n        ) {\n          if (entry.name === '$slots') return []\n          if (\n            entry.kind === this.ts.lib.ScriptElementKind.memberVariableElement // TODO: check others\n          ) {\n            if (entry.name.startsWith('on')) {\n              if (kind === TemplateContextKind.PropName) return []\n              const arg = lcfirst(entry.name.slice(2))\n              const name = kind === 'attribute' ? `${vOn}${arg}` : `${arg}`\n              const insertText =\n                entry.insertText != null\n                  ? entry.isSnippet\n                    ? `${name}=\"$1\"`\n                    : name\n                  : undefined\n\n              return [{ ...entry, name, insertText }]\n            } else if (kind !== TemplateContextKind.EventName) {\n              const attribute = {\n                ...entry,\n                insertText:\n                  entry.insertText != null\n                    ? entry.isSnippet\n                      ? `${entry.name}=\"$1\"`\n                      : entry.name\n                    : undefined,\n              }\n              const prop = {\n                ...entry,\n                name: `${vBind}${entry.name}`,\n                insertText:\n                  entry.insertText != null\n                    ? entry.isSnippet\n                      ? `${vBind}${entry.name}=\"$1\"`\n                      : entry.name\n                    : undefined,\n              }\n\n              return kind === TemplateContextKind.Attribute\n                ? [attribute, prop]\n                : [attribute]\n            }\n          }\n\n          return []\n        }\n\n        return [entry]\n      }),\n    }\n  }\n\n  public processCompletionEntryDetails(\n    entryDetails: TypeScript.CompletionEntryDetails | undefined,\n    entryName?: string,\n  ): TypeScript.CompletionEntryDetails | undefined {\n    if (entryDetails == null) return entryDetails\n\n    return {\n      ...entryDetails,\n      name: entryName ?? entryDetails.name,\n      codeActions: entryDetails.codeActions?.flatMap((action) => {\n        const changes = this.fs.resolveAllFileTextChanges(action.changes)\n        if (changes.length === 0) return []\n        return { ...action, changes }\n      }),\n    }\n  }\n}\n", "import { annotations } from '@vuedx/compiler-tsx'\nimport { debug, versioned } from '@vuedx/shared'\nimport {\n  ComponentNode,\n  findTemplateNodeAt,\n  isComponentNode,\n  Node,\n  SearchResult,\n} from '@vuedx/template-ast-types'\nimport { TextSpan, VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport { isOffsetInSourceLocation } from '../helpers/isOffsetInSourceLocation'\nimport { FilesystemService } from './FilesystemService'\nimport { LoggerService } from './LoggerService'\nimport { TypescriptContextService } from './TypescriptContextService'\n\nexport interface TemplateVariableDeclaration {\n  kind: 'variable' | 'hoist' | 'setup' | 'identifier'\n  id: string\n  name: TextSpan\n  initializer: TextSpan\n  references: TextSpan[]\n}\n\nexport interface ComponentExportDeclaration {\n  kind: 'component'\n  id: string\n  name: TextSpan\n  region: TextSpan\n}\n\nexport type TemplateDeclaration =\n  | TemplateVariableDeclaration\n  | ComponentExportDeclaration\n\nexport interface SFCTemplateDeclarations {\n  declarations: TemplateDeclaration[]\n  byLine: Map<number, TemplateDeclaration>\n}\n\nexport const enum GeneratedPositionKind {\n  UNKNOWN,\n  COMPONENT_TAG_EXPRESSION,\n  TEMPLATE_NODE,\n}\n\n@injectable()\nexport class TemplateDeclarationsService {\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n  ) {}\n\n  public readonly logger = new LoggerService(TemplateDeclarationsService)\n\n  /** Used by caches */\n  public getVersion(fileName: string): string {\n    return this.fs.getVersion(fileName.replace(/:.*$/, '')) // remove :{position}\n  }\n\n  public getTemplateDeclarationAt(\n    fileName: string,\n    offset: number,\n  ): TemplateDeclaration | null {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return null\n    const declarations = this.getTemplateDeclaration(fileName)\n    const { line, character } = file.generated.positionAt(offset)\n    this.logger.debug(\n      `Line(${line}:${character}): ${this.fs.getLineText(file, offset)}`,\n    )\n    return declarations.byLine.get(line) ?? null\n  }\n\n  @versioned()\n  public getTemplateDeclaration(fileName: string): SFCTemplateDeclarations {\n    const output: SFCTemplateDeclarations = {\n      declarations: [],\n      byLine: new Map<number, TemplateVariableDeclaration>(),\n    }\n\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return output\n    const contents = file.getText()\n\n    const ContextVariableRE =\n      /(?<prefixInitializer>(?<prefixName>let )(?<name>[A-Za-z$_][A-Za-z0-9$_]*) = )(?<initializer>.*)/\n    const HoistedVariableRE =\n      /(?<prefixInitializer>(?<prefixName>const )(?<name>[A-Za-z$_][A-Za-z0-9$_]*) = )(?<initializer>.*)/\n    findAnnotatedTextRanges(\n      contents,\n      annotations.templateGlobals.start,\n      annotations.templateGlobals.end,\n    ).forEach(({ start, end }) => {\n      const position = file.positionAt(start)\n      contents\n        .slice(start, end)\n        .split('\\n')\n        .forEach((line, index) => {\n          const result =\n            ContextVariableRE.exec(line) ?? HoistedVariableRE.exec(line)\n          if (result?.groups == null) return\n          const { name, prefixName, initializer, prefixInitializer } =\n            result.groups as {\n              name: string\n              initializer: string\n              prefixName: string\n              prefixInitializer: string\n            }\n          const offset = file.offsetAt({\n            line: position.line + index,\n            character: result.index,\n          })\n\n          const declaration: TemplateVariableDeclaration = {\n            kind: line.trim().startsWith('let ')\n              ? 'variable'\n              : line.includes('_get_identifier_') && line.includes('() =>')\n              ? 'identifier'\n              : 'hoist',\n            id: name,\n            name: {\n              start: offset + prefixName.length,\n              length: name.length,\n            },\n            initializer: {\n              start: offset + prefixInitializer.length,\n              length: initializer.length,\n            },\n            references: [],\n          }\n\n          const references = this.ts.service.getReferencesAtPosition(\n            file.generatedFileName,\n            declaration.name.start,\n          )\n\n          if (references != null) {\n            declaration.references = references\n              .map((reference) => ({\n                start: reference.textSpan.start,\n                length: reference.textSpan.length,\n              }))\n              .filter((reference) => reference.start !== declaration.name.start)\n          }\n\n          output.declarations.push(declaration)\n          output.byLine.set(position.line + index, declaration)\n        })\n    })\n\n    findAnnotatedTextRanges(\n      contents,\n      annotations.setupGlobals.start,\n      annotations.setupGlobals.end,\n    ).forEach(({ start, end }) => {\n      const position = file.positionAt(start)\n      contents\n        .slice(start, end)\n        .split('\\n')\n        .forEach((line, index) => {\n          if (line.trim().length === 0) return\n          if (line.trim().startsWith('return')) return\n          if (line.trim().startsWith('}')) return\n\n          const offset = file.offsetAt({\n            line: position.line + index,\n            character: line.length - line.trimLeft().length,\n          })\n          const id = line.trim().replace(',', '')\n          const declaration: TemplateVariableDeclaration = {\n            kind: 'setup',\n            id,\n            name: { start: offset, length: id.length },\n            initializer: { start: offset, length: id.length },\n            references: [],\n          }\n\n          const references = this.ts.service.getReferencesAtPosition(\n            file.generatedFileName,\n            declaration.name.start,\n          )\n\n          const definitions = this.ts.service.getDefinitionAtPosition(\n            file.generatedFileName,\n            declaration.name.start,\n          )\n\n          if (definitions != null) {\n            const definition = definitions.find(\n              (definition) => definition.fileName === file.generatedFileName,\n            )\n\n            if (definition != null) {\n              declaration.initializer = {\n                start: definition.textSpan.start,\n                length: definition.textSpan.length,\n              }\n            }\n          }\n\n          if (references != null) {\n            declaration.references = references\n              .filter(\n                (reference) => reference.fileName === file.generatedFileName,\n              )\n              .map((reference) => ({\n                start: reference.textSpan.start,\n                length: reference.textSpan.length,\n              }))\n              .filter((reference) => {\n                if (\n                  // ignore reference in return statement\n                  reference.start === declaration.name.start ||\n                  // ignore reference in definition\n                  reference.start === declaration.initializer.start\n                ) {\n                  return false\n                } else {\n                  return true\n                }\n              })\n          }\n\n          output.declarations.push(declaration)\n          output.byLine.set(position.line + index, declaration)\n\n          this.logger.debug('Setup Declaration', declaration)\n        })\n    })\n\n    findAnnotatedTextRanges(\n      contents,\n      '//#region public component definition',\n      '//#endregion',\n    ).forEach(({ start, end }) => {\n      const prefixText = 'export default class '\n      const chunk = contents.slice(start, end)\n      let index = chunk.indexOf(prefixText)\n      if (index < 0) return\n      index += prefixText.length\n      const name: TextSpan = {\n        start: start + index,\n        length: chunk.indexOf(' ', index) - index,\n      }\n      const declaration: ComponentExportDeclaration = {\n        id: contents.slice(name.start, name.start + name.length),\n        kind: 'component',\n        name,\n        region: { start, length: end - start },\n      }\n\n      output.declarations.push(declaration)\n      const { line } = file.positionAt(declaration.name.start)\n      output.byLine.set(line, declaration)\n    })\n\n    return output\n  }\n\n  @versioned()\n  public getUndefinedGlobals(fileName: string): TemplateVariableDeclaration[] {\n    const globals: TemplateVariableDeclaration[] = []\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return globals\n\n    const templateGlobals = this.getTemplateDeclaration(\n      file.originalFileName,\n    ).declarations.filter((declaration) => declaration.kind === 'variable')\n\n    if (templateGlobals.length === 0) return globals\n    const sourceFile = this.ts.getSourceFile(file.generatedFileName)\n    if (sourceFile == null) return globals\n    const typeChecker = this.ts.service.getProgram()?.getTypeChecker()\n    if (typeChecker == null) return globals\n    templateGlobals.forEach((declaration) => {\n      if (declaration.kind === 'component') return\n      const node = this.ts.getTokenAtPosition(\n        sourceFile,\n        declaration.name.start,\n      )\n\n      const type = typeChecker.getTypeAtLocation(node)\n      if (type.getFlags() === this.ts.lib.TypeFlags.Never) {\n        this.logger.debug(`Literal type \u2014 ${declaration.id}`, type)\n        globals.push(declaration)\n      }\n    })\n\n    return globals\n  }\n\n  @versioned(([file, position]: [VueSFCDocument, number]) => {\n    return `${file.originalFileName}:${position}`\n  })\n  public findTemplateNode(\n    file: VueSFCDocument,\n    position: number,\n  ): SearchResultWithLocation {\n    const fallback: SearchResultWithLocation = {\n      node: null,\n      templateRange: { start: 0, length: 0 },\n      ancestors: [],\n    }\n    if (file.templateAST == null) return fallback\n    const block = file.descriptor.template\n    if (block == null) return fallback\n    if (position < block.loc.start.offset || position > block.loc.end.offset) {\n      return fallback\n    }\n    const offset = position - block.loc.start.offset\n\n    return {\n      ...findTemplateNodeAt(file.templateAST, offset),\n      templateRange: {\n        start: block.loc.start.offset,\n        length: block.loc.end.offset - block.loc.start.offset,\n      },\n    }\n  }\n\n  @debug(true, (file: VueSFCDocument, position) => [\n    file.originalFileName,\n    position,\n  ])\n  @versioned(([file, position]: [VueSFCDocument, number]) => {\n    return `${file.originalFileName}:${position}`\n  })\n  public findGeneratedPosition(\n    file: VueSFCDocument,\n    position: number,\n  ):\n    | { kind: GeneratedPositionKind.UNKNOWN; position: number }\n    | {\n        kind: GeneratedPositionKind.COMPONENT_TAG_EXPRESSION\n        position: number\n        node: ComponentNode\n        templateRange: TextSpan\n        tagType: 'start' | 'end'\n      }\n    | {\n        kind: GeneratedPositionKind.TEMPLATE_NODE\n        position: number\n        node: Node\n        templateRange: TextSpan\n      }\n    | null {\n    const { node, templateRange } = this.findTemplateNode(file, position)\n\n    if (isComponentNode(node)) {\n      const offset = position - templateRange.start\n      const inOpenTag = isOffsetInSourceLocation(node.tagLoc, offset)\n      const inCloseTag = isOffsetInSourceLocation(node.endTagLoc, offset)\n      if (inOpenTag || inCloseTag) {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition != null) {\n          const definition = this.ts.service.getDefinitionAndBoundSpan(\n            file.generatedFileName,\n            generatedPosition,\n          )\n\n          if (definition != null) {\n            return {\n              kind: GeneratedPositionKind.COMPONENT_TAG_EXPRESSION,\n              position: definition.textSpan.start,\n              node,\n              templateRange,\n              tagType: inOpenTag ? 'start' : 'end',\n            }\n          }\n        }\n      }\n    }\n\n    const generatedPosition = file.generatedOffsetAt(position)\n    if (generatedPosition == null) return null\n    if (node != null)\n      return {\n        kind: GeneratedPositionKind.TEMPLATE_NODE,\n        position: generatedPosition,\n        node,\n        templateRange,\n      }\n    return { kind: GeneratedPositionKind.UNKNOWN, position: generatedPosition }\n  }\n}\n\nfunction findAnnotatedTextRanges(\n  code: string,\n  openTag: string,\n  closeTag: string,\n): Array<{ start: number; end: number }> {\n  let lastIndex = 0\n  const ranges: Array<{ start: number; end: number }> = []\n  while (lastIndex < code.length) {\n    let start = code.indexOf(openTag, lastIndex)\n    if (start < 0) break\n    start += openTag.length\n    let end = code.indexOf(closeTag, start)\n    if (end < 0) {\n      end = code.length\n    }\n\n    ranges.push({ start, end })\n\n    lastIndex = end\n  }\n\n  return ranges\n}\n\nexport interface SearchResultWithLocation extends SearchResult {\n  templateRange: TextSpan\n}\n", "import { createCache, debug } from '@vuedx/shared'\nimport { inject, injectable } from 'inversify'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { LoggerService } from '../services/LoggerService'\nimport {\n  GeneratedPositionKind,\n  TemplateDeclarationsService,\n} from '../services/TemplateDeclarationsService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class DefinitionService\n  implements\n    Pick<\n      TSLanguageService,\n      | 'getDefinitionAtPosition'\n      | 'getDefinitionAndBoundSpan'\n      | 'getTypeDefinitionAtPosition'\n    >\n{\n  public readonly logger = new LoggerService(DefinitionService)\n  public readonly processDefinitionInfoCache = createCache<\n    string,\n    TypeScript.DefinitionInfo[]\n  >()\n\n  public constructor(\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(TemplateDeclarationsService)\n    private readonly declarations: TemplateDeclarationsService,\n  ) {}\n\n  @debug()\n  public getDefinitionAtPosition(\n    fileName: string,\n    position: number,\n  ): readonly TypeScript.DefinitionInfo[] | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const generatedPosition = this.declarations.findGeneratedPosition(\n      file,\n      position,\n    )\n\n    if (generatedPosition == null) return\n\n    if (\n      generatedPosition.kind === GeneratedPositionKind.COMPONENT_TAG_EXPRESSION\n    ) {\n      return this.ts.service.getDefinitionAndBoundSpan(\n        file.generatedFileName,\n        generatedPosition.position,\n      )?.definitions\n    }\n\n    return this.ts.service\n      .getDefinitionAtPosition(\n        file.generatedFileName,\n        generatedPosition.position,\n      )\n      ?.flatMap((definition) => this.processDefinitionInfo(definition))\n  }\n\n  @debug()\n  public getDefinitionAndBoundSpan(\n    fileName: string,\n    position: number,\n  ): TypeScript.DefinitionInfoAndBoundSpan | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const generatedPosition = this.declarations.findGeneratedPosition(\n      file,\n      position,\n    )\n\n    if (generatedPosition == null) {\n      return\n    }\n    // If the generated position is a component, we need to get type definition\n    // instead of definition. This is due to resolveComponent finding component\n    // definition from different sources.\n    if (\n      generatedPosition.kind === GeneratedPositionKind.COMPONENT_TAG_EXPRESSION\n    ) {\n      const definitions = this.ts.service.getDefinitionAtPosition(\n        file.generatedFileName,\n        generatedPosition.position,\n      )\n\n      if (definitions == null) return\n      const loc =\n        generatedPosition.tagType === 'end'\n          ? generatedPosition.node.endTagLoc ?? generatedPosition.node.tagLoc\n          : generatedPosition.node.tagLoc\n\n      return {\n        definitions: definitions.flatMap((definition) =>\n          this.processDefinitionInfo(definition),\n        ),\n        textSpan: {\n          start: generatedPosition.templateRange.start + loc.start.offset,\n          length: loc.end.offset - loc.start.offset,\n        },\n      }\n    }\n\n    const result = this.ts.service.getDefinitionAndBoundSpan(\n      file.generatedFileName,\n      generatedPosition.position,\n    )\n\n    if (result == null) return\n\n    const textSpan = file.findOriginalTextSpan(result.textSpan)\n    if (textSpan == null) return // TODO: Handle this case\n\n    return {\n      textSpan,\n      definitions: result.definitions?.flatMap((definition) =>\n        this.processDefinitionInfo(definition),\n      ),\n    }\n  }\n\n  public getTypeDefinitionAtPosition(\n    fileName: string,\n    position: number,\n  ): readonly TypeScript.DefinitionInfo[] | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const generatedPosition = this.declarations.findGeneratedPosition(\n      file,\n      position,\n    )\n\n    if (generatedPosition == null) return\n\n    if (\n      generatedPosition.kind === GeneratedPositionKind.COMPONENT_TAG_EXPRESSION\n    ) {\n      return this.ts.service.getDefinitionAndBoundSpan(\n        file.generatedFileName,\n        generatedPosition.position,\n      )?.definitions\n    }\n\n    return this.ts.service\n      .getTypeDefinitionAtPosition(\n        file.generatedFileName,\n        generatedPosition.position,\n      )\n      ?.flatMap((definition) => this.processDefinitionInfo(definition))\n  }\n\n  public processDefinitionInfo(\n    definition: TypeScript.DefinitionInfo,\n  ): TypeScript.DefinitionInfo[] {\n    const cacheKey = this.getDefinitionInfoCacheKey(definition)\n    return this.processDefinitionInfoCache.resolve(cacheKey, () => {\n      this.processDefinitionInfoCache.set(cacheKey, []) // prevent infinite recursion.\n      if (!this.fs.isGeneratedVueFile(definition.fileName)) return [definition]\n      const file = this.fs.getVueFile(definition.fileName)\n      if (file == null) return []\n      const textSpan = file.findOriginalTextSpan(definition.textSpan)\n      if (textSpan == null) {\n        // Traverse up the definition chain if there is a template declaration.\n        const templateDeclaration = this.declarations.getTemplateDeclarationAt(\n          file.originalFileName,\n          definition.textSpan.start,\n        )\n        if (templateDeclaration != null) {\n          if (templateDeclaration.kind === 'variable') {\n            return (\n              this.ts.service\n                .getDefinitionAtPosition(\n                  file.generatedFileName,\n                  templateDeclaration.initializer.start + 1,\n                )\n                ?.flatMap((definition) =>\n                  this.processDefinitionInfo(definition),\n                ) ?? []\n            )\n          } else if (templateDeclaration.kind === 'identifier') {\n            const span = this.fs.getTextSpan(\n              file,\n              templateDeclaration.initializer,\n            )\n            return (\n              this.ts.service\n                .getDefinitionAtPosition(\n                  file.generatedFileName,\n                  templateDeclaration.initializer.start +\n                    templateDeclaration.initializer.length -\n                    (span.endsWith(');') ? 2 : 1), // check at the end of the line\n                )\n                ?.flatMap((definition) =>\n                  this.processDefinitionInfo(definition),\n                ) ?? []\n            )\n          } else if (templateDeclaration.kind === 'hoist') {\n            return (\n              this.ts.service // TODO: fix type definition to goto the correct position.\n                .getTypeDefinitionAtPosition(\n                  file.generatedFileName,\n                  templateDeclaration.name.start,\n                )\n                ?.flatMap((definition) =>\n                  this.processDefinitionInfo(definition),\n                ) ?? []\n            )\n          } else if (templateDeclaration.kind === 'component') {\n            return [\n              {\n                ...definition,\n                fileName: file.originalFileName,\n                textSpan: {\n                  start: 0,\n                  length: file.original.getText().length,\n                },\n                contextSpan: undefined,\n              },\n            ]\n          } else {\n            return (\n              this.ts.service\n                .getDefinitionAtPosition(\n                  file.generatedFileName,\n                  templateDeclaration.name.start,\n                )\n                ?.flatMap((definition) =>\n                  this.processDefinitionInfo(definition),\n                ) ?? []\n            )\n          }\n        }\n        return []\n      }\n      const contextSpan =\n        definition.contextSpan != null\n          ? file.findOriginalTextSpan(definition.contextSpan)\n          : null\n\n      return [\n        {\n          ...definition,\n          fileName: file.originalFileName,\n          textSpan,\n          contextSpan: contextSpan ?? undefined,\n        },\n      ]\n    })\n  }\n\n  private getDefinitionInfoCacheKey(\n    definition: TypeScript.DefinitionInfo,\n  ): string {\n    return `${definition.fileName}:${this.fs.getVersion(definition.fileName)}:${\n      definition.textSpan.start\n    }:${definition.textSpan.length}`\n  }\n}\n", "import { versioned } from '@vuedx/shared'\nimport { inject, injectable } from 'inversify'\n\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { LoggerService } from '../services/LoggerService'\nimport { TemplateDeclarationsService } from '../services/TemplateDeclarationsService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class DiagnosticsService\n  implements\n    Pick<\n      TSLanguageService,\n      | 'getSemanticDiagnostics'\n      | 'getSyntacticDiagnostics'\n      | 'getSuggestionDiagnostics'\n    >\n{\n  public readonly logger = new LoggerService(DiagnosticsService.name)\n\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TemplateDeclarationsService)\n    private readonly declarations: TemplateDeclarationsService,\n  ) {}\n\n  public getVersion(fileName: string): string {\n    return this.fs.getVersion(fileName)\n  }\n\n  public getCompilerOptionsDiagnostics(): TypeScript.Diagnostic[] {\n    return this.ts.service.getCompilerOptionsDiagnostics()\n  }\n\n  @versioned()\n  public getSemanticDiagnostics(fileName: string): TypeScript.Diagnostic[] {\n    return this.run(fileName, (fileName) =>\n      this.ts.service.getSemanticDiagnostics(fileName),\n    )\n  }\n\n  @versioned()\n  public getSyntacticDiagnostics(\n    fileName: string,\n  ): TypeScript.DiagnosticWithLocation[] {\n    return this.run(fileName, (fileName) =>\n      this.ts.service.getSyntacticDiagnostics(fileName),\n    )\n  }\n\n  @versioned()\n  public getSuggestionDiagnostics(\n    fileName: string,\n  ): TypeScript.DiagnosticWithLocation[] {\n    return this.run(fileName, (fileName) =>\n      this.ts.service.getSuggestionDiagnostics(fileName),\n    )\n  }\n\n  @versioned()\n  public getVueCompilerDiagnostic(\n    fileName: string,\n  ): TypeScript.DiagnosticWithLocation[] {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return []\n    const diagnostics: TypeScript.DiagnosticWithLocation[] = []\n\n    const category = this.ts.lib.DiagnosticCategory.Error\n    const fakeSourceFile =\n      file.getSourceFile() as unknown as TypeScript.SourceFile\n    const syntax: SyntaxError[] = []\n    for (const error of file.errors) {\n      if ('loc' in error && error.loc != null) {\n        const loc = error.loc\n        const span = (() => {\n          try {\n            return {\n              start: loc.start.offset,\n              length: loc.end.offset - loc.start.offset,\n            }\n          } catch {\n            return { start: 0, length: 1 }\n          }\n        })()\n        this.logger.error('Vue Compiler Error', error.message, error.loc)\n        diagnostics.push({\n          category,\n          code: Number(error.code),\n          ...span,\n          file: fakeSourceFile,\n          messageText: error.message,\n          source: 'VueDX/Compiler',\n        })\n      } else {\n        syntax.push(error)\n      }\n    }\n\n    if (syntax.length > 0) {\n      diagnostics.push({\n        category,\n        code: 0,\n        file: fakeSourceFile,\n        start: 0,\n        length: 1,\n        messageText: 'Vue Compiler Syntax Error',\n        source: 'VueDX/Compiler',\n        relatedInformation: syntax.map((error) => ({\n          category,\n          code: 0,\n          messageText: error.message,\n          file: fakeSourceFile,\n          start: 0,\n          length: 1,\n        })),\n      })\n    }\n\n    diagnostics.push(\n      ...this.declarations\n        .getUndefinedGlobals(fileName)\n        .flatMap((declaration) =>\n          declaration.references.flatMap(\n            (reference): TypeScript.DiagnosticWithLocation[] => {\n              const span = file.findOriginalTextSpan(reference)\n              if (span == null) return []\n              return [\n                {\n                  category: this.ts.lib.DiagnosticCategory.Error,\n                  code: 2322,\n                  source: 'VueDX/Compiler',\n                  file: fakeSourceFile,\n                  ...span,\n                  messageText: `Cannot find name '${declaration.id}'.`,\n                },\n              ]\n            },\n          ),\n        ),\n    )\n\n    return diagnostics\n  }\n\n  private run<\n    T extends TypeScript.Diagnostic | TypeScript.DiagnosticWithLocation,\n  >(fileName: string, fn: (fileName: string) => T[]): T[] {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return []\n\n    const duplicate = new Set<string>()\n\n    return fn(file.generatedFileName)\n      .flatMap((diagnostic) => this.processDiagnostic(diagnostic))\n      .filter((diagnostic) => {\n        if (diagnostic.start == null) return true\n        const key = `${diagnostic.start}:${diagnostic.code}`\n        if (duplicate.has(key)) return false\n        duplicate.add(key)\n        return true\n      })\n  }\n\n  /**\n   * Replace generated .vue.tsx/.vue.jsx file name to original .vue file.\n   * @returns list of diagnostics\n   */\n  public processDiagnosticRelatedInformation(\n    info: TypeScript.DiagnosticRelatedInformation,\n  ): TypeScript.DiagnosticRelatedInformation[] {\n    if (info.file == null || info.start == null) return [info]\n    else if (this.fs.isGeneratedVueFile(info.file.fileName)) {\n      const file = this.fs.getVueFile(info.file.fileName)\n      if (file == null) return []\n\n      const span = file.findOriginalTextSpan({\n        start: info.start,\n        length: info.length ?? 1,\n      })\n\n      if (span == null) return []\n\n      return [\n        {\n          ...info,\n          ...span,\n          file: file.getSourceFile() as unknown as TypeScript.SourceFile,\n        },\n      ]\n    } else {\n      return [info]\n    }\n  }\n\n  /**\n   * Replace generated .vue.tsx/.vue.jsx file with original .vue file.\n   * @returns list of diagnostics\n   */\n  public processDiagnostic<\n    T extends TypeScript.Diagnostic | TypeScript.DiagnosticWithLocation,\n  >(diagnostic: T): T[] {\n    if (diagnostic.file == null) return [diagnostic]\n    if (this.fs.isGeneratedVueFile(diagnostic.file.fileName)) {\n      const file = this.fs.getVueFile(diagnostic.file.fileName)\n      if (file == null) return []\n      const base: T = {\n        ...diagnostic,\n        relatedInformation: diagnostic.relatedInformation?.flatMap((info) =>\n          this.processDiagnosticRelatedInformation(info),\n        ),\n        file: file.getSourceFile() as unknown as TypeScript.SourceFile,\n      }\n\n      if (diagnostic.start != null) {\n        const position = file.generated.positionAt(diagnostic.start)\n        const declaration = this.declarations\n          .getTemplateDeclaration(file.originalFileName)\n          .byLine.get(position.line)\n\n        if (declaration != null && declaration.kind !== 'component') {\n          if (declaration.kind === 'setup') {\n            const span = file.findOriginalTextSpan(declaration.initializer)\n            if (span == null) return []\n\n            return [{ ...base, ...span }]\n          } else {\n            return declaration.references.flatMap((reference) => {\n              const span = file.findOriginalTextSpan({\n                start: reference.start,\n                length: reference.length,\n              })\n\n              if (span == null) return []\n              return [{ ...base, ...span }]\n            })\n          }\n        } else {\n          const span = file.findOriginalTextSpan({\n            start: diagnostic.start,\n            length: diagnostic.length ?? 1,\n          })\n\n          if (span == null) return []\n          return [{ ...base, ...span }]\n        }\n      }\n\n      return [base]\n    }\n    return [diagnostic]\n  }\n}\n", "import { inject, injectable } from 'inversify'\nimport type { OutliningSpan } from 'typescript/lib/tsserverlibrary'\nimport type { TSLanguageService } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class FoldingRangeService\n  implements Pick<TSLanguageService, 'getOutliningSpans'>\n{\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n  ) {}\n\n  public getOutliningSpans(fileName: string): OutliningSpan[] {\n    if (this.fs.isVueFile(fileName)) {\n      const file = this.fs.getVueFile(fileName)\n      if (file == null) return []\n      const blockSpans: OutliningSpan[] = file.blocks.map((block) => {\n        const textSpan = {\n          start: block.loc.start.offset,\n          length: block.loc.end.offset - block.loc.start.offset,\n        }\n\n        return {\n          kind: this.ts.lib.OutliningSpanKind.Region,\n          textSpan,\n          // following properties are not used by the editor\n          hintSpan: textSpan,\n          bannerText: `${block.type} block`,\n          autoCollapse: false,\n        }\n      })\n\n      return blockSpans\n    } else {\n      return this.ts.service.getOutliningSpans(fileName)\n    }\n  }\n}\n", "import { inject, injectable } from 'inversify'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class ImplementationService\n  implements Pick<TSLanguageService, 'getImplementationAtPosition'>\n{\n  public constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n  ) {}\n\n  public getImplementationAtPosition(\n    fileName: string,\n    position: number,\n  ): readonly TypeScript.ImplementationLocation[] | undefined {\n    if (this.fs.isVueFile(fileName)) return\n    return this.ts.service.getImplementationAtPosition(fileName, position)\n  }\n}\n", "import { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport type Typescript from 'typescript/lib/tsserverlibrary'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { LoggerService } from '../services/LoggerService'\nimport { TemplateDeclarationsService } from '../services/TemplateDeclarationsService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class QuickInfoService {\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TemplateDeclarationsService)\n    private readonly declarations: TemplateDeclarationsService,\n  ) {}\n\n  public readonly logger = new LoggerService(QuickInfoService)\n\n  public getQuickInfoAtPosition(\n    fileName: string,\n    position: number,\n  ): Typescript.QuickInfo | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.processQuickInfo(\n          file,\n          this.ts.service.getQuickInfoAtPosition(\n            file.generatedFileName,\n            generatedPosition,\n          ),\n        )\n      },\n      template: (file) => {\n        const generatedPosition = this.declarations.findGeneratedPosition(\n          file,\n          position,\n        )\n        if (generatedPosition == null) return\n\n        const result = this.ts.service.getQuickInfoAtPosition(\n          file.generatedFileName,\n          generatedPosition.position,\n        )\n        if (result == null) return\n        const name = this.fs.getTextSpan(file, result.textSpan)\n\n        const isUndefinedGlobal = this.declarations\n          .getUndefinedGlobals(file.originalFileName)\n          .some(\n            (declaration) =>\n              declaration.id === name &&\n              declaration.references.some(\n                (reference) => reference.start === result.textSpan.start,\n              ),\n          )\n\n        if (isUndefinedGlobal) {\n          return // if undefined global, don't show quick info\n        }\n\n        return this.processQuickInfo(file, result)\n      },\n    })\n  }\n\n  private pick<R>(\n    fileName: string,\n    position: number,\n    fns: Record<string, (file: VueSFCDocument) => R>,\n  ): R | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const block = file.getBlockAt(position)\n    if (block == null) return\n    const fn = fns[block.type]\n    if (fn == null) return\n    return fn(file)\n  }\n\n  private processQuickInfo(\n    file: VueSFCDocument,\n    quickInfo: Typescript.QuickInfo | undefined,\n  ): Typescript.QuickInfo | undefined {\n    if (quickInfo == null) return\n    const textSpan = file.findOriginalTextSpan(quickInfo.textSpan)\n    if (textSpan == null) return\n\n    return {\n      ...quickInfo,\n      textSpan,\n      displayParts: quickInfo.displayParts?.map((part) => {\n        return {\n          ...part,\n          text: part.text.replace('__VueDX_', ''),\n        }\n      }),\n    }\n  }\n}\n", "import { inject, injectable } from 'inversify'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class RefactorService\n  implements Pick<TSLanguageService, 'organizeImports'>\n{\n  constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n  ) {}\n\n  public organizeImports(\n    args: TypeScript.OrganizeImportsArgs,\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences | undefined,\n  ): readonly TypeScript.FileTextChanges[] {\n    const file = this.fs.getVueFile(args.fileName)\n    if (file == null) return []\n\n    return this.fs.resolveAllFileTextChanges(\n      this.ts.service.organizeImports(\n        { ...args, fileName: file.generatedFileName },\n        formatOptions,\n        preferences,\n      ),\n    )\n  }\n}\n", "import { first } from '@vuedx/shared'\nimport { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport type { TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TemplateDeclarationsService } from '../services/TemplateDeclarationsService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\nimport { DefinitionService } from './DefinitionService'\n\n@injectable()\nexport class ReferencesService\n  implements\n    Pick<\n      TypeScript.LanguageService,\n      'getReferencesAtPosition' | 'findReferences' | 'getFileReferences'\n    >\n{\n  public constructor(\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(TemplateDeclarationsService)\n    private readonly declarations: TemplateDeclarationsService,\n    @inject(DefinitionService)\n    private readonly definitions: DefinitionService,\n  ) {}\n\n  public getReferencesAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.ReferenceEntry[] | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.processReferences(\n          this.ts.service.getReferencesAtPosition(\n            file.generatedFileName,\n            generatedPosition,\n          ),\n        )\n      },\n    })\n  }\n\n  public findReferences(\n    fileName: string,\n    position: number,\n  ): TypeScript.ReferencedSymbol[] | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.processReferencedSymbols(\n          this.ts.service.findReferences(\n            file.generatedFileName,\n            generatedPosition,\n          ),\n        )\n      },\n    })\n  }\n\n  public getFileReferences(fileName: string): TypeScript.ReferenceEntry[] {\n    return this.ts.service.getFileReferences(\n      this.ts.getGeneratedFileName(fileName),\n    )\n  }\n\n  private pick<R>(\n    fileName: string,\n    position: number,\n    fns: Record<string, (file: VueSFCDocument) => R>,\n  ): R | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const block = file.getBlockAt(position)\n    if (block == null) return\n    const fn = fns[block.type]\n    if (fn == null) return\n    return fn(file)\n  }\n\n  public processReferences(\n    references: TypeScript.ReferenceEntry[] | undefined,\n  ): TypeScript.ReferenceEntry[] {\n    if (references == null) return []\n\n    return references.flatMap((reference) => {\n      if (!this.fs.isGeneratedVueFile(reference.fileName)) return reference\n      const file = this.fs.getVueFile(reference.fileName)\n      if (file == null) return []\n\n      const fileName = file.originalFileName\n      const textSpan = file.findOriginalTextSpan(reference.textSpan)\n      if (textSpan != null) {\n        return { ...reference, fileName, textSpan }\n      }\n\n      const declarations = this.declarations.getTemplateDeclaration(fileName)\n      const { line } = file.generated.positionAt(reference.textSpan.start)\n      const declaration = declarations.byLine.get(line)\n      if (declaration == null) return []\n\n      if (declaration.kind === 'variable') {\n        return declaration.references.flatMap((span) => {\n          const textSpan = file.findOriginalTextSpan(span)\n          if (textSpan == null) return []\n          return { ...reference, fileName, textSpan }\n        })\n      } else if (declaration.kind === 'identifier') {\n        return declaration.references.flatMap(({ start }) => {\n          const { line } = file.generated.positionAt(start)\n          const declaration = declarations.byLine.get(line)\n          if (declaration == null) return []\n          if (declaration.kind !== 'variable') return []\n          return declaration.references.flatMap((span) => {\n            const textSpan = file.findOriginalTextSpan(span)\n            if (textSpan == null) return []\n\n            return { ...reference, fileName, textSpan }\n          })\n        })\n      }\n\n      return []\n    })\n  }\n\n  public processReferencedSymbols(\n    symbols: TypeScript.ReferencedSymbol[] | undefined,\n  ): TypeScript.ReferencedSymbol[] | undefined {\n    if (symbols == null) return\n    return symbols.flatMap((symbol) => {\n      const definitions = this.definitions.processDefinitionInfo(\n        symbol.definition,\n      )\n      if (definitions.length === 0) return []\n      const references = this.processReferences(symbol.references)\n      if (references.length === 0) return []\n      return {\n        ...symbol,\n        definition: { ...symbol.definition, ...first(definitions) },\n        references,\n      }\n    })\n  }\n}\n", "import { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport type {\n  FormatCodeSettings,\n  UserPreferences,\n} from 'typescript/lib/tsserverlibrary'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TemplateDeclarationsService } from '../services/TemplateDeclarationsService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class RenameService\n  implements\n    Pick<\n      TSLanguageService,\n      'getRenameInfo' | 'findRenameLocations' | 'getEditsForFileRename'\n    >\n{\n  public constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TemplateDeclarationsService)\n    private readonly declarations: TemplateDeclarationsService,\n  ) {}\n\n  public getRenameInfo(\n    fileName: string,\n    position: number,\n    preferences: TypeScript.UserPreferences,\n  ): TypeScript.RenameInfo {\n    return (\n      this.pick(fileName, position, {\n        script: (file) => {\n          const generatedPosition = file.generatedOffsetAt(position)\n          if (generatedPosition == null) return\n          return this.processRenameInfo(\n            file,\n            this.ts.service.getRenameInfo(\n              file.generatedFileName,\n              generatedPosition,\n              preferences,\n            ),\n          )\n        },\n      }) ?? {\n        canRename: false,\n        localizedErrorMessage: 'Cannot rename this element.',\n      }\n    )\n  }\n\n  public findRenameLocations(\n    fileName: string,\n    position: number,\n    findInStrings: boolean,\n    findInComments: boolean,\n    providePrefixAndSuffixTextForRename?: boolean,\n  ): readonly TypeScript.RenameLocation[] | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.processRenameLocations(\n          this.ts.service.findRenameLocations(\n            file.generatedFileName,\n            generatedPosition,\n            findInStrings,\n            findInComments,\n            providePrefixAndSuffixTextForRename,\n          ),\n        )\n      },\n    })\n  }\n\n  public getEditsForFileRename(\n    oldFilePath: string,\n    newFilePath: string,\n    formatOptions: FormatCodeSettings,\n    preferences: UserPreferences | undefined,\n  ): readonly TypeScript.FileTextChanges[] {\n    const generatedOldFilePath = this.fs.isVueFile(oldFilePath)\n      ? oldFilePath\n      : this.ts.getGeneratedFileName(oldFilePath)\n    const generatedNewFilePath = this.fs.isVueFile(newFilePath)\n      ? newFilePath\n      : this.ts.getGeneratedFileName(newFilePath)\n    return this.fs.resolveAllFileTextChanges(\n      this.ts.service.getEditsForFileRename(\n        generatedOldFilePath,\n        generatedNewFilePath,\n        formatOptions,\n        preferences,\n      ),\n    )\n  }\n\n  private pick<R>(\n    fileName: string,\n    position: number,\n    fns: Record<string, (file: VueSFCDocument) => R>,\n  ): R | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const block = file.getBlockAt(position)\n    if (block == null) return\n    const fn = fns[block.type]\n    if (fn == null) return\n    return fn(file)\n  }\n\n  private processRenameInfo(\n    file: VueSFCDocument,\n    info: TypeScript.RenameInfo,\n  ): TypeScript.RenameInfo {\n    if (!info.canRename) return info\n\n    const triggerSpan = file.findOriginalTextSpan(info.triggerSpan)\n    if (triggerSpan == null) {\n      return {\n        canRename: false,\n        localizedErrorMessage: 'Cannot rename this element.',\n      }\n    }\n\n    if (info.fileToRename != null) {\n      info.fileToRename = this.fs.getRealFileNameIfAny(info.fileToRename)\n    }\n\n    info.triggerSpan = triggerSpan\n\n    return info\n  }\n\n  public processRenameLocations(\n    locations: readonly TypeScript.RenameLocation[] | undefined,\n  ): readonly TypeScript.RenameLocation[] | undefined {\n    if (locations == null) return\n\n    return locations.flatMap((location) => {\n      if (!this.fs.isGeneratedVueFile(location.fileName)) return location\n\n      const file = this.fs.getVueFile(location.fileName)\n      if (file == null) return []\n\n      const fileName = file.originalFileName\n      const textSpan = file.findOriginalTextSpan(location.textSpan)\n      const contextSpan =\n        location.contextSpan != null\n          ? file.findOriginalTextSpan(location.contextSpan) ?? undefined\n          : undefined\n\n      if (textSpan != null) {\n        return { ...location, fileName, textSpan, contextSpan }\n      }\n\n      const { line } = file.generated.positionAt(location.textSpan.start)\n      const declarations = this.declarations.getTemplateDeclaration(fileName)\n      const declaration = declarations.byLine.get(line)\n\n      if (declaration == null) return []\n      if (declaration.kind === 'identifier') {\n        // const __VueDX_get_identifier_a = () => unref(a)\n        return declaration.references.flatMap((reference) => {\n          const { line } = file.generated.positionAt(reference.start)\n          const declaration = declarations.byLine.get(line)\n          if (declaration == null) return []\n          if (declaration.kind !== 'variable') return []\n          return declaration.references.flatMap((reference) => {\n            const textSpan = file.findOriginalTextSpan(reference)\n            if (textSpan == null) return []\n\n            const contextSpan =\n              location.contextSpan == null ? undefined : textSpan\n\n            return { ...location, fileName, textSpan, contextSpan }\n          })\n        })\n      } else if (declaration.kind === 'variable') {\n        // let a = __VueDX_get_identifier_a()\n        return declaration.references.flatMap((reference) => {\n          const textSpan = file.findOriginalTextSpan(reference)\n          if (textSpan == null) return []\n          const contextSpan =\n            location.contextSpan == null ? undefined : textSpan\n\n          return { ...location, fileName, textSpan, contextSpan }\n        })\n      }\n\n      return []\n    })\n  }\n}\n", "import { VueSFCDocument } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport type { SignatureHelpItems } from 'typescript/lib/tsserverlibrary'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\n\n@injectable()\nexport class SignatureHelpService\n  implements\n    Pick<\n      TSLanguageService,\n      | 'getSignatureHelpItems'\n      | 'prepareCallHierarchy'\n      | 'provideCallHierarchyIncomingCalls'\n      | 'provideCallHierarchyOutgoingCalls'\n      | 'getBraceMatchingAtPosition'\n      | 'isValidBraceCompletionAtPosition'\n      | 'getNameOrDottedNameSpan'\n    >\n{\n  public constructor(\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n  ) {}\n\n  public getSignatureHelpItems(\n    fileName: string,\n    position: number,\n    options: TypeScript.SignatureHelpItemsOptions | undefined,\n  ): SignatureHelpItems | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.ts.service.getSignatureHelpItems(\n          file.generatedFileName,\n          generatedPosition,\n          options,\n        )\n      },\n    })\n  }\n\n  public prepareCallHierarchy(\n    fileName: string,\n    position: number,\n  ): TypeScript.CallHierarchyItem | TypeScript.CallHierarchyItem[] | undefined {\n    return this.pick(fileName, position, {\n      script: (file) => {\n        const generatedPosition = file.generatedOffsetAt(position)\n        if (generatedPosition == null) return\n        return this.ts.service.prepareCallHierarchy(\n          file.generatedFileName,\n          generatedPosition,\n        )\n      },\n    })\n  }\n\n  public provideCallHierarchyIncomingCalls(\n    fileName: string,\n    position: number,\n  ): TypeScript.CallHierarchyIncomingCall[] {\n    return (\n      this.pick(fileName, position, {\n        script: (file) => {\n          const generatedPosition = file.generatedOffsetAt(position)\n          if (generatedPosition == null) return\n          return this.ts.service.provideCallHierarchyIncomingCalls(\n            file.generatedFileName,\n            generatedPosition,\n          )\n        },\n      }) ?? []\n    )\n  }\n\n  public provideCallHierarchyOutgoingCalls(\n    fileName: string,\n    position: number,\n  ): TypeScript.CallHierarchyOutgoingCall[] {\n    return (\n      this.pick(fileName, position, {\n        script: (file) => {\n          const generatedPosition = file.generatedOffsetAt(position)\n          if (generatedPosition == null) return\n          return this.ts.service.provideCallHierarchyOutgoingCalls(\n            file.generatedFileName,\n            generatedPosition,\n          )\n        },\n      }) ?? []\n    )\n  }\n\n  public getBraceMatchingAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.TextSpan[] {\n    return (\n      this.pick(fileName, position, {\n        script: (file) => {\n          const generatedPosition = file.generatedOffsetAt(position)\n          if (generatedPosition == null) return\n          return this.ts.service.getBraceMatchingAtPosition(\n            file.generatedFileName,\n            generatedPosition,\n          )\n        },\n      }) ?? []\n    )\n  }\n\n  public isValidBraceCompletionAtPosition(\n    fileName: string,\n    position: number,\n    openingBrace: number,\n  ): boolean {\n    return (\n      this.pick(fileName, position, {\n        script: (file) => {\n          const generatedPosition = file.generatedOffsetAt(position)\n          if (generatedPosition == null) return\n          const generatedOpeningBrace = file.generatedOffsetAt(openingBrace)\n          if (generatedOpeningBrace == null) return\n          return this.ts.service.isValidBraceCompletionAtPosition(\n            file.generatedFileName,\n            generatedPosition,\n            generatedOpeningBrace,\n          )\n        },\n      }) ?? false\n    )\n  }\n\n  public getNameOrDottedNameSpan(\n    fileName: string,\n    startPos: number,\n    endPos: number,\n  ): TypeScript.TextSpan | undefined {\n    return this.pick(fileName, startPos, {\n      script: (file) => {\n        const generatedStartPos = file.generatedOffsetAt(startPos)\n        if (generatedStartPos == null) return\n        const generatedEndPos = file.generatedOffsetAt(endPos)\n        if (generatedEndPos == null) return\n        return this.ts.service.getNameOrDottedNameSpan(\n          file.generatedFileName,\n          generatedStartPos,\n          generatedEndPos,\n        )\n      },\n    })\n  }\n\n  private pick<R>(\n    fileName: string,\n    position: number,\n    fns: Record<string, (file: VueSFCDocument) => R>,\n  ): R | undefined {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return\n    const block = file.getBlockAt(position)\n    if (block == null) return\n    const fn = fns[block.type]\n    if (fn == null) return\n    return fn(file)\n  }\n}\n", "import { inject, injectable } from 'inversify'\nimport type { TSLanguageService, TypeScript } from '../contracts/TypeScript'\nimport { FilesystemService } from './FilesystemService'\nimport { TypescriptContextService } from './TypescriptContextService'\n\n@injectable()\nexport class EncodedClassificationsService\n  implements\n    Pick<\n      TSLanguageService,\n      'getEncodedSemanticClassifications' | 'getEncodedSyntacticClassifications'\n    >\n{\n  public constructor(\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n  ) {}\n\n  public getEncodedSemanticClassifications(\n    fileName: string,\n    span: TypeScript.TextSpan,\n    format?: TypeScript.SemanticClassificationFormat,\n  ): TypeScript.Classifications {\n    if (this.fs.isVueFile(fileName)) {\n      return {\n        spans: [],\n        endOfLineState: this.ts.lib.EndOfLineState.None,\n      }\n    }\n\n    return this.ts.service.getEncodedSemanticClassifications(\n      fileName,\n      span,\n      format,\n    )\n  }\n\n  public getEncodedSyntacticClassifications(\n    fileName: string,\n    span: TypeScript.TextSpan,\n  ): TypeScript.Classifications {\n    if (this.fs.isVueFile(fileName)) {\n      return {\n        spans: [],\n        endOfLineState: this.ts.lib.EndOfLineState.None,\n      }\n    }\n\n    return this.ts.service.getEncodedSyntacticClassifications(fileName, span)\n  }\n}\n", "import {\n  isVueSFCDescriptorFile,\n  isVueTemplateASTFile,\n  parseFileName,\n  toFileName,\n} from '@vuedx/shared'\nimport { TextSpan } from '@vuedx/vue-virtual-textdocument'\nimport { inject, injectable } from 'inversify'\nimport { FilesystemService } from './FilesystemService'\nimport { TypescriptContextService } from './TypescriptContextService'\n\n@injectable()\nexport class PluginSideChannel {\n  public constructor(\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n  ) {}\n\n  /**\n   * Get contents of a virtual file.\n   */\n  public async getVirtualFileContents(\n    fileName: string,\n  ): Promise<string | undefined> {\n    if (this.fs.isGeneratedVueFile(fileName)) {\n      const file = this.fs.getVueFile(fileName)\n      if (file == null) return undefined\n\n      return (\n        file.getText() +\n        '\\n//#sourceMappingURL=data:application/json;base64,' +\n        Buffer.from(file.map).toString('base64')\n      )\n    } else if (this.fs.isProjectRuntimeFile(fileName)) {\n      return this.ts.getProjectRuntimeFile(fileName)\n    } else if (isVueSFCDescriptorFile(fileName)) {\n      const vueFile = this.fs.getVueFile(parseFileName(fileName).fileName)\n      if (vueFile != null) return stringify(vueFile.descriptor)\n      return '{}'\n    } else if (isVueTemplateASTFile(fileName)) {\n      const vueFile = this.fs.getVueFile(parseFileName(fileName).fileName)\n      if (vueFile?.templateAST != null) return stringify(vueFile.templateAST)\n      return '{}'\n    }\n\n    return undefined\n  }\n\n  public async findGeneratedTextSpan(\n    fileName: string,\n    textSpan: TextSpan,\n  ): Promise<TextSpan | null> {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return null\n    return file.findGeneratedTextSpan(textSpan)\n  }\n\n  public async findOriginalTextSpan(\n    fileName: string,\n    textSpan: TextSpan,\n  ): Promise<TextSpan | null> {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return null\n    return file.findOriginalTextSpan(textSpan)\n  }\n\n  public async getRelatedVirtualFiles(fileName: string): Promise<string[]> {\n    const file = this.fs.getVueFile(fileName)\n    if (file == null) return []\n    return [\n      file.generatedFileName,\n      toFileName({ type: 'vue-descriptor', fileName: file.originalFileName }),\n      toFileName({ type: 'vue-template-ast', fileName: file.originalFileName }),\n    ]\n  }\n}\n\nfunction stringify(obj: object): string {\n  const visited = new Map<object, string>()\n\n  return JSON.stringify(\n    obj,\n    function (key, value) {\n      if (typeof value === 'object' && value != null) {\n        const existing = visited.get(value)\n        if (existing !== undefined) return `[[Cirular(${existing})]]`\n\n        const prefix = visited.get(this)\n        visited.set(value, prefix != null ? `${prefix}.${key}` : key)\n      }\n\n      return value\n    },\n    2,\n  )\n}\n", "import { DisposableScope, EventEmitter, RPC, generateUUID } from '@vuedx/shared'\nimport { inject, injectable } from 'inversify'\nimport { ConfigManager } from '../managers/ConfigManager'\nimport { Client, IPCModule } from 'node-ipc'\nimport { PluginSideChannel } from './PluginSideChannel'\nimport { LoggerService } from './LoggerService'\n\nexport interface ExtensionEvents {\n  connected: null\n  disconnected: null\n  message: null\n}\n\n@injectable()\nexport class IPCService extends EventEmitter<ExtensionEvents> {\n  private readonly ipc: IPCModule\n  private readonly cleanup: DisposableScope\n  private readonly logger = new LoggerService('IPCService')\n\n  public constructor(\n    @inject(ConfigManager) private readonly config: ConfigManager,\n    @inject(PluginSideChannel) private readonly api: PluginSideChannel,\n  ) {\n    super()\n\n    this.ipc = new IPCModule()\n    this.ipc.config.id = `vue-languageservice-${generateUUID()}`\n    this.ipc.config.maxRetries = 3\n    this.ipc.config.appspace = 'vuedx'\n    this.ipc.config.encoding = 'utf8'\n\n    this.ipc.config.logInColor = false\n    this.ipc.config.logger = (message) => this.logger.info(message)\n\n    this.cleanup = new DisposableScope()\n\n      .emitter(this.config.state)\n      .on('extensionSocketId', (event) => {\n        const { value, previousValue } = event.detail\n        this.logger.debug('Received extensionSocketId:', value)\n\n        // Disconnect from previous server\n        if (previousValue != null) {\n          this.ipc.disconnect(previousValue)\n        }\n\n        // Connect to new server\n        this.createClient()\n      })\n      .end()\n\n    this.createClient()\n  }\n\n  private createClient(): void {\n    const id = this.config.state.extensionSocketId\n    if (id == null) return\n\n    this.logger.debug(`Connecting to ${id}`)\n    this.ipc.connectTo(id, () => {\n      const client = this.ipc.of[id]\n      if (client != null) {\n        this.logger.debug(`Connected to ${id}`)\n        this.setupNewClient(client)\n      } else {\n        this.logger.debug(`Connection failed: ${id}`)\n      }\n    })\n  }\n\n  private setupNewClient(client: Client): void {\n    const scope = new DisposableScope()\n    const eventTarget = scope.wrap(client)\n\n    let isClosed = false\n    eventTarget.on('destroy', () => {\n      scope.dispose()\n    })\n\n    eventTarget.on('connect', () => {\n      this.dispatchEvent('connected', null)\n\n      const channel: RPC.Channel = {\n        send: (data) => {\n          if (isClosed) return\n          client.emit('message', data.toString('utf-8'))\n        },\n        receive: (handler) => {\n          eventTarget.on('message', handler)\n        },\n      }\n\n      const endpoint = RPC.createEndpoint(channel)\n      scope.add(() => endpoint.close())\n\n      RPC.expose(this.api, endpoint)\n    })\n\n    eventTarget.on('disconnect', () => {\n      isClosed = true\n      this.dispatchEvent('disconnected', null)\n    })\n\n    client.emit('ping', JSON.stringify({ id: this.ipc.config.id }))\n  }\n\n  public dispose(): void {\n    super.dispose()\n    this.cleanup.dispose()\n  }\n}\n", "import { inject, injectable } from 'inversify'\nimport type {\n  ExtendedTSLanguageService,\n  TSProject,\n  TypeScript,\n} from '../contracts/TypeScript'\nimport { CodeFixService } from '../features/CodeFixService'\nimport { CompletionsService } from '../features/CompletionsService'\nimport { DefinitionService } from '../features/DefinitionService'\nimport { DiagnosticsService } from '../features/DiagnosticsService'\nimport { FoldingRangeService } from '../features/FoldingRangeService'\nimport { ImplementationService } from '../features/ImplementationService'\nimport { QuickInfoService } from '../features/QuickInfoService'\nimport { RefactorService } from '../features/RefactorService'\nimport { ReferencesService } from '../features/ReferencesService'\nimport { RenameService } from '../features/RenameService'\nimport { SignatureHelpService } from '../features/SignatureHelpService'\nimport { EncodedClassificationsService } from './EncodedClassificationsService'\nimport { FilesystemService } from './FilesystemService'\nimport { IPCService } from './IPCService'\nimport { LoggerService } from './LoggerService'\nimport { TypescriptContextService } from './TypescriptContextService'\n\n@injectable()\nexport class TypescriptPluginService\n  implements Partial<ExtendedTSLanguageService>\n{\n  //#region setup\n  private readonly logger = LoggerService.getLogger(\n    TypescriptPluginService.name,\n  )\n\n  constructor(\n    @inject(FilesystemService)\n    private readonly fs: FilesystemService,\n    @inject(DiagnosticsService)\n    private readonly diagnostics: DiagnosticsService,\n    @inject(QuickInfoService)\n    private readonly quickInfo: QuickInfoService,\n    @inject(DefinitionService)\n    private readonly definitions: DefinitionService,\n    @inject(CompletionsService)\n    private readonly completions: CompletionsService,\n    @inject(ReferencesService)\n    private readonly references: ReferencesService,\n    @inject(RenameService)\n    private readonly rename: RenameService,\n    @inject(EncodedClassificationsService)\n    private readonly classifications: EncodedClassificationsService,\n    @inject(CodeFixService)\n    private readonly codeFix: CodeFixService,\n    @inject(RefactorService)\n    private readonly refactor: RefactorService,\n    @inject(FoldingRangeService)\n    private readonly folding: FoldingRangeService,\n    @inject(SignatureHelpService)\n    private readonly signature: SignatureHelpService,\n    @inject(ImplementationService)\n    private readonly implementation: ImplementationService,\n    @inject(TypescriptContextService)\n    private readonly ts: TypescriptContextService,\n    @inject(IPCService)\n    private readonly ipc: IPCService,\n  ) {\n    if (Math.random() > 1) {\n      console.log([this.classifications, this.folding, this.implementation])\n    }\n  }\n  //#endregion\n\n  //#region fs\n  #isVueProject = true\n  public get isVueProject(): boolean {\n    return this.#isVueProject\n  }\n\n  private getScriptFileNames(all: string[]): string[] {\n    const output = new Set<string>(all)\n\n    const ext = 'tsx'\n    all.forEach((fileName) => {\n      if (!this.fs.isVueFile(fileName)) return\n      if (!this.ts.serverHost.fileExists(fileName)) return\n      const generatedFileName = `${fileName}.${ext}`\n\n      output.add(generatedFileName)\n      output.add(this.ts.getProjectRuntimeFileNameFor(fileName))\n    })\n\n    return Array.from(output)\n  }\n\n  public getExternalFiles(project: TSProject): string[] {\n    const all: string[] = project.getRootFiles()\n    const vue = new Set<string>()\n    const virtual = new Set<string>()\n\n    // This is not needed for any functionality, but it's needed to prevent unnecessary creation of inferred project.\n\n    const projectService = project.projectService\n    projectService.openFiles.forEach((_, file) => {\n      const scriptInfo = projectService.getScriptInfoForPath(\n        file as TypeScript.Path,\n      )\n      if (scriptInfo == null) return\n      if (\n        scriptInfo.containingProjects.length === 0 || // creating new project, so this is likely to be part of current project. TODO: verify hypothesis.\n        scriptInfo.containingProjects.includes(project)\n      ) {\n        all.push(scriptInfo.fileName)\n      }\n    })\n\n    for (const fileName of all) {\n      if (fileName.charAt(0) === '^') {\n        // ignore typescript virtual files\n      } else if (this.fs.isVueFile(fileName)) {\n        vue.add(fileName)\n      } else if (this.fs.isGeneratedVueFile(fileName)) {\n        vue.add(this.fs.getRealFileNameIfAny(fileName))\n      } else if (this.fs.isProjectRuntimeFile(fileName)) {\n        virtual.add(fileName)\n      }\n    }\n\n    if (vue.size === 0) {\n      this.#isVueProject = false\n      this.logger.debug('Not a Vue project:', project.getProjectName())\n      return [] // do not retain any files if no .vue files\n    }\n\n    this.#isVueProject = true\n    const fileNames = [...this.getScriptFileNames([...vue]), ...virtual]\n\n    this.logger.debug(`Project:`, project.getProjectName())\n    this.logger.debug(`External files:`, fileNames)\n\n    return fileNames\n  }\n\n  public toLineColumnOffset(\n    fileName: string,\n    position: number,\n  ): TypeScript.LineAndCharacter {\n    if (this.fs.isGeneratedVueFile(fileName)) {\n      const file = this.fs.getVueFile(fileName)\n      if (file != null) {\n        const originalPosition = file.findOriginalTextSpan({\n          start: position,\n          length: 1,\n        })\n        if (originalPosition != null) {\n          return file.original.positionAt(originalPosition.start)\n        }\n      }\n    }\n\n    if (this.ts.service.toLineColumnOffset == null) {\n      return { line: 0, character: position }\n    }\n\n    return this.ts.service.toLineColumnOffset(fileName, position)\n  }\n  //#endregion\n\n  //#region diagnostics\n  public getCompilerOptionsDiagnostics(): TypeScript.Diagnostic[] {\n    return this.diagnostics.getCompilerOptionsDiagnostics()\n  }\n\n  public getSemanticDiagnostics(fileName: string): TypeScript.Diagnostic[] {\n    return this.pick(\n      fileName,\n      () => this.diagnostics.getSemanticDiagnostics(fileName),\n      () =>\n        this.ts.service\n          .getSemanticDiagnostics(fileName)\n          .flatMap((diagnostic) =>\n            this.diagnostics.processDiagnostic(diagnostic),\n          ),\n    )\n  }\n\n  public getSyntacticDiagnostics(\n    fileName: string,\n  ): TypeScript.DiagnosticWithLocation[] {\n    return this.pick(\n      fileName,\n      () => [\n        ...this.diagnostics.getSyntacticDiagnostics(fileName),\n        ...this.diagnostics.getVueCompilerDiagnostic(fileName),\n      ],\n      () =>\n        this.ts.service\n          .getSyntacticDiagnostics(fileName)\n          .flatMap((diagnostic) =>\n            this.diagnostics.processDiagnostic(diagnostic),\n          ),\n    )\n  }\n\n  public getSuggestionDiagnostics(\n    fileName: string,\n  ): TypeScript.DiagnosticWithLocation[] {\n    return this.pick(\n      fileName,\n      () => this.diagnostics.getSuggestionDiagnostics(fileName),\n      () =>\n        this.ts.service\n          .getSuggestionDiagnostics(fileName)\n          .flatMap((diagnostic) =>\n            this.diagnostics.processDiagnostic(diagnostic),\n          ),\n    )\n  }\n  //#endregion\n\n  //#region definitions\n  public getDefinitionAtPosition(\n    fileName: string,\n    position: number,\n  ): readonly TypeScript.DefinitionInfo[] | undefined {\n    return this.pick(\n      fileName,\n      () => this.definitions.getDefinitionAtPosition(fileName, position),\n      () =>\n        this.ts.service\n          .getDefinitionAtPosition(fileName, position)\n          ?.flatMap((definition) =>\n            this.definitions.processDefinitionInfo(definition),\n          ),\n    )\n  }\n\n  public getTypeDefinitionAtPosition(\n    fileName: string,\n    position: number,\n  ): readonly TypeScript.DefinitionInfo[] | undefined {\n    return this.pick(\n      fileName,\n      () => this.definitions.getTypeDefinitionAtPosition(fileName, position),\n      () =>\n        this.ts.service\n          .getTypeDefinitionAtPosition(fileName, position)\n          ?.flatMap((definition) =>\n            this.definitions.processDefinitionInfo(definition),\n          ),\n    )\n  }\n\n  public getDefinitionAndBoundSpan(\n    fileName: string,\n    position: number,\n  ): TypeScript.DefinitionInfoAndBoundSpan | undefined {\n    return this.pick(\n      fileName,\n      () => this.definitions.getDefinitionAndBoundSpan(fileName, position),\n      () => {\n        const result = this.ts.service.getDefinitionAndBoundSpan(\n          fileName,\n          position,\n        )\n        if (result == null) return\n        return {\n          ...result,\n          definitions: result.definitions?.flatMap((definition) =>\n            this.definitions.processDefinitionInfo(definition),\n          ),\n        }\n      },\n    )\n  }\n  //#endregion\n\n  //#region quickInfo\n  public getQuickInfoAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.QuickInfo | undefined {\n    return this.pick(\n      fileName,\n      () => this.quickInfo.getQuickInfoAtPosition(fileName, position),\n      () => this.ts.service.getQuickInfoAtPosition(fileName, position),\n    )\n  }\n  //#endregion\n\n  //#region completions\n  public getCompletionsAtPosition(\n    fileName: string,\n    position: number,\n    options: TypeScript.GetCompletionsAtPositionOptions | undefined,\n  ): TypeScript.WithMetadata<TypeScript.CompletionInfo> | undefined {\n    return this.pick(\n      fileName,\n      () =>\n        this.completions.getCompletionsAtPosition(fileName, position, options),\n      () =>\n        this.ts.service.getCompletionsAtPosition(fileName, position, options),\n    )\n  }\n\n  public getCompletionEntryDetails(\n    fileName: string,\n    position: number,\n    entryName: string,\n    formatOptions:\n      | TypeScript.FormatCodeOptions\n      | TypeScript.FormatCodeSettings\n      | undefined,\n    source: string | undefined,\n    preferences: TypeScript.UserPreferences | undefined,\n    data: TypeScript.CompletionEntryData | undefined,\n  ): TypeScript.CompletionEntryDetails | undefined {\n    return this.pick(\n      fileName,\n      () =>\n        this.completions.getCompletionEntryDetails(\n          fileName,\n          position,\n          entryName,\n          formatOptions,\n          source,\n          preferences,\n          data,\n        ),\n      () =>\n        this.ts.service.getCompletionEntryDetails(\n          fileName,\n          position,\n          entryName,\n          formatOptions,\n          source,\n          preferences,\n          data,\n        ),\n    )\n  }\n\n  public getCompletionEntrySymbol(\n    fileName: string,\n    position: number,\n    name: string,\n    source: string | undefined,\n  ): TypeScript.Symbol | undefined {\n    return this.pick(\n      fileName,\n      () =>\n        this.completions.getCompletionEntrySymbol(\n          fileName,\n          position,\n          name,\n          source,\n        ),\n      () =>\n        this.ts.service.getCompletionEntrySymbol(\n          fileName,\n          position,\n          name,\n          source,\n        ),\n    )\n  }\n\n  public getDocCommentTemplateAtPosition(\n    fileName: string,\n    position: number,\n    options?: TypeScript.DocCommentTemplateOptions,\n  ): TypeScript.TextInsertion | undefined {\n    return this.pick(\n      fileName,\n      () =>\n        this.completions.getDocCommentTemplateAtPosition(\n          fileName,\n          position,\n          options,\n        ),\n      () =>\n        this.ts.service.getDocCommentTemplateAtPosition(\n          fileName,\n          position,\n          options,\n        ),\n    )\n  }\n\n  public getJsxClosingTagAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.JsxClosingTagInfo | undefined {\n    return this.pick(\n      fileName,\n      () => this.completions.getJsxClosingTagAtPosition(fileName, position),\n      () => this.ts.service.getJsxClosingTagAtPosition(fileName, position),\n    )\n  }\n  //#endregion\n\n  //#region classifications\n  public getEncodedSyntacticClassifications(\n    fileName: string,\n    span: TypeScript.TextSpan,\n  ): TypeScript.Classifications {\n    if (this.fs.isVueFile(fileName)) return { spans: [], endOfLineState: 0 }\n    return this.ts.service.getEncodedSyntacticClassifications(fileName, span)\n  }\n\n  public getEncodedSemanticClassifications(\n    fileName: string,\n    span: TypeScript.TextSpan,\n    format?: TypeScript.SemanticClassificationFormat,\n  ): TypeScript.Classifications {\n    if (this.fs.isVueFile(fileName)) return { spans: [], endOfLineState: 0 }\n    return this.ts.service.getEncodedSemanticClassifications(\n      fileName,\n      span,\n      format,\n    )\n  }\n  //#endregion\n\n  //#region references\n  public getReferencesAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.ReferenceEntry[] | undefined {\n    return this.pick(\n      fileName,\n      () => this.references.getReferencesAtPosition(fileName, position),\n      () => this.ts.service.getReferencesAtPosition(fileName, position),\n    )\n  }\n\n  public findReferences(\n    fileName: string,\n    position: number,\n  ): TypeScript.ReferencedSymbol[] | undefined {\n    return this.pick(\n      fileName,\n      () => this.references.findReferences(fileName, position),\n      () => this.ts.service.findReferences(fileName, position),\n    )\n  }\n\n  public getFileReferences(fileName: string): TypeScript.ReferenceEntry[] {\n    return this.pick(\n      fileName,\n      () => this.references.getFileReferences(fileName),\n      () => this.ts.service.getFileReferences(fileName),\n    )\n  }\n  //#endregion\n\n  //#region implementation\n  public getImplementationAtPosition(\n    fileName: string,\n    position: number,\n  ): readonly TypeScript.ImplementationLocation[] | undefined {\n    if (this.fs.isVueFile(fileName)) return\n    return this.ts.service.getImplementationAtPosition(fileName, position)\n  }\n  //#endregion\n\n  //#region TODO: refactor\n  public getApplicableRefactors(\n    fileName: string,\n    positionOrRange: number | TypeScript.TextRange,\n    preferences: TypeScript.UserPreferences | undefined,\n    triggerReason?: TypeScript.RefactorTriggerReason,\n    kind?: string,\n  ): TypeScript.ApplicableRefactorInfo[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.getApplicableRefactors(\n      fileName,\n      positionOrRange,\n      preferences,\n      triggerReason,\n      kind,\n    )\n  }\n\n  public getEditsForRefactor(\n    fileName: string,\n    formatOptions: TypeScript.FormatCodeSettings,\n    positionOrRange: number | TypeScript.TextRange,\n    refactorName: string,\n    actionName: string,\n    preferences: TypeScript.UserPreferences | undefined,\n  ): TypeScript.RefactorEditInfo | undefined {\n    if (this.fs.isVueFile(fileName)) return\n\n    return this.ts.service.getEditsForRefactor(\n      fileName,\n      formatOptions,\n      positionOrRange,\n      refactorName,\n      actionName,\n      preferences,\n    )\n  }\n\n  public organizeImports(\n    args: TypeScript.OrganizeImportsArgs,\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences | undefined,\n  ): readonly TypeScript.FileTextChanges[] {\n    return this.pick(\n      args.fileName,\n      () => this.refactor.organizeImports(args, formatOptions, preferences),\n      () => this.ts.service.organizeImports(args, formatOptions, preferences),\n    )\n  }\n\n  public toggleLineComment(\n    fileName: string,\n    textRange: TypeScript.TextRange,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.toggleLineComment(fileName, textRange)\n  }\n\n  public toggleMultilineComment(\n    fileName: string,\n    textRange: TypeScript.TextRange,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.toggleMultilineComment(fileName, textRange)\n  }\n\n  public commentSelection(\n    fileName: string,\n    textRange: TypeScript.TextRange,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.commentSelection(fileName, textRange)\n  }\n\n  public uncommentSelection(\n    fileName: string,\n    textRange: TypeScript.TextRange,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.uncommentSelection(fileName, textRange)\n  }\n  //#endregion\n\n  //#region rename\n  public getRenameInfo(\n    fileName: string,\n    position: number,\n    preferences: TypeScript.UserPreferences,\n  ): TypeScript.RenameInfo {\n    return this.pick(\n      fileName,\n      () => this.rename.getRenameInfo(fileName, position, preferences),\n      () => this.ts.service.getRenameInfo(fileName, position, preferences),\n    )\n  }\n\n  public findRenameLocations(\n    fileName: string,\n    position: number,\n    findInStrings: boolean,\n    findInComments: boolean,\n    providePrefixAndSuffixTextForRename?: boolean,\n  ): readonly TypeScript.RenameLocation[] | undefined {\n    return this.pick(\n      fileName,\n      () =>\n        this.rename.findRenameLocations(\n          fileName,\n          position,\n          findInStrings,\n          findInComments,\n          providePrefixAndSuffixTextForRename,\n        ),\n      () =>\n        this.ts.service.findRenameLocations(\n          fileName,\n          position,\n          findInStrings,\n          findInComments,\n          providePrefixAndSuffixTextForRename,\n        ),\n    )\n  }\n\n  public getEditsForFileRename(\n    oldFilePath: string,\n    newFilePath: string,\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences | undefined,\n  ): readonly TypeScript.FileTextChanges[] {\n    if (this.fs.isVueFile(oldFilePath) || this.fs.isVueFile(newFilePath)) {\n      return this.rename.getEditsForFileRename(\n        oldFilePath,\n        newFilePath,\n        formatOptions,\n        preferences,\n      )\n    } else {\n      return this.ts.service.getEditsForFileRename(\n        oldFilePath,\n        newFilePath,\n        formatOptions,\n        preferences,\n      )\n    }\n  }\n  //#endregion\n\n  //#region codefix\n  public getCodeFixesAtPosition(\n    fileName: string,\n    start: number,\n    end: number,\n    errorCodes: readonly number[],\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences,\n  ): readonly TypeScript.CodeFixAction[] {\n    return this.pick(\n      fileName,\n      () =>\n        this.codeFix.getCodeFixesAtPosition(\n          fileName,\n          start,\n          end,\n          errorCodes,\n          formatOptions,\n          preferences,\n        ),\n      () =>\n        this.ts.service.getCodeFixesAtPosition(\n          fileName,\n          start,\n          end,\n          errorCodes,\n          formatOptions,\n          preferences,\n        ),\n    )\n  }\n\n  public getCombinedCodeFix(\n    scope: TypeScript.CombinedCodeFixScope,\n    fixId: {},\n    formatOptions: TypeScript.FormatCodeSettings,\n    preferences: TypeScript.UserPreferences,\n  ): TypeScript.CombinedCodeActions {\n    return this.pick(\n      scope.fileName,\n      () =>\n        this.codeFix.getCombinedCodeFix(\n          scope,\n          fixId,\n          formatOptions,\n          preferences,\n        ),\n      () =>\n        this.ts.service.getCombinedCodeFix(\n          scope,\n          fixId,\n          formatOptions,\n          preferences,\n        ),\n    )\n  }\n  //#endregion\n\n  //#region folding\n  public getOutliningSpans(fileName: string): TypeScript.OutliningSpan[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.getOutliningSpans(fileName)\n  }\n  //#endregion\n\n  //#region formatting\n  public getFormattingEditsAfterKeystroke(\n    fileName: string,\n    position: number,\n    key: string,\n    options: TypeScript.FormatCodeOptions | TypeScript.FormatCodeSettings,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n\n    return this.ts.service.getFormattingEditsAfterKeystroke(\n      fileName,\n      position,\n      key,\n      options,\n    )\n  }\n\n  public getFormattingEditsForDocument(\n    fileName: string,\n    options: TypeScript.FormatCodeOptions | TypeScript.FormatCodeSettings,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.getFormattingEditsForDocument(fileName, options)\n  }\n\n  public getFormattingEditsForRange(\n    fileName: string,\n    start: number,\n    end: number,\n    options: TypeScript.FormatCodeOptions | TypeScript.FormatCodeSettings,\n  ): TypeScript.TextChange[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.getFormattingEditsForRange(\n      fileName,\n      start,\n      end,\n      options,\n    )\n  }\n  //#endregion\n\n  //#region signature help\n  public getSignatureHelpItems(\n    fileName: string,\n    position: number,\n    options: TypeScript.SignatureHelpItemsOptions,\n  ): TypeScript.SignatureHelpItems | undefined {\n    return this.pick(\n      fileName,\n      () => this.signature.getSignatureHelpItems(fileName, position, options),\n      () => this.ts.service.getSignatureHelpItems(fileName, position, options),\n    )\n  }\n\n  public prepareCallHierarchy(\n    fileName: string,\n    position: number,\n  ): TypeScript.CallHierarchyItem | TypeScript.CallHierarchyItem[] | undefined {\n    return this.pick(\n      fileName,\n      () => this.signature.prepareCallHierarchy(fileName, position),\n      () => this.ts.service.prepareCallHierarchy(fileName, position),\n    )\n  }\n\n  public provideCallHierarchyIncomingCalls(\n    fileName: string,\n    position: number,\n  ): TypeScript.CallHierarchyIncomingCall[] {\n    return this.pick(\n      fileName,\n      () =>\n        this.signature.provideCallHierarchyIncomingCalls(fileName, position),\n      () =>\n        this.ts.service.provideCallHierarchyIncomingCalls(fileName, position),\n    )\n  }\n\n  public provideCallHierarchyOutgoingCalls(\n    fileName: string,\n    position: number,\n  ): TypeScript.CallHierarchyOutgoingCall[] {\n    return this.pick(\n      fileName,\n      () =>\n        this.signature.provideCallHierarchyOutgoingCalls(fileName, position),\n      () =>\n        this.ts.service.provideCallHierarchyOutgoingCalls(fileName, position),\n    )\n  }\n\n  public getBraceMatchingAtPosition(\n    fileName: string,\n    position: number,\n  ): TypeScript.TextSpan[] {\n    return this.pick(\n      fileName,\n      () => this.signature.getBraceMatchingAtPosition(fileName, position),\n      () => this.ts.service.getBraceMatchingAtPosition(fileName, position),\n    )\n  }\n\n  public isValidBraceCompletionAtPosition(\n    fileName: string,\n    position: number,\n    openingBrace: number,\n  ): boolean {\n    return this.pick(\n      fileName,\n      () =>\n        this.signature.isValidBraceCompletionAtPosition(\n          fileName,\n          position,\n          openingBrace,\n        ),\n      () =>\n        this.ts.service.isValidBraceCompletionAtPosition(\n          fileName,\n          position,\n          openingBrace,\n        ),\n    )\n  }\n\n  public getNameOrDottedNameSpan(\n    fileName: string,\n    startPos: number,\n    endPos: number,\n  ): TypeScript.TextSpan | undefined {\n    return this.pick(\n      fileName,\n      () => this.signature.getNameOrDottedNameSpan(fileName, startPos, endPos),\n      () => this.ts.service.getNameOrDottedNameSpan(fileName, startPos, endPos),\n    )\n  }\n  //#endregion\n\n  public getDocumentHighlights(\n    fileName: string,\n    position: number,\n    filesToSearch: string[],\n  ): TypeScript.DocumentHighlights[] | undefined {\n    if (this.fs.isVueFile(fileName)) return []\n\n    return this.ts.service.getDocumentHighlights(\n      fileName,\n      position,\n      filesToSearch,\n    )\n  }\n\n  public getEmitOutput(\n    fileName: string,\n    emitOnlyDtsFiles?: boolean,\n    forceDtsEmit?: boolean,\n  ): TypeScript.EmitOutput {\n    if (this.fs.isVueFile(fileName)) {\n      return { outputFiles: [], emitSkipped: true }\n    }\n\n    return this.ts.service.getEmitOutput(\n      fileName,\n      emitOnlyDtsFiles,\n      forceDtsEmit,\n    )\n  }\n\n  public getIndentationAtPosition(\n    fileName: string,\n    position: number,\n    options: TypeScript.EditorOptions | TypeScript.EditorSettings,\n  ): number {\n    if (this.fs.isVueFile(fileName)) return 0\n    return this.ts.service.getIndentationAtPosition(fileName, position, options)\n  }\n\n  public getNavigateToItems(\n    searchValue: string,\n    maxResultCount?: number,\n    fileName?: string,\n    excludeDtsFiles?: boolean,\n  ): TypeScript.NavigateToItem[] {\n    return this.ts.service.getNavigateToItems(\n      searchValue,\n      maxResultCount,\n      fileName,\n      excludeDtsFiles,\n    )\n  }\n\n  public getNavigationBarItems(\n    fileName: string,\n  ): TypeScript.NavigationBarItem[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.getNavigationBarItems(fileName)\n  }\n\n  public getNavigationTree(fileName: string): TypeScript.NavigationTree {\n    if (this.fs.isVueFile(fileName))\n      return {\n        text: '<component>',\n        kind: this.ts.lib.ScriptElementKind.unknown,\n        kindModifiers: '',\n        spans: [],\n        nameSpan: undefined,\n      }\n    return this.ts.service.getNavigationTree(fileName)\n  }\n\n  public getSmartSelectionRange(\n    fileName: string,\n    position: number,\n  ): TypeScript.SelectionRange {\n    if (this.fs.isVueFile(fileName)) {\n      return { textSpan: { start: position, length: 1 } }\n    }\n    return this.ts.service.getSmartSelectionRange(fileName, position)\n  }\n\n  public getSpanOfEnclosingComment(\n    fileName: string,\n    position: number,\n    onlyMultiLine: boolean,\n  ): TypeScript.TextSpan | undefined {\n    if (this.fs.isVueFile(fileName)) return\n    return this.ts.service.getSpanOfEnclosingComment(\n      fileName,\n      position,\n      onlyMultiLine,\n    )\n  }\n\n  public getTodoComments(\n    fileName: string,\n    descriptors: TypeScript.TodoCommentDescriptor[],\n  ): TypeScript.TodoComment[] {\n    if (this.fs.isVueFile(fileName)) return []\n    return this.ts.service.getTodoComments(fileName, descriptors)\n  }\n\n  readonly #disposables: Array<() => void> = []\n\n  public onDispose(callback: () => void): void {\n    this.#disposables.push(callback)\n  }\n\n  public dispose(): void {\n    this.ipc.dispose()\n    this.#disposables.forEach((dispose) => dispose())\n    this.ts.service.dispose()\n  }\n\n  private pick<R>(\n    fileName: string,\n    forVueFile: () => R,\n    forOtherFiles: () => R,\n  ): R {\n    if (this.fs.isVueFile(fileName)) return forVueFile()\n    else return forOtherFiles()\n  }\n}\n", "import { first, invariant, setDebugging } from '@vuedx/shared'\nimport { Container } from 'inversify'\nimport { TS_LANGUAGE_SERVICE } from '../constants'\nimport type {\n  TSLanguageService,\n  TSLanguageServiceHost,\n  TSProject,\n  TSServerHost,\n  TypeScript,\n} from '../contracts/TypeScript'\nimport { overrideMethod } from '../helpers/overrideMethod'\nimport { FilesystemService } from '../services/FilesystemService'\nimport { LoggerService } from '../services/LoggerService'\nimport { TypescriptContextService } from '../services/TypescriptContextService'\nimport { TypescriptPluginService } from '../services/TypescriptPluginService'\nimport { ConfigManager, PluginConfig } from './ConfigManager'\n\nexport interface Options {\n  project?: TSProject\n  languageService: TSLanguageService\n  languageServiceHost: TSLanguageServiceHost\n  serverHost: TSServerHost\n  config: PluginConfig\n  typescript: typeof TypeScript\n  typesDir: string\n}\n\nexport class PluginManager {\n  public static instance = new PluginManager()\n\n  private constructor() {}\n  readonly #containers = new Map<string, Container>()\n  private readonly logger = LoggerService.getLogger(PluginManager.name)\n\n  private _activeContainerId: string | undefined\n  public create(options: Options): TSLanguageService {\n    const containerKey =\n      options.project?.getProjectName() ?? `${Date.now()}-${Math.random()}`\n    this.#setupLogger(containerKey, options)\n\n    if (TS_LANGUAGE_SERVICE in options.languageService) {\n      return options.languageService\n    }\n\n    this.#patchTypescript(options.typescript)\n\n    const container =\n      this.#containers.get(containerKey) ?? this.#createContainer(options)\n    this.#containers.set(containerKey, container)\n\n    if (this._activeContainerId === containerKey) {\n      return this.#createLanguageService(\n        options.languageService,\n        container.get(TypescriptPluginService),\n      )\n    }\n\n    this.logger.debug(\n      'Creating language service for project:',\n      options.project?.getProjectName(),\n    )\n\n    container.get(TypescriptContextService).updateOptions(options)\n\n    if (options.project != null) this.#patchProject(container, options.project)\n    this.#patchFilesystem(container, options.serverHost)\n    this.#patchFilesystemWatcher(container, options.serverHost)\n    this.#patchResolveModuleNames(container, options.languageServiceHost)\n    this.#patchGetScriptVersionAndGetScriptSnapshot(\n      container,\n      options.languageServiceHost,\n    )\n\n    try {\n      const plugin = container.get(TypescriptPluginService)\n      plugin.onDispose(() => {\n        this.#containers.delete(containerKey)\n        container.unbindAll()\n      })\n      return this.#createLanguageService(options.languageService, plugin)\n    } finally {\n      this._activeContainerId = containerKey\n      const current = (\n        (options.project?.projectService as any)\n          .hostConfiguration as TypeScript.server.HostConfiguration\n      ).extraFileExtensions\n\n      if (\n        Array.isArray(current) &&\n        current.some((ext) => ext.extension === '.vue')\n      ) {\n        // .vue exists\n      } else if (Array.isArray(current)) {\n        // Enable .vue after enhancing the language server.\n        options.project?.projectService.setHostConfiguration({\n          extraFileExtensions: [],\n        })\n      }\n      this._activeContainerId = undefined\n    }\n  }\n\n  public getExternalFiles(project: TSProject): string[] {\n    return (\n      this.#containers\n        .get(project.getProjectName())\n        ?.get(TypescriptPluginService)\n        .getExternalFiles(project) ?? []\n    )\n  }\n\n  public onConfigurationChanged(config: PluginConfig): void {\n    ConfigManager.instance.setConfig(config)\n  }\n\n  public fixConsole(console: Console): void {\n    const logger = LoggerService.getLogger('Global')\n    console.log = (...args) => logger.info(...args)\n    console.info = (...args) => logger.info(...args)\n    console.debug = (...args) => logger.debug(...args)\n    console.trace = (...args) => logger.debug(...args, new Error().stack)\n    console.warn = (...args) => logger.error(...args)\n    console.error = (...args) => logger.error(...args)\n  }\n\n  #patchTypescript(typescript: typeof TypeScript): void {\n    overrideMethod(\n      typescript as any,\n      'getSupportedExtensions',\n      (fn) => (options: any, extraFileExtensions: any) => {\n        const extensions = fn(options, extraFileExtensions) as string[]\n        const index = extensions.indexOf('.vue')\n\n        if (index >= 0) {\n          // File extensions are sorted in order of their priorities.\n          // We need to put .vue before .ts\n          extensions.splice(index, 1)\n          extensions.unshift('.vue')\n        }\n\n        return extensions\n      },\n    )\n  }\n\n  #patchProject(container: Container, project: TSProject): void {\n    const ts = container.get(TypescriptContextService)\n    const fs = container.get(FilesystemService)\n    const logger = LoggerService.getLogger('Project')\n\n    overrideMethod(\n      project,\n      'getCompilerOptions',\n      (getCompilerOptions) => () => {\n        const compilerOptions = getCompilerOptions()\n\n        compilerOptions.jsx = ts.lib.JsxEmit.Preserve\n\n        return compilerOptions\n      },\n    )\n\n    overrideMethod(\n      project,\n      'getCompilationSettings',\n      (getCompilationSettings) => () => {\n        const compilationSettings = getCompilationSettings()\n\n        compilationSettings.jsx = ts.lib.JsxEmit.Preserve\n\n        return compilationSettings\n      },\n    )\n\n    const extraFileExtensions: TypeScript.server.HostConfiguration['extraFileExtensions'] =\n      [\n        {\n          extension: '.vue',\n          isMixedContent: false,\n          scriptKind: ts.lib.ScriptKind.Deferred,\n        },\n      ]\n\n    overrideMethod(\n      project.projectService,\n      'setHostConfiguration',\n      (setHostConfiguration) => {\n        return (\n          args: TypeScript.server.protocol.ConfigureRequestArguments,\n        ): void => {\n          logger.debug('setHostConfiguration: ', args)\n          const current = (\n            (project.projectService as any)\n              .hostConfiguration as TypeScript.server.HostConfiguration\n          ).extraFileExtensions\n\n          logger.debug('Current Extra Extensions: ', current)\n          if (args.extraFileExtensions != null) {\n            args.extraFileExtensions.push(...extraFileExtensions)\n          }\n\n          logger.debug('New Extra Extensions: ', args.extraFileExtensions)\n\n          return setHostConfiguration(args)\n        }\n      },\n    )\n\n    overrideMethod(\n      project as unknown as {\n        detachScriptInfoFromProject(\n          uncheckedFileName: string,\n          noRemoveResolution?: boolean,\n        ): void\n      },\n      'detachScriptInfoFromProject',\n      (detachScriptInfoFromProject) =>\n        (uncheckedFileName, noRemoveResolution) => {\n          if (fs.isVueFile(uncheckedFileName)) return\n          if (fs.isGeneratedVueFile(uncheckedFileName)) {\n            const fileName = fs.getRealFileNameIfAny(uncheckedFileName)\n            console.debug(`@@@ Detaching ${fileName}`)\n            return detachScriptInfoFromProject.call(\n              project,\n              fileName,\n              noRemoveResolution,\n            )\n          }\n\n          return detachScriptInfoFromProject.call(\n            project,\n            uncheckedFileName,\n            noRemoveResolution,\n          )\n        },\n    )\n  }\n\n  #patchGetScriptVersionAndGetScriptSnapshot(\n    container: Container,\n    languageServiceHost: TSLanguageServiceHost,\n  ): void {\n    const fs = container.get(FilesystemService)\n    const ts = container.get(TypescriptContextService)\n\n    overrideMethod(\n      languageServiceHost,\n      'getScriptVersion',\n      (getScriptVersion) =>\n        (fileName: string): string => {\n          if (fs.isProjectRuntimeFile(fileName)) {\n            return `${ts.getVueProjectFor(fileName).projectVersion}`\n          }\n\n          return getScriptVersion(fs.getRealFileNameIfAny(fileName))\n        },\n    )\n\n    // Patch: create snapshots for virtual files from VueSFCDocument\n    overrideMethod(\n      languageServiceHost,\n      'getScriptSnapshot',\n      (getScriptSnapshot) =>\n        (fileName: string): TypeScript.IScriptSnapshot | undefined => {\n          if (fs.isGeneratedVueFile(fileName)) {\n            const file = fs.getVueFile(fileName)\n\n            if (file != null) {\n              return ts.lib.ScriptSnapshot.fromString(file.getText())\n            }\n            return undefined\n          } else if (fs.isProjectRuntimeFile(fileName)) {\n            return ts.lib.ScriptSnapshot.fromString(\n              ts.getProjectRuntimeFile(fileName),\n            )\n          } else {\n            return getScriptSnapshot(fileName)\n          }\n        },\n    )\n  }\n\n  #patchResolveModuleNames(\n    container: Container,\n    languageServiceHost: TSLanguageServiceHost,\n  ): void {\n    const fs = container.get(FilesystemService)\n    const ts = container.get(TypescriptContextService)\n    const logger = LoggerService.getLogger('LanguageServiceHost')\n\n    let importedFrom: string | undefined\n    overrideMethod(\n      languageServiceHost,\n      'resolveModuleNames',\n      (resolveModuleNames) =>\n        (\n          moduleNames,\n          containingFile,\n          reusedNames,\n          redirectedReference,\n          options,\n          containingSourceFile,\n        ) => {\n          if (fs.isVueRuntimeFile(containingFile)) {\n            const anyProjectFile =\n              importedFrom ?? first(ts.project?.getRootFiles() ?? [])\n\n            // Runtime dependencies have only 'vue' dependency for now.\n            const core = ts.lib.resolveModuleName(\n              '@vue/runtime-core',\n              anyProjectFile,\n              options,\n              ts.serverHost,\n              undefined,\n              redirectedReference,\n            )\n            const vue = ts.lib.resolveModuleName(\n              'vue',\n              anyProjectFile,\n              options,\n              ts.serverHost,\n              undefined,\n              redirectedReference,\n            )\n            const result = core.resolvedModule != null ? core : vue\n            logger.debug(\n              `Resolve '@vue/runtime-core' to \"${\n                result.resolvedModule?.resolvedFileName ?? '?'\n              }\" in \"${containingFile}\"`,\n            )\n\n            return moduleNames.map((name) =>\n              name === '@vue/runtime-core' ? result.resolvedModule : undefined,\n            )\n          }\n\n          invariant(resolveModuleNames != null)\n\n          const result = resolveModuleNames(\n            moduleNames,\n            containingFile,\n            reusedNames,\n            redirectedReference,\n            options,\n            containingSourceFile,\n          )\n\n          const known = {\n            'vuedx~runtime': () => {\n              importedFrom = containingFile\n\n              return {\n                resolvedFileName: ts.getVueRuntimeFileNameFor(containingFile),\n                isExternalLibraryImport: true,\n              }\n            },\n            'vuedx~runtime~project': () => {\n              return {\n                resolvedFileName:\n                  ts.getProjectRuntimeFileNameFor(containingFile),\n                isExternalLibraryImport: false,\n              }\n            },\n          }\n          moduleNames.forEach((name, index) => {\n            const handler = known[name as keyof typeof known]\n            const resolved = result[index]\n            if (handler != null && resolved == null) {\n              result[index] = handler()\n            }\n          })\n\n          return result\n        },\n    )\n  }\n\n  #patchFilesystem(\n    container: Container,\n    host: TSLanguageServiceHost | TSServerHost,\n  ): void {\n    const fs = container.get(FilesystemService)\n    const ts = container.get(TypescriptContextService)\n    // Patch: check virtual files in activeTSDocIDs of VueSFCDocument\n    overrideMethod(host, 'fileExists', (fileExists) => (fileName) => {\n      return (\n        fs.isProjectRuntimeFile(fileName) ||\n        fileExists(fs.getRealFileNameIfAny(fileName))\n      )\n    })\n\n    // Patch: get contents for virtual files from VueSFCDocument\n    overrideMethod(host, 'readFile', (readFile) => (fileName, encoding) => {\n      if (fs.isGeneratedVueFile(fileName)) {\n        return fs.getVueFile(fileName)?.getText()\n      } else if (fs.isProjectRuntimeFile(fileName)) {\n        return ts.getProjectRuntimeFile(fileName)\n      }\n\n      return readFile(fileName, encoding)\n    })\n  }\n\n  #patchFilesystemWatcher(\n    container: Container,\n    serverHost: TSServerHost,\n  ): void {\n    const fs = container.get(FilesystemService)\n    const logger = LoggerService.getLogger('ServerHost')\n\n    // Patch: check virtual files in activeTSDocIDs of VueSFCDocument\n    overrideMethod(\n      serverHost,\n      'watchFile',\n      (watchFile) => (fileName, callback) => {\n        if (fs.isGeneratedVueFile(fileName)) {\n          return watchFile(\n            fs.getRealFileNameIfAny(fileName),\n            (id, eventKind) => {\n              logger.info(\n                `Patched watchFile: ${fileName} - ${id} - ${eventKind}`,\n              )\n              callback(fileName, eventKind)\n            },\n          )\n        }\n\n        if (fs.isProjectRuntimeFile(fileName)) {\n          return { close: () => {} }\n        }\n\n        return watchFile(fileName, callback)\n      },\n    )\n  }\n\n  #createContainer(options: Options): Container {\n    if (options.project?.projectService.logger.loggingEnabled() === true) {\n      setDebugging(true)\n    } else {\n      setDebugging(false)\n    }\n    this.logger.debug('New project:', options.project?.getProjectName(), {\n      rootDir: options.project?.getCurrentDirectory(),\n    })\n    this.logger.debug('Active projects:', Array.from(this.#containers.keys()))\n\n    const ts = new TypescriptContextService(options)\n    const fs = FilesystemService.createInstance(ts)\n    const container = new Container({\n      autoBindInjectable: true,\n      defaultScope: 'Singleton',\n      skipBaseClassChecks: true,\n    })\n\n    container.bind(ConfigManager).toConstantValue(ConfigManager.instance)\n    container.bind(TypescriptContextService).toConstantValue(ts)\n    container.bind(FilesystemService).toConstantValue(fs)\n\n    return container\n  }\n\n  readonly #loggerIds = new Map<string, string>()\n  #setupLogger(name: string, options: Options): void {\n    const id = this.#loggerIds.get(name) ?? `${this.#loggerIds.size}`\n\n    this.#loggerIds.set(name, id)\n\n    if (LoggerService.currentId === id) return\n    const logger = options.project?.projectService.logger\n    const LogLevel = options.typescript.server.LogLevel\n    LoggerService.currentId = id\n\n    LoggerService.setWriter({\n      info: (line) => {\n        if (logger == null) return\n        if (!logger.hasLevel(LogLevel.normal)) return\n        logger.msg(line, options.typescript.server.Msg.Info)\n      },\n      debug: (line) => {\n        if (logger == null) return\n        if (!logger.hasLevel(LogLevel.verbose)) return\n        logger.msg(line, options.typescript.server.Msg.Info)\n      },\n      error: (line) => {\n        if (logger == null) return\n        logger.msg(line, options.typescript.server.Msg.Err)\n      },\n    })\n  }\n\n  #createLanguageService(\n    languageService: TSLanguageService,\n    pluginService: TypescriptPluginService,\n  ): TypeScript.LanguageService {\n    const config = ConfigManager.instance\n    const cache = new Map<Function, Function>()\n\n    function bind<T extends Function>(fn: T, instance: unknown): T {\n      if (!cache.has(fn)) cache.set(fn, fn.bind(instance))\n      return cache.get(fn) as T\n    }\n\n    return new Proxy(languageService, {\n      get: (target, prop) => {\n        if (prop === TS_LANGUAGE_SERVICE) return () => languageService\n        if (config.state.enabled && pluginService.isVueProject) {\n          const value = pluginService[prop as keyof TypescriptPluginService]\n          if (typeof value === 'function') {\n            return bind(value, pluginService)\n          } else if (value !== undefined) {\n            return value\n          }\n        }\n\n        return target[prop as keyof TSLanguageService]\n      },\n      has: (target, prop) => {\n        return prop === TS_LANGUAGE_SERVICE || prop in target\n      },\n    })\n  }\n}\n\nexport const pluginManager = PluginManager.instance\n", "/* eslint-disable import/first */\nconsole.log =\n  console.info =\n  console.warn =\n  console.debug =\n  console.error =\n  console.trace =\n    () => {}\n\nimport 'reflect-metadata'\n\nimport { Telemetry } from '@vuedx/shared'\nimport type { Modules, PluginCreateInfo, TS } from './interfaces'\nimport type { PluginConfig } from './managers/ConfigManager'\nimport { pluginManager } from './managers/PluginManager'\nimport { PluginSideChannel } from './services/PluginSideChannel'\n\nexport { PluginSideChannel }\nexport type { PluginConfig }\n\npluginManager.fixConsole(console)\n\nexport default function init({ typescript }: Modules): TS.server.PluginModule {\n  Telemetry.setup(\n    'https://a1461052e1d94c7a9ee7c3f7add71b24@o237831.ingest.sentry.io/5595721',\n    'typescript-plugin-vue',\n    VERSION,\n    0.001,\n    { typescriptVersion: typescript.versionMajorMinor },\n  )\n\n  // eslint-disable-next-line @typescript-eslint/no-var-requires\n  const { resolve } = require('node:path') as {\n    resolve: typeof import('node:path').resolve\n  }\n\n  return {\n    create(info: PluginCreateInfo) {\n      return pluginManager.create({\n        ...info,\n        typescript,\n        typesDir: resolve(__dirname, '..', 'runtime'),\n      })\n    },\n    getExternalFiles(project) {\n      return pluginManager.getExternalFiles(project)\n    },\n    onConfigurationChanged(config) {\n      pluginManager.onConfigurationChanged(config)\n    },\n  }\n}\n"],
  "mappings": "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AA2B,wCAC3BC,qBAAsB,mCACtBC,iBAAkB,4BAClBC,sBACE,8DACFC,iBAAkB,qBAClBC,qBAAsB,6CACtBC,0BACE,sFACFC,iCACE,gDACFC,4BACE,+DACFC,kCACE,0DACFC,iCACE,iEACFC,sBAAuB,8BACvBC,yBAA0B,4BAC1BC,kBAAmB,+BACnBC,iBAAkB,mCAClBC,iBAAkB,oCAClBC,iCACE,8FACFC,kBACE,0FACFC,sBACE,2DACFC,2BACE,6DACFC,sBACE,kEACFC,UAAW,uBACXC,mBAAoB,iDACpBC,iBAAkB,wCAClBC,kBACE,kJACFC,2BACE,kHACFC,iBACE,6DACFC,2BACE,mKACFC,gBACE,0GAMFC,oBACE,oGACFC,+BACE,kEACFC,+BACE,qEACFC,oBACE,+DACFC,uBACE,uEACFC,kCACE,kHAEFC,oBACE,yGACFC,yBAA0B,8BAC1BC,0CACE,oIACFC,4CACE,sIACFC,6CACE,uIACFC,cAAe,oDACfC,kBAAmB,gDACnBC,eACE,2HACFC,gBAAiB,wDACjBC,aAAc,0CACdC,oBAAqB,oCACrBC,2BAA4B,+BAC5BC,eACE,sFACFC,oBACE,yDACFC,mBAAoB,wDACpBC,WAAY,yBACZC,gBACE,oJACFC,kBAAmB,6CACnBC,kBAAmB,kDACnBC,yCACE,mIACFC,2CACE,qIACFC,4CACE,sIACFC,8BAA+B,mCAC/BC,iCACE,2FACFC,yBAA0B,qCAC1BC,uBACE,0DACFC,kBAAmB,2BACnBC,2BACE,8DACFC,6BACE,mEACFC,oBACE,kEACFC,2BACE,0DACFC,uBACE;qDACFC,uBAAwB,iCACxBC,gBAAiB,yDACjBC,gBAAiB,yBACjBC,mCACE,mFACFC,gBAAiB,kDACjBC,2BACE,sDACFC,yBACE,8EACFC,kBACE,4DACFC,wBAAyB,gDACzBC,8BACE,oDACFC,6BACE,mEACFC,iBACE,wHACFC,oBAAqB,wBACrBC,mBAAoB,mCACpBC,mBAAoB,gCACpBC,qBAAsB,yBACtBC,iBAAkB,6CAClBC,uBACE,wDACFC,iBAAkB,wDAClBC,0BACE,oDAtOJ,EAwOW9J,GAAWG,WAzOuB,EA4OlC4J,GAAgCzJ,GAC3C,CACE0J,wBAA0B,0DAC1BC,oBAAsB,mEAFxB,EAIWjK,GAAWI,qBALuC,ECzNxD,SAASE,GACd4J,EAGAxO,EACgB,CAChB,IAAMyO,EAA4B,CAAA,EAClClK,cAAOmK,KAAKF,CAAZ,EAAsBG,QAAQC,GAAc,CAC1CH,EAAUG,GAAcrK,OAAOC,OAAO,CACpCxE,KAAAA,EACA4O,WAAAA,EACAjT,SAAU6S,EAASI,EAHiB,CAAd,CAKzB,CAND,EAOOrK,OAAOC,OAAOiK,CAAd,CACR,CAUc,IAAMI,GAAN,cAA0BlM,EAAe,CAMtDmM,uBAAuBC,EAAuB,CAC5C,IAAIjM,EACJ,OAAIiM,IAAQ,KAAKhM,MAAMvC,MAAOsC,EAAM,KAAKC,MAAMiM,SACtCD,IAAQ,KAAKhM,MAAMkM,aAAcnM,EAAM,KAAKC,MAAMmM,gBAClDH,IAAQ,KAAKhM,MAAMtC,IAAKqC,EAAM,KAAKC,MAAMoM,OACzCJ,IAAQ,KAAKhM,MAAMqM,WAAYtM,EAAM,KAAKC,MAAMsM,cACpDvM,EAAMlC,GAAY,KAAKC,MAAOkO,CAAb,EAEfjM,CACR,CAEDwM,MACEP,EACA,CAAE/O,KAAAA,EAAM4O,WAAAA,EAAYjT,SAAAA,CAApB,KACGuI,EACY,CACf,OAAO,KAAKqL,cAAcR,EAAK,CAAE/O,KAAAA,EAAM4O,WAAAA,CAAR,EAAsBjT,EAAU,GAAGuI,CAA3D,CACR,CAcDsL,eACET,EACA,CAAE/O,KAAAA,EAAMrE,SAAAA,CAAR,KACGuI,EACY,CACf,IAAMpB,EAAM,KAAKgM,uBAAuBC,CAA5B,EACNU,EACJ9T,EAAS+T,QAAQ,UAAW,CAACC,EAAGlN,IAAcyB,EAAOzB,EAArD,EACC,KAAIK,EAAI1C,QAAQ0C,EAAIxC,UACvB,GAAI,KAAK3G,QAAQiW,cAAe,CAC9B,IAAMC,EAAS,KAAK9M,MAAM8M,OAC1B,QAASpN,EAAIoN,EAAOnN,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC3C,IAAMqN,EAAQD,EAAOpN,GACrB,GAAIqN,EAAMf,MAAQA,EAChB,OAAOxK,OAAOpI,OAAO2T,EAAO,CAAEL,QAAAA,CAAF,CAArB,EACF,GAAIK,EAAMf,IAAMA,EACrB,KAEH,CACF,CACD,OAAO,KAAKgB,OAAO,CAAE/P,KAAAA,EAAM8C,IAAAA,EAAKiM,IAAAA,CAAb,EAAoBU,CAAhC,CACR,CAEDF,cACER,EACAiB,EAIAC,KACG/L,EACY,CACf,IAAMpB,EAAM,KAAKgM,uBAAuBC,CAA5B,EACNU,EACJQ,EAAcP,QAAQ,UAAW,CAACC,EAAGlN,IAAcyB,EAAOzB,EAA1D,EACC,KAAIK,EAAI1C,QAAQ0C,EAAIxC,UACvB,OAAO,KAAKyP,OAAOxL,OAAOpI,OAAQ,CAAE2G,IAAAA,EAAKiM,IAAAA,CAAP,EAAuBiB,CAAtC,EAA6CP,CAAzD,CACR,CAEDM,OAAOG,EAA4BT,EAAgC,CAEjE,IAAMU,EAAkC,IAAI1L,YAAYgL,CAAhB,EAExC,GADAlL,OAAOpI,OAAOgU,EAAKD,CAAnB,EACI,KAAKvW,QAAQiW,cACf,OAAK,KAAKQ,aAAa,KAAKrN,MAAM8M,OAAO7M,KAAKmN,CAAvB,EAChBA,EAEP,MAAMA,CAET,CAtFqD,EC9CxDE,GAAgBC,GACd,cAAcA,CAAW,CACvBC,mBAAmB,CAAEC,QAAAA,EAASC,MAAAA,CAAX,EAA4B,CAC7C,IAAIC,EAAQ,KACZ,GAAI,CACFA,EAAQ,IAAI7Q,OAAO2Q,EAASC,CAApB,CACT,MAAC,CAAU,CAIZ,IAAM3O,EAAO,KAAK6O,mBAA0CD,CAA/C,EACb5O,OAAAA,EAAK4O,MAAQ,CAAEF,QAAAA,EAASC,MAAAA,CAAX,EAEN3O,CACR,CAED8O,mBAAmBC,EAAoB,CAErC,IAAIC,EACJ,GAAI,CAEFA,EAASC,OAAOF,CAAD,CAChB,MAAC,CACAC,EAAS,IACV,CACD,IAAMhP,EAAO,KAAK6O,mBAA0CG,CAA/C,EACbhP,OAAAA,EAAK7H,OAAS+W,OAAOlP,EAAK+O,OAASA,CAAf,EAEb/O,CACR,CAEDmP,oBAAoBJ,EAAoB,CAItC,IAAM/O,EAAO,KAAK6O,mBAAmBzW,IAAxB,EACb4H,OAAAA,EAAK5H,QAAU8W,OAAOlP,EAAK+O,OAASA,CAAf,EAEd/O,CACR,CAED6O,mBAA8BE,EAAY,CACxC,OAAO,KAAKK,aAAgBL,EAAO,SAA5B,CACR,CAEDM,mBAAmBN,EAAoB,CACrC,OAAO,KAAKF,mBAAmBE,CAAxB,CACR,CAEDO,oBAAoBP,EAAiB,CACnC,OAAO,KAAKF,mBAAmBE,CAAxB,CACR,CAEDQ,kBAA2B,CACzB,OAAO,KAAKV,mBAAmB,IAAxB,CACR,CAEDW,oBAAoBT,EAAkC,CACpD,OAAO,KAAKF,mBAAmBE,CAAxB,CACR,CAEDU,gBAAgBC,EAA+C,CAC7D,IAAMC,EAAmBD,EAAUX,MAE7Ba,EAAO,KAAKC,YAAYH,EAAUhR,MAAOgR,EAAU1O,IAAItC,KAAhD,EACPoR,EAAa,KAAKD,YACtBF,EAAiBjR,MACjBiR,EAAiB3O,IAAItC,KAFJ,EAKnBoR,OAAAA,EAAWf,MAAQY,EAAiBI,MAAMC,gBAC1CF,EAAWG,IAAMN,EAAiBI,MAAME,IAExCL,EAAKE,WAAa,KAAKI,aACrBJ,EACA,UACAH,EAAiBhR,IACjBgR,EAAiB3O,IAAIrC,GAJL,EAMlBiR,EAAKF,UAAYC,EAAiBI,MAAME,IAAIE,MAAM,EAAG,EAApC,EAEV,KAAKD,aACVN,EACA,sBACAF,EAAU/Q,IACV+Q,EAAU1O,IAAIrC,GAJT,CAMR,CAMDyR,aACEpQ,EACAqQ,EACM,CACN,MAAMD,aAAapQ,EAAMqQ,CAAzB,EACArQ,EAAK8P,WAAa,EACnB,CAEDQ,iBAAiBtQ,EAA0C,CACrDA,GAAQ,MAAQ,KAAKuQ,iBAAiBvQ,CAAtB,EAClB,KAAKsQ,iBAAmBtQ,EAA8B+O,KAAtD,EAEA,MAAMuB,iBAAiBtQ,CAAvB,CAEH,CAEDwQ,6BAA6BC,EAAwC,CACnE,OAASA,EAA2D1B,MACjE3M,MACJ,CAEDsO,iBAAiBd,EAA4B,CAAA,IAAAe,EAC3C,OACEf,EAAK3N,OAAS,uBACd2N,EAAKE,WAAW7N,OAAS,WACzB,OAAO2N,EAAKE,WAAWf,OAAU,UACjC,GAAA4B,EAACf,EAAKE,WAAWC,QAAjB,MAACY,EAAuBC,cAE3B,CAEDC,gBAAgBjB,EAAgC,CAC9C,IAAMb,EAAQa,EAAKE,WAAWf,MACxBW,EAAY,MAAMmB,gBAAgBjB,CAAtB,EAKlB,YAAKkB,SAASpB,EAAUX,MAAO,kBAAmBA,CAAlD,EAEOW,CACR,CAEDqB,eACE/Q,KACGgR,EACG,CACN,MAAMD,eAAe/Q,EAAM,GAAGgR,CAA9B,EAEA,IAAMC,EAAsBjR,EAAKkR,WAAWC,IAAIC,GAC9C,KAAK3B,gBAAgB2B,CAArB,CAD0B,EAG5BpR,EAAKqR,KAAOJ,EAAoBK,OAAOtR,EAAKqR,IAAhC,EAEZ,OAAOrR,EAAKkR,UACb,CAEDK,gBACEC,EACAf,EACAgB,EACApB,EACAqB,EACAC,EACM,CACN,KAAKC,YACHnB,EACAgB,EACApB,EACAqB,EACAC,EACA,cACA,EAPF,EASIlB,EAAOoB,iBAETpB,EAAO1B,MAAM8C,eAAiBpB,EAAOoB,eACrC,OAAOpB,EAAOoB,gBAEhBL,EAAUH,KAAKnQ,KAAKuP,CAApB,CACD,CAEDqB,yBAAyBd,EAAsB,CAC7C,IAAMhR,EAAO,MAAM8R,sBAAsB,GAAGd,CAA/B,EACb,OACEhR,EAAKiC,OAAS,eACd,KAAKrC,gBAAgB,SAAU,eAA/B,EAEO,KAAKmS,sCAAsC/R,CAA3C,EAEFA,CACR,CAED+R,sCACE/R,EAC2B,CAC3B,IAAMpI,EAAO,MAAMoa,iBAAiBhS,CAAvB,EACbA,OAAAA,EAAQA,EACR,OAAOA,EAAKiS,GACZjS,EAAKpI,KAAOA,EACZoI,EAAKiC,KAAO,oBACLjC,CACR,CAEDkS,cAAclS,EAAuB,CACnC,OAAK,KAAKJ,gBAAgB,SAAU,eAA/B,EAGEI,EAAKiC,OAAS,oBAFZ,MAAMiQ,cAAclS,CAApB,CAGV,CAEDgS,iBAAiBhS,EAAsB,CACrC,OAAK,KAAKJ,gBAAgB,SAAU,eAA/B,EAGEI,EAAKpI,KAFH,MAAMoa,iBAAiBhS,CAAvB,CAGV,CAEDoP,aAAwBL,EAAY9M,EAAkC,CACpE,IAAMjC,EAAO,MAAMoP,aAAgBL,EAAO9M,CAA7B,EACbjC,OAAAA,EAAKiQ,IAAMjQ,EAAK+P,MAAME,IACtB,OAAOjQ,EAAK+P,MAEL/P,CACR,CAEDmS,kBACEnS,EACAoS,EACAC,EAAqB,GACf,CACN,MAAMF,kBAAkBnS,EAAMoS,EAAiBC,CAA/C,EACArS,EAAK8P,WAAa9P,EAAKqR,KAAKpP,OAAS,gBACtC,CAED2P,YACE5R,EACAyR,EACApB,EACAqB,EACAY,EACArQ,EACAsQ,EAAwB,GACrB,CACH,IAAIC,EAAW,KAAKC,UAAL,EACfD,OAAAA,EAASE,KAAO1S,EAAK0S,KACrBF,EAAW,MAAMZ,YACfY,EACAf,EACApB,EACAqB,EACAY,EACArQ,EACAsQ,CAPS,EASXC,EAASvQ,KAAO,qBAChB,OAAOuQ,EAASE,KAEhB1S,EAAK+O,MAAQyD,EACTvQ,IAAS,uBAEXjC,EAAK2S,SAAW,IAElB1Q,EAAO,mBACA,KAAK2Q,WAAW5S,EAAMiC,CAAtB,CACR,CAED4Q,sBAAsB7B,EAA8B,CAClD,IAAM8B,EAAgB,MAAMD,mBAAmB,GAAG7B,CAA5B,EACtB,OAAI,KAAKpR,gBAAgB,SAAU,eAA/B,IACFkT,EAAa7Q,KAAO,sBAEd6Q,CACT,CAEDC,6BAA6B/B,EAAqC,CAChE,IAAM8B,EAAgB,MAAMC,0BAA0B,GAAG/B,CAAnC,EACtB,OAAI,KAAKpR,gBAAgB,SAAU,eAA/B,IACFkT,EAAa7Q,KAAO,qBACpB6Q,EAAaH,SAAW,IAElBG,CACT,CAEDE,kBACEC,EACAxB,EACApB,EACA6C,EACAC,EACiB,CACjB,IAAMnT,EAA0B,MAAMgT,kBACpCC,EACAxB,EACApB,EACA6C,EACAC,CAL8B,EAQhC,OAAInT,IACFA,EAAKiC,KAAO,WACNjC,EAA2B0S,OAAS,WAAU1S,EAAK0S,KAAO,QAChE1S,EAAKoT,UAAY,IAGXpT,CACT,CAEDqT,oBACEJ,EACAK,EACApG,EACAgG,EACAK,EACmB,CACnB,IAAMvT,EAA0B,MAAMqT,oBACpCJ,EACAK,EACApG,EACAgG,EACAK,CAL8B,EAQhC,OAAIvT,IACFA,EAAK0S,KAAO,OACZ1S,EAAKiC,KAAO,YAGNjC,CACT,CAEDwT,aAAaxT,EAAcyT,EAA8B,CACvD,OAAIzT,GAAQ,MAAQ,KAAKuQ,iBAAiBvQ,CAAtB,EACX,KAAKwT,aAAaxT,EAAK+O,MAAO0E,CAA9B,EAEF,MAAMD,aAAaxT,EAAMyT,CAAzB,CACR,CAEDC,aAAa1T,EAAc2T,EAAiB,GAAe,CACzD,OAAI3T,GAAQ,MAAQ,KAAKuQ,iBAAiBvQ,CAAtB,GAClB,KAAK0T,aAAa1T,EAAK+O,MAAO4E,CAA9B,EAEO3T,GAGF,MAAM0T,aAAa1T,EAAM2T,CAAzB,CACR,CAEDC,iCAAiCX,KAAiBjC,EAAM,CAClDiC,EAAKP,OAAS,OAASO,EAAKP,OAAS,MACvC,KAAKlF,MAAMyF,EAAKY,IAAInV,MAAOoV,EAAOxL,kBAAlC,EACS2K,EAAKxC,OACd,KAAKjD,MAAMyF,EAAKY,IAAInV,MAAOoV,EAAOvL,gBAAlC,EAEA,MAAMqL,iCAAiCX,EAAM,GAAGjC,CAAhD,CAEH,CAED+C,qBACE/T,EACAgU,EACc,CAGd,GAFA,MAAMD,qBAAqB/T,EAAMgU,CAAjC,EAEIhU,EAAKiU,OAAOhS,OAAS,SAAU,CAGjC,GAFEjC,EAAyCiC,KAAO,mBAChDjC,EAAyChC,OAASgC,EAAKmC,UAAU,GAC/D,KAAK1C,UAAU,kBAAf,EAAoC,CAAA,IAAAyU,EACpClU,EAAyCmU,YAA3CD,EACElU,EAAKmC,UAAU,KADjB,KAAA+R,EACuB,IACxB,CAED,OAAOlU,EAAKmC,UAEZ,OAAOnC,EAAKiU,MACb,CAED,OAAOjU,CACR,CAEDoU,sBACEpU,EAKA,CAEIA,EAAKiC,OAAS,oBAIlB,MAAMmS,sBAAsBpU,CAA5B,CACD,CAEDqU,YAAYrU,EAAc,CAGxB,OAFA,MAAMqU,YAAYrU,CAAlB,EAEQA,EAAKiC,UACN,uBACHjC,EAAKsU,SAAW,KAChB,UAEG,yBAEDtU,EAAKqC,WAAWzB,SAAW,GAC3BZ,EAAKqC,WAAW,GAAGJ,OAAS,6BAE5BjC,EAAKiC,KAAO,uBACZjC,EAAKsU,SAAWtU,EAAKqC,WAAW,GAAGiS,SACnC,OAAOtU,EAAKqC,YAGd,MAGJ,OAAOrC,CACR,CAEDuU,eACEC,EACAlB,EACApG,EACAuH,EACAxT,EACA,CACA,IAAMjB,EAAO,MAAMuU,eACjBC,EACAlB,EACApG,EACAuH,EACAxT,CALW,EAQb,GAAIA,EAAMyT,qBAQR,IALE1U,EAAKiC,OAAS,4BACdjC,EAAKiC,OAAS,4BAEdjC,EAAKiC,KAAOjC,EAAKiC,KAAK0S,UAAU,CAApB,GAEV1T,EAAM2T,KAAM,CACd,IAAMC,EAAQ,KAAKC,gBAAgB9U,CAArB,EACd6U,OAAAA,EAAM/E,WAAa9P,EACZ,KAAK4S,WAAWiC,EAAO,iBAAvB,CACR,OAED7U,EAAKiC,OAAS,oBACdjC,EAAKiC,OAAS,oBAEdjC,EAAKgU,SAAW,IAGlB,OAAOhU,CACR,CAED+U,yBAAyB/U,EAAuB,CAC9C,OAAIA,EAAKiC,OAAS,oBAChBjC,EAAOA,EAAK8P,YAEP,MAAMiF,yBAAyB/U,CAA/B,CACR,CAEDgV,gBAAgBhV,EAAuB,CACrC,OAAOA,EAAKiC,OAAS,iBACtB,CAEDsO,iBAAiBvQ,EAAuB,CACtC,OAAOA,EAAKiC,OAAS,YAAcjC,EAAK0S,OAAS,QAAU,CAAC1S,EAAKyQ,MAClE,CAEDwE,eAAejV,EAAuB,CACpC,OAAOA,EAAKyQ,QAAUzQ,EAAK0S,OAAS,OAAS1S,EAAK0S,OAAS,KAC5D,CAjdsB,ECHdwC,GAAN,KAAiB,CACtBhe,YAAYY,EAAeqd,EAAyB,CAAA,KAKpDrd,MALoD,OAAA,KAMpDqd,cANoD,OAClD,KAAKrd,MAAQA,EACb,KAAKqd,cAAgB,CAAC,CAACA,CACxB,CAJqB,EAUXld,GAET,CACFmd,MAAO,IAAIF,GAAW,GAAf,EACPrb,SAAU,IAAIqb,GAAW,IAAK,EAApB,CAFR,EAeJG,EAAGpc,OAAOzB,cAAgB8d,GAAW,CACnCA,EAAQC,IAAR,CACD,EASDF,EAAGvc,OAAOtB,cACR6d,EAAGrc,WAAWxB,cACd6d,EAAGrb,aAAaxC,cACd8d,GAAW,CACTA,EAAQpU,KAAKjJ,GAAMmd,KAAnB,CACD,EAELC,EAAGtb,UAAUvC,cAAgB8d,GAAW,CAClCA,EAAQA,EAAQ1U,OAAS,KAAO3I,GAAM4B,SACxCyb,EAAQC,IAAR,EAEAD,EAAQpU,KAAKjJ,GAAM4B,QAAnB,CAEH,EC/CD,IAAI2b,GAA+B,wrIAE/BC,GAA0B,ujFAExBC,GAA0B,IAAI3X,OAClC,IAAMyX,GAA+B,GADP,EAG1BG,GAAqB,IAAI5X,OAC7B,IAAMyX,GAA+BC,GAA0B,GADtC,EAI3BD,GAA+BC,GAA0B,KASzD,IAAMG,GAA6B,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,KAAK,IAAvwC,EAE7BC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAA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,sBAAuB,gCACvBC,8BAA+B,sCAC/BC,2BAA4B,gCAC5BC,kBAAmB,wBACnBC,WAAY,+BACZC,kBAAmB,uCACnBC,cAAe,iBACfC,yBACE,gEACFC,yBAA0B,4BAC1BC,+BAAgC,2CAChCC,8BAA+B,kCAC/BC,8BAA+B,4BAC/BC,sBACE,wEACFC,6BAA8B,mCAC9BC,mBAAoB,iCACpBC,oBACE,8EACFC,0BAA2B,uCAC3BC,qBAAsB,kCACtBC,iBAAkB,2BAClBC,sBACE,8DACFC,qBAAsB,4CACtBC,0BACE,qFACFC,iCACE,+CACFC,4BACE,8DACFC,kCACE,yDACFC,iCACE,gEACFC,sBAAuB,6BACvBC,yBAA0B,2BAC1BC,kBAAmB,8BACnBC,iBAAkB,kCAClBC,iBAAkB,mCAClBC,iCACE,6FACFC,kBACE,wFACFC,sBACE,0DACFC,2BACE,4DACFC,UAAW,sBACXC,mBAAoB,gDACpBC,iBAAkB,uCAClBC,oBACE,mGACFC,+BACE,iEACFC,+BACE,oEACFC,oBACE,8DACFC,uBACE,sEACFC,kCACE,+FACFC,oBACE,wGACFC,yBAA0B,6BAC1BC,0CACE,mIACFC,4CACE,qIACFC,6CACE,sIACFC,cAAe,mDACfC,kBAAmB,+CACnBC,eACE,0HACFC,gBAAiB,uDACjBC,aAAc,yCACdC,oBAAqB,mCACrBC,2BAA4B,8BAC5BC,eACE,qFACFC,oBAAqB,wDACrBC,mBAAoB,uDACpBC,WAAY,wBACZC,gBACE,kJACFC,kBAAmB,4CACnBC,kBAAmB,iDACnBC,yCACE,kIACFC,2CACE,oIACFC,4CACE,qIACFC,8BAA+B,kCAC/BC,iCACE,0FACFC,yBAA0B,oCAC1BC,uBACE,yDACFC,kBAAmB,0BACnBC,2BACE,6DACFC,6BACE,kEACFC,oBAAqB,2CACrBC,2BACE,yDACFC,uBACE;qDACFC,uBAAwB,gCACxBC,gBAAiB,sDACjBC,gBAAiB,wBACjBC,mCACE,mFACFC,gBAAiB,kDACjBC,2BACE,qDACFC,yBACE,8EACFC,kBAAmB,qDACnBC,wBAAyB,+CACzBC,8BACE,mDACFC,6BACE,k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AG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,KAAK,IAAvwC,EAE7BC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EA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AAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,KAAM,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,GAAI,IAAK,EAAG,KAAM,GAAI,KAAM,KAAM,IAAK,KAAM,IAAI,EAC/wDC,IAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EA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,OAAQ,SACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,IACN,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,eACR,OAAQ,SACR,OAAQ,eACR,OAAQ,eACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,eACR,OAAQ,SACR,OAAQ,eACR,OAAQ,eACR,OAAQ,SACR,OAAQ,SACR,OAAQ,OACR,OAAQ,SACR,OAAQ,SACR,OAAQ,IACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,KAAM,IACN,KAAM,IACN,OAAQ,SACR,OAAQ,SACR,OAAQ,OACR,OAAQ,OACR,OAAQ,SACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,OAAQ,YACR,OAAQ,YACR,OAAQ,OACR,OAAQ,SACR,OAAQ,SACR,OAAQ,IACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,KAAM,OACN,KAAM,OACN,OAAQ,IACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,OACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,OACR,OAAQ,YACR,OAAQ,YACR,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,SACR,MAAO,OACP,MAAO,OACP,MAAO,OACP,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,IACT,MAAO,OACP,MAAO,OACP,QAAS,YACT,QAAS,YACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,KACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,OACT,QAAS,OACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,YACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,YACT,QAAS,eACT,QAAS,eACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,eACT,QAAS,eACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,eACT,QAAS,UACT,QAAS,eACT,QAAS,UACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,YACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,IACT,QAAS,IACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,IACT,QAAS,SACT,QAAS,YACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,OACV,SAAU,OACV,SAAU,OACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,OACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,KACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,OACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,eACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,eACX,UAAW,eACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,eACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,OACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY;EACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,eACZ,WAAY,SACZ,WAAY,SACZ,WAAY,eACZ,WAAY,eACZ,WAAY,eACZ,WAAY,SACZ,WAAY,eACZ,WAAY,eACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,OACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,eACb,YAAa,SACb,YAAa,eACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,IACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,OACd,aAAc,OACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,OACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,OACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,eACf,cAAe,eACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,eACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,S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AAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,KAAM,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,GAAI,IAAK,EAAG,KAAM,GAAI,KAAM,KAAM,IAAK,KAAM,IAAI,EAC/wDC,IAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,MAAO,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,MAAO,EAAG,KA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GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,KAAM,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,GAAI,IAAK,EAAG,KAAM,GAAI,KAAM,KAAM,IAAK,KAAM,IAAI,EAC/wDC,IAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,E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,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,KAAM,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,GAAI,IAAK,EAAG,KAAM,GAAI,KAAM,KAAM,IAAK,KAAM,IAAI,EAC/wDC,IAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,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OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,IACN,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,eACR,OAAQ,SACR,OAAQ,eACR,OAAQ,eACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,eACR,OAAQ,SACR,OAAQ,eACR,OAAQ,eACR,OAAQ,SACR,OAAQ,SACR,OAAQ,OACR,OAAQ,SACR,OAAQ,SACR,OAAQ,IACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,KAAM,IACN,KAAM,IACN,OAAQ,SACR,OAAQ,SACR,OAAQ,OACR,OAAQ,OACR,OAAQ,SACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,OAAQ,YACR,OAAQ,YACR,OAAQ,OACR,OAAQ,SACR,OAAQ,SACR,OAAQ,IACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,KAAM,OACN,KAAM,OACN,KAAM,OACN,OAAQ,IACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,OACR,KAAM,OACN,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,YACR,OAAQ,SACR,OAAQ,SACR,OAAQ,OACR,OAAQ,YACR,OAAQ,YACR,KAAM,OACN,OAAQ,SACR,OAAQ,SACR,OAAQ,SACR,OAAQ,YACR,OAAQ,SACR,MAAO,OACP,MAAO,OACP,MAAO,OACP,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,IACT,MAAO,OACP,MAAO,OACP,QAAS,YACT,QAAS,YACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,KACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,OACT,QAAS,OACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,YACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,YACT,QAAS,eACT,QAAS,eACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,eACT,QAAS,eACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,eACT,QAAS,eACT,QAAS,UACT,QAAS,eACT,QAAS,UACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,YACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,IACT,QAAS,IACT,QAAS,eACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,IACT,QAAS,SACT,QAAS,YACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,IACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,MAAO,OACP,MAAO,OACP,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,OACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,IACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,OACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,YACT,QAAS,YACT,QAAS,YACT,QAAS,SACT,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,OACV,SAAU,OACV,SAAU,OACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,OACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,KACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,OACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,eACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,IACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,OACV,SAAU,OACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,eACV,SAAU,eACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,OAAQ,OACR,OAAQ,OACR,SAAU,SACV,SAAU,SACV,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,IACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,IACX,UAAW,eACX,UAAW,eACX,UAAW,eACX,UAAW,eACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,OACX,UAAW,OACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,UAAW,SACX,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,eACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,OACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY;EACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,eACZ,WAAY,SACZ,WAAY,SACZ,WAAY,eACZ,WAAY,eACZ,WAAY,eACZ,WAAY,SACZ,WAAY,eACZ,WAAY,eACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,WAAY,SACZ,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,OACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,eACb,YAAa,SACb,YAAa,eACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,IACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,YAAa,SACb,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,OACd,aAAc,OACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,OACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,eACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,OACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,aAAc,SACd,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,eACf,cAAe,eACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,eACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,eAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,eAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eAAgB,SAChB,eA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",
  "names": ["require_tslib", "__commonJSMin", "exports", "module", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__values", "__read", "__spread", "__spreadArrays", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "__createBinding", "factory", "root", "createExporter", "previous", "id", "v", "exporter", "extendStatics", "d", "b", "p", "__", "t", "s", "e", "i", "decorators", "target", "key", "desc", "c", "r", "paramIndex", "decorator", "metadataKey", "metadataValue", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "rejected", "result", "body", "_", "f", "y", "g", "verb", "n", "op", "o", "m", "k", "k2", "ar", "error", "il", "a", "j", "jl", "q", "resume", "settle", "fulfill", "cooked", "raw", "mod", "receiver", "privateMap", "require_lru", "__commonJSMin", "exports", "g", "f", "e", "NEWER", "OLDER", "LRUMap", "limit", "entries", "Entry", "key", "value", "entry", "it", "itv", "EntryIterator", "oldestEntry", "ent", "KeyIterator", "ValueIterator", "fun", "thisObj", "s", "i", "require_ms", "__commonJSMin", "exports", "module", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_common", "__commonJSMin", "exports", "module", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "len", "toNamespace", "name", "regexp", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_has_flag", "__commonJSMin", "exports", "module", "flag", "argv", "prefix", "position", "terminatorPosition", "require_supports_color", "__commonJSMin", "exports", "module", "os", "tty", "hasFlag", "env", "forceColor", "translateLevel", "level", "supportsColor", "haveStream", "streamIsTTY", "min", "osRelease", "sign", "version", "getSupportLevel", "stream", "require_node", "__commonJSMin", "exports", "module", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "supportsColor", "key", "obj", "prop", "_", "k", "val", "args", "name", "c", "colorCode", "prefix", "getDate", "namespaces", "debug", "keys", "i", "formatters", "v", "str", "require_src", "__commonJSMin", "exports", "module", "require_common", "__commonJSMin", "exports", "module", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "len", "toNamespace", "name", "regexp", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_node", "__commonJSMin", "exports", "module", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "supportsColor", "key", "obj", "prop", "_", "k", "val", "args", "name", "c", "colorCode", "prefix", "getDate", "namespaces", "debug", "keys", "i", "formatters", "v", "str", "require_src", "__commonJSMin", "exports", "module", "promisify", "fn", "req", "opts", "resolve", "reject", "err", "rtn", "exports", "events_1", "debug_1", "__importDefault", "promisify_1", "debug", "isAgent", "v", "isSecureEndpoint", "stack", "l", "createAgent", "callback", "opts", "Agent", "_opts", "req", "fn", "timedOut", "timeoutId", "timeoutMs", "onerror", "err", "ontimeout", "callbackError", "onsocket", "socket", "module", "debug_1", "__importDefault", "debug", "parseProxyResponse", "socket", "resolve", "reject", "buffersLength", "buffers", "read", "b", "ondata", "cleanup", "onend", "onerror", "onclose", "err", "buffered", "firstLine", "statusCode", "exports", "net_1", "__importDefault", "tls_1", "url_1", "assert_1", "debug_1", "agent_base_1", "parse_proxy_response_1", "debug", "HttpsProxyAgent", "_opts", "opts", "proxy", "isHTTPS", "req", "secureProxy", "socket", "headers", "payload", "host", "port", "secureEndpoint", "isDefaultPort", "name", "proxyResponsePromise", "statusCode", "buffered", "resume", "servername", "omit", "fakeSocket", "s", "exports", "secure", "protocol", "obj", "keys", "ret", "key", "agent_1", "__importDefault", "createHttpsProxyAgent", "opts", "module", "exports", "getNonCustomTagKeys", "BindingScopeEnum", "exports", "BindingTypeEnum", "TargetTypeEnum", "idCounter", "id", "exports", "literal_types_1", "id_1", "Binding", "serviceIdentifier", "scope", "request", "clone", "exports", "exports", "UNDEFINED_INJECT_ANNOTATION", "name", "ARGUMENTS_LENGTH_MISMATCH", "values", "_i", "POST_CONSTRUCT_ERROR", "CIRCULAR_DEPENDENCY_IN_FACTORY", "METADATA_KEY", "MetadataReader", "constructorFunc", "compilerGeneratedMetadata", "userGeneratedMetadata", "exports", "BindingCount", "exports", "ERROR_MSGS", "isStackOverflowExeption", "error", "exports", "ERROR_MSGS", "getServiceIdentifierAsString", "serviceIdentifier", "_serviceIdentifier", "exports", "listRegisteredBindingsForServiceIdentifier", "container", "getBindings", "registeredBindingsList", "registeredBindings", "binding", "name", "getFunctionName", "alreadyDependencyChain", "request", "dependencyChainToString", "_createStringArr", "req", "result", "stringArr", "circularDependencyToException", "childRequest", "services", "listMetadataForTarget", "serviceIdentifierString", "target", "m_1", "namedTag", "otherTags", "tag", "v", "name_1", "match", "id_1", "Context", "container", "plan", "currentRequest", "exports", "METADATA_KEY", "Metadata", "key", "value", "exports", "Plan", "parentContext", "rootRequest", "exports", "ERROR_MSGS", "METADATA_KEY", "tagParameter", "annotationTarget", "propertyName", "parameterIndex", "metadata", "metadataKey", "_tagParameterOrProperty", "exports", "tagProperty", "paramsOrPropertiesMetadata", "isParameterDecorator", "key", "paramOrPropertyMetadata", "_i", "paramOrPropertyMetadata_1", "m", "_decorate", "decorators", "target", "_param", "paramIndex", "decorator", "decorate", "error_msgs_1", "METADATA_KEY", "metadata_1", "decorator_utils_1", "LazyServiceIdentifer", "cb", "exports", "inject", "serviceIdentifier", "target", "targetKey", "index", "metadata", "QueryableString", "str", "searchString", "reverseString", "reverseSearchString", "compareString", "exports", "METADATA_KEY", "id_1", "metadata_1", "queryable_string_1", "Target", "type", "name", "serviceIdentifier", "namedOrTagged", "metadataItem", "key", "_i", "_a", "m", "metadata", "_this", "value", "exports", "inject_1", "ERROR_MSGS", "literal_types_1", "METADATA_KEY", "serialization_1", "exports", "target_1", "getDependencies", "metadataReader", "func", "constructorName", "targets", "getTargets", "isBaseClass", "metadata", "serviceIdentifiers", "msg", "constructorArgsMetadata", "keys", "hasUserDeclaredUnknownInjections", "hasOptionalParameters", "iterations", "constructorTargets", "getConstructorArgsAsTargets", "propertyTargets", "getClassPropsAsTargets", "__spreadArray", "getConstructorArgsAsTarget", "index", "targetMetadata", "formatTargetMetadata", "isManaged", "serviceIdentifier", "injectIdentifier", "isObject", "isFunction", "isUndefined", "isUnknownType", "target", "i", "constructorFunc", "classPropsMetadata", "_i", "keys_1", "key", "targetName", "baseConstructor", "baseTargets", "getBaseClassDependencyCount", "baseConstructorName", "t", "m", "unmanagedCount", "dependencyCount", "targetMetadataMap", "id_1", "Request", "serviceIdentifier", "parentContext", "parentRequest", "bindings", "target", "child", "exports", "binding_count_1", "ERROR_MSGS", "literal_types_1", "METADATA_KEY", "exceptions_1", "serialization_1", "context_1", "metadata_1", "plan_1", "reflection_utils_1", "request_1", "target_1", "getBindingDictionary", "cntnr", "exports", "_createTarget", "isMultiInject", "targetType", "serviceIdentifier", "name", "key", "value", "metadataKey", "injectMetadata", "target", "tagMetadata", "_getActiveBindings", "metadataReader", "avoidConstraints", "context", "parentRequest", "bindings", "getBindings", "activeBindings", "binding", "request", "_validateActiveBindingCount", "container", "serviceIdentifierString", "msg", "_createSubRequests", "childRequest", "thePlan", "subChildRequest", "dependencies", "baseClassDependencyCount", "error", "dependency", "bindingDictionary", "plan", "createMockRequest", "error_msgs_1", "literal_types_1", "METADATA_KEY", "_injectProperties", "instance", "childRequests", "resolveRequest", "propertyInjectionsRequests", "childRequest", "propertyInjections", "r", "index", "propertyName", "injection", "_createInstance", "Func", "injections", "__spreadArray", "_postConstruct", "constr", "result", "data", "e", "resolveInstance", "constructorInjectionsRequests", "constructorInjections", "exports", "ERROR_MSGS", "literal_types_1", "exceptions_1", "serialization_1", "instantiation_1", "invokeFactory", "factoryType", "serviceIdentifier", "fn", "error", "_resolveRequest", "requestScope", "request", "bindings", "childRequests", "targetIsAnArray", "targetParentIsNotAnArray", "childRequest", "_f", "result", "binding_1", "isSingleton", "isRequestSingleton", "resolve", "context", "exports", "METADATA_KEY", "metadata_1", "traverseAncerstors", "request", "constraint", "parent", "exports", "taggedConstraint", "key", "value", "namedConstraint", "typeConstraint", "type", "binding", "serviceIdentifier", "constructor", "binding_on_syntax_1", "constraint_helpers_1", "BindingWhenSyntax", "binding", "constraint", "name", "request", "targetIsDefault", "tag", "value", "parent", "ancestor", "exports", "binding_when_syntax_1", "BindingOnSyntax", "binding", "handler", "exports", "binding_on_syntax_1", "binding_when_syntax_1", "BindingWhenOnSyntax", "binding", "constraint", "name", "tag", "value", "parent", "ancestor", "handler", "exports", "literal_types_1", "binding_when_on_syntax_1", "BindingInSyntax", "binding", "exports", "binding_in_syntax_1", "binding_on_syntax_1", "binding_when_syntax_1", "BindingInWhenOnSyntax", "binding", "constraint", "name", "tag", "value", "parent", "ancestor", "handler", "exports", "ERROR_MSGS", "literal_types_1", "binding_in_when_on_syntax_1", "binding_when_on_syntax_1", "BindingToSyntax", "binding", "constructor", "self", "value", "func", "factory", "bindingWhenOnSyntax", "serviceIdentifier", "context", "autofactory", "provider", "service", "exports", "ContainerSnapshot", "bindings", "middleware", "snapshot", "exports", "ERROR_MSGS", "Lookup", "serviceIdentifier", "value", "entry", "condition", "_this", "entries", "key", "updatedEntries", "copy", "b", "func", "exports", "binding_1", "ERROR_MSGS", "literal_types_1", "METADATA_KEY", "metadata_reader_1", "planner_1", "resolver_1", "binding_to_syntax_1", "id_1", "serialization_1", "container_snapshot_1", "lookup_1", "Container", "containerOptions", "options", "container1", "container2", "container3", "_i", "container", "targetContainers", "__spreadArray", "targetContainer", "bindingDictionary", "copyDictionary", "origin", "destination", "key", "value", "binding", "targetBindingDictionary", "modules", "getHelpers", "_a", "modules_1", "currentModule", "containerModuleHelpers", "modules_2", "_b", "_this", "conditionFactory", "expected", "item", "module", "condition", "serviceIdentifier", "scope", "bound", "named", "bindings", "request_1", "b", "snapshot", "child", "middlewares", "initial", "prev", "curr", "metadataReader", "constructorFunction", "tempContainer", "m", "setModuleId", "bindingToSyntax", "moduleId", "getBindFunction", "_bind", "getUnbindFunction", "_unbind", "getIsboundFunction", "_isBound", "getRebindFunction", "_rebind", "mId", "avoidConstraints", "isMultiInject", "targetType", "result", "defaultArgs", "context", "args", "exports", "id_1", "ContainerModule", "registry", "exports", "AsyncContainerModule", "ERRORS_MSGS", "METADATA_KEY", "injectable", "target", "types", "exports", "metadata_1", "decorator_utils_1", "tagged", "metadataKey", "metadataValue", "target", "targetKey", "index", "metadata", "exports", "METADATA_KEY", "metadata_1", "decorator_utils_1", "named", "name", "target", "targetKey", "index", "metadata", "exports", "METADATA_KEY", "metadata_1", "decorator_utils_1", "optional", "target", "targetKey", "index", "metadata", "exports", "METADATA_KEY", "metadata_1", "decorator_utils_1", "unmanaged", "target", "targetKey", "index", "metadata", "exports", "METADATA_KEY", "metadata_1", "decorator_utils_1", "multiInject", "serviceIdentifier", "target", "targetKey", "index", "metadata", "exports", "METADATA_KEY", "metadata_1", "decorator_utils_1", "targetName", "name", "target", "targetKey", "index", "metadata", "exports", "ERRORS_MSGS", "METADATA_KEY", "metadata_1", "postConstruct", "target", "propertyKey", "descriptor", "metadata", "exports", "multiBindToService", "container", "service", "types", "_i", "t", "exports", "keys", "exports", "container_1", "literal_types_1", "container_module_1", "injectable_1", "tagged_1", "named_1", "inject_1", "optional_1", "unmanaged_1", "multi_inject_1", "target_name_1", "post_construct_1", "metadata_reader_1", "id_1", "decorator_utils_1", "constraint_helpers_1", "serialization_1", "binding_utils_1", "shared_esm_bundler_exports", "__export", "EMPTY_ARR", "EMPTY_OBJ", "NO", "NOOP", "PatchFlagNames", "babelParserDefaultPlugins", "camelize", "capitalize", "def", "escapeHtml", "escapeHtmlComment", "extend", "generateCodeFrame", "getGlobalThis", "hasChanged", "hasOwn", "hyphenate", "invokeArrayFns", "isArray", "isBooleanAttr", "isDate", "isFunction", "isGloballyWhitelisted", "isHTMLTag", "isIntegerKey", "isKnownHtmlAttr", "isKnownSvgAttr", "isMap", "isModelListener", "isNoUnitNumericStyleProp", "isObject", "isOn", "isPlainObject", "isPromise", "isReservedProp", "isSSRSafeAttrName", "isSVGTag", "isSet", "isSpecialBooleanAttr", "isString", "isSymbol", "isVoidTag", "looseEqual", "looseIndexOf", "makeMap", "normalizeClass", "normalizeProps", "normalizeStyle", "objectToString", "parseStringStyle", "propsToAttrMap", "remove", "slotFlagsText", "stringifyStyle", "toDisplayString", "toHandlerKey", "toNumber", "toRawType", "toTypeString", "str", "expectsLowerCase", "map", "list", "val", "source", "start", "end", "lines", "newlineSequences", "_", "idx", "count", "res", "i", "j", "range", "line", "lineLength", "newLineSeqLength", "pad", "length", "name", "attrValidationCache", "isUnsafe", "unsafeAttrCharRE", "value", "item", "normalized", "key", "cssText", "ret", "listDelimiterRE", "tmp", "propertyDelimiterRE", "styles", "normalizedKey", "props", "klass", "style", "string", "match", "escapeRE", "html", "escaped", "index", "lastIndex", "src", "commentStripRE", "looseCompareArrays", "a", "b", "equal", "aValidType", "bValidType", "aKeysCount", "bKeysCount", "aHasKey", "bHasKey", "arr", "GLOBALS_WHITE_LISTED", "specialBooleanAttrs", "HTML_TAGS", "SVG_TAGS", "VOID_TAGS", "replacer", "onRE", "hasOwnProperty", "cacheStringFunction", "camelizeRE", "hyphenateRE", "_globalThis", "init_shared_esm_bundler", "__esmMin", "_key", "entries", "el", "fn", "cache", "c", "oldValue", "fns", "arg", "obj", "n", "require_base64", "__commonJSMin", "exports", "intToCharMap", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require_base64_vlq", "__commonJSMin", "exports", "base64", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "result", "shift", "continuation", "require_util", "__commonJSMin", "exports", "getArg", "aArgs", "aName", "aDefaultValue", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "match", "urlGenerate", "aParsedUrl", "url", "normalize", "aPath", "path", "isAbsolute", "parts", "part", "up", "i", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "str", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "require_array_set", "__commonJSMin", "exports", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "aStr", "sStr", "isDuplicate", "idx", "aIdx", "require_mapping_list", "__commonJSMin", "exports", "util", "generatedPositionAfter", "mappingA", "mappingB", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "require_source_map_generator", "__commonJSMin", "exports", "base64VLQ", "util", "ArraySet", "MappingList", "SourceMapGenerator", "aArgs", "aSourceMapConsumer", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "result", "next", "nameIdx", "sourceIdx", "mappings", "i", "len", "aSources", "aSourceRoot", "key", "map", "require_binary_search", "__commonJSMin", "exports", "recursiveSearch", "aLow", "aHigh", "aNeedle", "aHaystack", "aCompare", "aBias", "mid", "cmp", "index", "require_quick_sort", "__commonJSMin", "exports", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "comparator", "p", "r", "pivotIndex", "i", "pivot", "j", "q", "require_source_map_consumer", "__commonJSMin", "exports", "util", "binarySearch", "ArraySet", "base64VLQ", "quickSort", "SourceMapConsumer", "aSourceMap", "aSourceMapURL", "sourceMap", "IndexedSourceMapConsumer", "BasicSourceMapConsumer", "aStr", "index", "c", "aSourceRoot", "aCallback", "aContext", "aOrder", "context", "order", "mappings", "sourceRoot", "mapping", "source", "aArgs", "line", "needle", "originalLine", "originalColumn", "version", "sources", "names", "sourcesContent", "file", "s", "aSource", "relativeSource", "i", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "length", "srcMapping", "destMapping", "Mapping", "generatedLine", "previousGeneratedColumn", "previousOriginalLine", "previousOriginalColumn", "previousSource", "previousName", "cachedSegments", "temp", "originalMappings", "str", "segment", "end", "value", "aNeedle", "aMappings", "aLineName", "aColumnName", "aComparator", "aBias", "nextMapping", "name", "sc", "nullOnMissing", "url", "fileUriAbsPath", "sections", "lastOffset", "offset", "offsetLine", "offsetColumn", "j", "sectionIndex", "section", "cmp", "content", "generatedPosition", "ret", "sectionMappings", "adjustedMapping", "require_source_node", "__commonJSMin", "exports", "SourceMapGenerator", "util", "REGEX_NEWLINE", "NEWLINE_CODE", "isSourceNode", "SourceNode", "aLine", "aColumn", "aSource", "aChunks", "aName", "aGeneratedCode", "aSourceMapConsumer", "aRelativePath", "node", "remainingLines", "remainingLinesIndex", "shiftNextLine", "lineContents", "getNextLine", "newLine", "lastGeneratedLine", "lastGeneratedColumn", "lastMapping", "mapping", "addMappingWithCode", "nextLine", "code", "sourceFile", "content", "source", "aChunk", "chunk", "i", "aFn", "len", "aSep", "newChildren", "aPattern", "aReplacement", "lastChild", "aSourceFile", "aSourceContent", "sources", "str", "aArgs", "generated", "map", "sourceMappingActive", "lastOriginalSource", "lastOriginalLine", "lastOriginalColumn", "lastOriginalName", "original", "idx", "length", "sourceContent", "require_source_map", "__commonJSMin", "exports", "beforeExpr", "startsExpr", "isLoop", "isAssign", "prefix", "postfix", "TokenType", "constructor", "label", "conf", "keyword", "rightAssociative", "binop", "updateContext", "keywords", "Map", "createKeyword", "name", "options", "token", "set", "createBinop", "types", "num", "bigint", "decimal", "regexp", "string", "privateName", "eof", "bracketL", "bracketHashL", "bracketBarL", "bracketR", "bracketBarR", "braceL", "braceBarL", "braceHashL", "braceR", "braceBarR", "parenL", "parenR", "comma", "semi", "colon", "doubleColon", "dot", "question", "questionDot", "arrow", "template", "ellipsis", "backQuote", "dollarBraceL", "at", "hash", "interpreterDirective", "eq", "assign", "slashAssign", "moduloAssign", "incDec", "bang", "tilde", "pipeline", "nullishCoalescing", "logicalOR", "logicalAND", "bitwiseOR", "bitwiseXOR", "bitwiseAND", "equality", "relational", "bitShift", "plusMin", "modulo", "star", "slash", "exponent", "_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", "lineBreak", "lineBreakG", "RegExp", "source", "isNewLine", "code", "skipWhiteSpace", "isWhitespace", "Position", "line", "col", "column", "SourceLocation", "start", "end", "filename", "identifierName", "getLineInfo", "input", "offset", "lineStart", "match", "lastIndex", "exec", "index", "BaseParser", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "hasPlugin", "plugins", "has", "getPluginOption", "plugin", "get", "setTrailingComments", "node", "comments", "trailingComments", "undefined", "unshift", "setInnerComments", "innerComments", "adjustInnerComments", "elements", "commentWS", "lastElement", "i", "length", "CommentsParser", "addComment", "comment", "loc", "state", "push", "processComment", "commentStack", "commentStackLength", "lastCommentWS", "leadingNode", "nodeStart", "commentEnd", "containingNode", "finalizeComment", "splice", "trailingNode", "leadingComments", "commentStart", "charCodeAt", "type", "properties", "arguments", "params", "specifiers", "finalizeRemainingComments", "resetPreviousNodeTrailingComments", "ErrorCodes", "Object", "freeze", "SyntaxError", "SourceTypeModuleError", "ErrorMessages", "makeErrorTemplates", "AccessorIsGenerator", "ArgumentsInClass", "AsyncFunctionInSingleStatementContext", "AwaitBindingIdentifier", "AwaitBindingIdentifierInStaticBlock", "AwaitExpressionFormalParameter", "AwaitNotInAsyncContext", "AwaitNotInAsyncFunction", "BadGetterArity", "BadSetterArity", "BadSetterRestParameter", "ConstructorClassField", "ConstructorClassPrivateField", "ConstructorIsAccessor", "ConstructorIsAsync", "ConstructorIsGenerator", "DeclarationMissingInitializer", "DecoratorBeforeExport", "DecoratorConstructor", "DecoratorExportClass", "DecoratorSemicolon", "DecoratorStaticBlock", "DeletePrivateField", "DestructureNamedImport", "DuplicateConstructor", "DuplicateDefaultExport", "DuplicateExport", "DuplicateProto", "DuplicateRegExpFlags", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "ForOfAsync", "ForOfLet", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportBindingIsString", "ImportCallArgumentTrailingComma", "ImportCallArity", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidDecimal", "InvalidDigit", "InvalidEscapeSequence", "InvalidEscapeSequenceTemplate", "InvalidEscapedReservedWord", "InvalidIdentifier", "InvalidLhs", "InvalidLhsBinding", "InvalidNumber", "InvalidOrMissingExponent", "InvalidOrUnexpectedToken", "InvalidParenthesizedAssignment", "InvalidPrivateFieldResolution", "InvalidPropertyBindingPattern", "InvalidRecordProperty", "InvalidRestAssignmentPattern", "LabelRedeclaration", "LetInLexicalBinding", "LineTerminatorBeforeArrow", "MalformedRegExpFlags", "MissingClassName", "MissingEqInAssignment", "MissingSemicolon", "MissingUnicodeEscape", "MixingCoalesceWithLogical", "ModuleAttributeDifferentFromType", "ModuleAttributeInvalidValue", "ModuleAttributesWithDuplicateKeys", "ModuleExportNameHasLoneSurrogate", "ModuleExportUndefined", "MultipleDefaultsInSwitch", "NewlineAfterThrow", "NoCatchOrFinally", "NumberIdentifier", "NumericSeparatorInEscapeSequence", "ObsoleteAwaitStar", "OptionalChainingNoNew", "OptionalChainingNoTemplate", "OverrideOnConstructor", "ParamDupe", "PatternHasAccessor", "PatternHasMethod", "PipeBodyIsTighter", "PipeTopicRequiresHackPipes", "PipeTopicUnbound", "PipeTopicUnconfiguredToken", "PipeTopicUnused", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "PrivateInExpectedIn", "PrivateNameRedeclaration", "RecordExpressionBarIncorrectEndSyntaxType", "RecordExpressionBarIncorrectStartSyntaxType", "RecordExpressionHashIncorrectStartSyntaxType", "RecordNoProto", "RestTrailingComma", "SloppyFunction", "StaticPrototype", "StrictDelete", "StrictEvalArguments", "StrictEvalArgumentsBinding", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "SuperNotAllowed", "SuperPrivateField", "TrailingDecorator", "TupleExpressionBarIncorrectEndSyntaxType", "TupleExpressionBarIncorrectStartSyntaxType", "TupleExpressionHashIncorrectStartSyntaxType", "UnexpectedArgumentPlaceholder", "UnexpectedAwaitAfterPipelineBody", "UnexpectedDigitAfterHash", "UnexpectedImportExport", "UnexpectedKeyword", "UnexpectedLeadingDecorator", "UnexpectedLexicalDeclaration", "UnexpectedNewTarget", "UnexpectedNumericSeparator", "UnexpectedPrivateField", "UnexpectedReservedWord", "UnexpectedSuper", "UnexpectedToken", "UnexpectedTokenUnaryExponentiation", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "VarRedeclaration", "YieldBindingIdentifier", "YieldInParameter", "ZeroDigitNumericSeparator", "SourceTypeModuleErrorMessages", "ImportMetaOutsideModule", "ImportOutsideModule", "messages", "templates", "keys", "forEach", "reasonCode", "ParserError", "getLocationForPosition", "pos", "startLoc", "lastTokStart", "lastTokStartLoc", "endLoc", "lastTokEnd", "lastTokEndLoc", "raise", "raiseWithData", "raiseOverwrite", "message", "replace", "_", "errorRecovery", "errors", "error", "_raise", "data", "errorTemplate", "errorContext", "err", "isLookahead", "estree", "superClass", "parseRegExpLiteral", "pattern", "flags", "regex", "estreeParseLiteral", "parseBigIntLiteral", "value", "bigInt", "BigInt", "String", "parseDecimalLiteral", "parseLiteral", "parseStringLiteral", "parseNumericLiteral", "parseNullLiteral", "parseBooleanLiteral", "directiveToStmt", "directive", "directiveLiteral", "stmt", "startNodeAt", "expression", "extra", "expressionValue", "raw", "finishNodeAt", "slice", "initFunction", "isAsync", "checkDeclaration", "isObjectProperty", "getObjectOrClassMethodParams", "method", "isValidDirective", "_stmt$expression$extr", "parenthesized", "stmtToDirective", "addExtra", "parseBlockBody", "args", "directiveStatements", "directives", "map", "d", "body", "concat", "pushClassMethod", "classBody", "isGenerator", "isConstructor", "allowsDirectSuper", "parseMethod", "typeParameters", "parseMaybePrivateName", "convertPrivateNameToPrivateIdentifier", "getPrivateNameSV", "id", "isPrivateName", "parseFunctionBody", "allowExpression", "isMethod", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "kind", "computed", "finishNode", "parseClassProperty", "propertyNode", "parseClassPrivateProperty", "parseObjectMethod", "prop", "isPattern", "isAccessor", "shorthand", "parseObjectProperty", "startPos", "refExpressionErrors", "isAssignable", "isBinding", "toAssignable", "isLHS", "toAssignableObjectExpressionProp", "key", "Errors", "finishCallExpression", "optional", "callee", "_node$arguments$", "attributes", "toReferencedArguments", "parseExport", "exported", "parseSubscript", "base", "noCalls", "optionalChainMember", "substring", "stop", "chain", "startNodeAtNode", "hasPropertyAsPrivateName", "isOptionalChain", "isObjectMethod", "TokContext", "preserveSpace", "brace", "tt", "context", "pop", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "isIdentifierStart", "test", "fromCharCode", "isIdentifierChar", "reservedWords", "strict", "strictBind", "Set", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "inModule", "isStrictReservedWord", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "isIteratorStart", "current", "next", "reservedWordLikeSet", "canBeReservedWord", "SCOPE_OTHER", "SCOPE_PROGRAM", "SCOPE_FUNCTION", "SCOPE_ARROW", "SCOPE_SIMPLE_CATCH", "SCOPE_SUPER", "SCOPE_DIRECT_SUPER", "SCOPE_CLASS", "SCOPE_STATIC_BLOCK", "SCOPE_TS_MODULE", "SCOPE_VAR", "BIND_KIND_VALUE", "BIND_KIND_TYPE", "BIND_SCOPE_VAR", "BIND_SCOPE_LEXICAL", "BIND_SCOPE_FUNCTION", "BIND_FLAGS_NONE", "BIND_FLAGS_CLASS", "BIND_FLAGS_TS_ENUM", "BIND_FLAGS_TS_CONST_ENUM", "BIND_FLAGS_TS_EXPORT_ONLY", "BIND_FLAGS_FLOW_DECLARE_FN", "BIND_CLASS", "BIND_LEXICAL", "BIND_VAR", "BIND_FUNCTION", "BIND_TS_INTERFACE", "BIND_TS_TYPE", "BIND_TS_ENUM", "BIND_TS_AMBIENT", "BIND_NONE", "BIND_OUTSIDE", "BIND_TS_CONST_ENUM", "BIND_TS_NAMESPACE", "BIND_FLOW_DECLARE_FN", "CLASS_ELEMENT_FLAG_STATIC", "CLASS_ELEMENT_KIND_GETTER", "CLASS_ELEMENT_KIND_SETTER", "CLASS_ELEMENT_KIND_ACCESSOR", "CLASS_ELEMENT_STATIC_GETTER", "CLASS_ELEMENT_STATIC_SETTER", "CLASS_ELEMENT_INSTANCE_GETTER", "CLASS_ELEMENT_INSTANCE_SETTER", "CLASS_ELEMENT_OTHER", "Scope", "var", "lexical", "functions", "ScopeHandler", "scopeStack", "undefinedExports", "undefinedPrivateNames", "inFunction", "currentVarScopeFlags", "allowSuper", "currentThisScopeFlags", "inClass", "inClassAndNotInNonArrowFunction", "inStaticBlock", "inNonArrowFunction", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "currentScope", "createScope", "enter", "exit", "scope", "declareName", "bindingType", "checkRedeclarationInScope", "add", "maybeExportDefined", "delete", "isRedeclaredInScope", "values", "checkLocalExport", "topLevelScope", "FlowScope", "declareFunctions", "FlowScopeHandler", "State", "curLine", "potentialArrowAt", "noArrowAt", "noArrowParamsConversionAt", "maybeInArrowParameters", "inType", "noAnonFunctionType", "inPropertyName", "hasFlowComment", "isAmbientContext", "inAbstractClass", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "soloAwait", "inFSharpPipelineDirectBody", "labels", "decoratorStack", "ct", "exprAllowed", "containsEsc", "strictErrors", "tokensLength", "init", "strictMode", "sourceType", "startLine", "curPosition", "clone", "skipArrays", "val", "Array", "isArray", "VALID_REGEX_FLAGS", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "allowedNumericSeparatorSiblings", "bin", "oct", "dec", "Token", "Tokenizer", "ParserErrors", "tokens", "pushToken", "checkKeywordEscapes", "nextToken", "eat", "createLookaheadState", "curContext", "lookahead", "old", "curr", "nextTokenStart", "nextTokenStartSince", "skip", "lookaheadCharCode", "codePointAtPos", "cp", "trail", "setStrict", "clear", "skipSpace", "finishToken", "readTmplToken", "getTokenFromCode", "skipBlockComment", "indexOf", "skipLineComment", "startSkip", "ch", "spaceStart", "loop", "attachComment", "CommentWhitespace", "prevType", "readToken_numberSign", "readToken_interpreter", "nextPos", "expectPlugin", "readWord1", "finishOp", "readToken_dot", "readNumber", "readToken_slash", "readToken_mult_modulo", "width", "readToken_pipe_amp", "readToken_caret", "readToken_plus_min", "readToken_lt_gt", "size", "readToken_eq_excl", "readToken_question", "next2", "readRadixNumber", "readString", "readWord", "fromCodePoint", "str", "readRegexp", "escaped", "content", "mods", "char", "includes", "readInt", "radix", "len", "forceLen", "allowNumSeparator", "forbiddenSiblings", "allowedSiblings", "invalid", "total", "e", "Infinity", "prev", "Number", "isNaN", "_isDigit", "isBigInt", "startsWithDot", "isFloat", "isDecimal", "hasExponent", "isOctal", "hasLeadingZero", "integer", "recordStrictModeErrors", "underscorePos", "parseInt", "parseFloat", "readCodePoint", "throwOnInvalid", "codePos", "readHexChar", "quote", "out", "chunkStart", "readEscapedChar", "containsInvalid", "inTemplate", "octalStr", "substr", "octal", "n", "firstCode", "escStart", "identifierCheck", "esc", "keywordTypes", "kw", "_this$state$type$upda", "_this$state$type", "ClassScope", "privateNames", "loneAccessors", "ClassScopeHandler", "stack", "oldClassScope", "from", "declarePrivateName", "elementType", "classScope", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "usePrivateName", "kExpression", "kMaybeArrowParameterDeclaration", "kMaybeAsyncArrowParameterDeclaration", "kParameterDeclaration", "ExpressionScope", "canBeArrowParameterDeclaration", "isCertainlyParameterDeclaration", "ArrowHeadParsingScope", "recordDeclarationError", "clearDeclarationError", "iterateErrors", "iterator", "ExpressionScopeHandler", "recordParameterInitializerError", "recordParenthesizedIdentifierError", "recordAsyncArrowParametersError", "validateAsPattern", "newParameterDeclarationScope", "newArrowHeadScope", "newAsyncArrowScope", "newExpressionScope", "PARAM", "PARAM_YIELD", "PARAM_AWAIT", "PARAM_RETURN", "PARAM_IN", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasYield", "hasReturn", "hasIn", "functionFlags", "UtilParser", "isRelational", "op", "expectRelational", "unexpected", "isContextual", "isUnparsedContextual", "nameStart", "nameEnd", "nextCh", "isLookaheadContextual", "eatContextual", "expectContextual", "canInsertSemicolon", "hasPrecedingLineBreak", "hasFollowingLineBreak", "isLineTerminator", "semicolon", "allowAsi", "expect", "assertNoSpace", "messageOrType", "missingPlugin", "expectOnePlugin", "names", "some", "join", "tryParse", "fn", "oldState", "abortSignal", "failState", "thrown", "aborted", "checkExpressionErrors", "andThrow", "shorthandAssign", "doubleProto", "optionalParameters", "isLiteralPropertyName", "property", "initializeScopes", "oldLabels", "oldExportedIdentifiers", "exportedIdentifiers", "oldInModule", "oldScope", "getScopeHandler", "bind", "oldProdParam", "prodParam", "oldExpressionScope", "expressionScope", "enterInitialScopes", "paramFlags", "ExpressionErrors", "Node", "parser", "ranges", "range", "NodePrototype", "prototype", "__clone", "newNode", "clonePlaceholder", "cloneIdentifier", "cloned", "create", "expectedNode", "cloneStringLiteral", "NodeUtils", "resetStartLocation", "resetEndLocation", "resetStartLocationFromNode", "locationNode", "reservedTypes", "FlowErrors", "AmbiguousConditionalArrow", "AmbiguousDeclareModuleKind", "AssignReservedType", "DeclareClassElement", "DeclareClassFieldInitializer", "DuplicateDeclareModuleExports", "EnumBooleanMemberNotInitialized", "EnumDuplicateMemberName", "EnumInconsistentMemberValues", "EnumInvalidExplicitType", "EnumInvalidExplicitTypeUnknownSupplied", "EnumInvalidMemberInitializerPrimaryType", "EnumInvalidMemberInitializerSymbolType", "EnumInvalidMemberInitializerUnknownType", "EnumInvalidMemberName", "EnumNumberMemberNotInitialized", "EnumStringMemberInconsistentlyInitailized", "GetterMayNotHaveThisParam", "ImportTypeShorthandOnlyInPureImport", "InexactInsideExact", "InexactInsideNonObject", "InexactVariance", "InvalidNonTypeImportInDeclareModule", "MissingTypeParamDefault", "NestedDeclareModule", "NestedFlowComment", "OptionalBindingPattern", "SetterMayNotHaveThisParam", "SpreadVariance", "ThisParamAnnotationRequired", "ThisParamBannedInConstructor", "ThisParamMayNotBeOptional", "ThisParamMustBeFirst", "ThisParamNoDefault", "TypeBeforeInitializer", "TypeCastInPattern", "UnexpectedExplicitInexactInObject", "UnexpectedReservedType", "UnexpectedReservedUnderscore", "UnexpectedSpaceBetweenModuloChecks", "UnexpectedSpreadType", "UnexpectedSubtractionOperand", "UnexpectedTokenAfterTypeParameter", "UnexpectedTypeParameterBeforeAsyncArrowFunction", "UnsupportedDeclareExportKind", "UnsupportedStatementInDeclareModule", "UnterminatedFlowComment", "isEsModuleType", "bodyElement", "declaration", "hasTypeImportKind", "importKind", "isMaybeDefaultImport", "exportSuggestions", "const", "let", "interface", "partition", "list", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "flowPragma", "shouldParseTypes", "shouldParseEnums", "matches", "Error", "flowParseTypeInitialiser", "tok", "oldInType", "flowParseType", "flowParsePredicate", "moduloPos", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "parseIdentifier", "typeNode", "typeContainer", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "rest", "this", "returnType", "typeAnnotation", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "flowParseDeclareModuleExports", "flowParseDeclareModule", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "flowParseTypeAnnotatableIdentifier", "parseExprAtom", "bodyNode", "parseImport", "hasModuleExport", "default", "isLet", "suggestion", "exportKind", "flowParseTypeAnnotation", "flowParseTypeAlias", "flowParseOpaqueType", "isClass", "flowParseRestrictedIdentifier", "extends", "implements", "mixins", "flowParseInterfaceExtends", "flowParseObjectType", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "flowParseQualifiedTypeIdentifier", "flowParseTypeParameterInstantiation", "flowParseInterface", "checkNotUnderscore", "checkReservedType", "liberal", "right", "declare", "supertype", "impltype", "flowParseTypeParameter", "requireDefault", "variance", "flowParseVariance", "ident", "bound", "jsxTagStart", "defaultRequired", "typeParameter", "oldNoAnonFunctionType", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "valueNode", "callProperties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStart", "inexactStart", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "argument", "proto", "flowCheckGetterSetterParams", "paramCount", "node2", "qualification", "flowParseGenericType", "flowParseTypeofType", "flowParsePrimaryType", "flowParseTupleType", "first", "lh", "isThis", "reinterpretTypeAsFunctionTypeParam", "flowIdentToTypeAnnotation", "isGroupedType", "parseLiteralAtNode", "createIdentifier", "flowParsePostfixType", "seenOptionalIndexedAccess", "objectType", "indexType", "flowParsePrefixType", "flowParseAnonFunctionWithoutParens", "param", "flowParseIntersectionType", "flowParseUnionType", "allowPrimitiveOverride", "typeCastToParameter", "allowExpressionBody", "forwardNoArrowParamsConversionAt", "parseFunctionBodyAndFinish", "parseStatement", "topLevel", "flowParseEnumDeclaration", "parseExpressionStatement", "expr", "shouldParseExportDeclaration", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "result", "setOptionalParametersError", "originalNoArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "parseMaybeAssignAllowIn", "disallowInvalid", "arrows", "finishArrowValidation", "every", "_node$extra", "toAssignableList", "trailingComma", "checkParams", "parse", "parseParenItem", "typeCastNode", "assertModuleNodeAllowed", "decl", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "member", "parseClassMemberFromModifier", "isIterator", "readIterator", "fullWord", "exprList", "trailingCommaPos", "toReferencedList", "isParenthesizedExpr", "_expr$extra", "parseArrayLike", "close", "canBePattern", "isTuple", "checkLVal", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "isThisParam", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "checkGetterSetterParams", "parsePropertyName", "isPrivateNameAllowed", "parseObjPropValue", "parseAssignableListItemTypes", "parseMaybeDefault", "left", "shouldParseDefaultImport", "parseImportSpecifierLocal", "specifier", "contextDescription", "local", "maybeParseDefaultImportSpecifier", "parseImportSpecifier", "firstIdentIsString", "firstIdent", "parseModuleExportName", "specifierTypeKind", "as_ident", "imported", "nodeIsTypeImport", "specifierIsTypeImport", "checkReservedWord", "parseBindingAtom", "parseFunctionParams", "allowModifiers", "parseVarId", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "tc", "j_oTag", "j_expr", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "maybeUnwrapTypeCastExpression", "async", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "parseParenAndDistinguishExpression", "canBeArrow", "parseSubscripts", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "subscriptState", "isLookaheadToken_lt", "typeArguments", "parseNewArguments", "targs", "parseArrowExpression", "parseTopLevel", "file", "program", "fileNode", "skipFlowComment", "hasFlowCommentCompletion", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "flowEnumErrorBooleanMemberNotInitialized", "enumName", "memberName", "flowEnumErrorInvalidMemberName", "toUpperCase", "flowEnumErrorDuplicateMemberName", "flowEnumErrorInconsistentMemberValues", "flowEnumErrorInvalidExplicitType", "suppliedType", "flowEnumErrorInvalidMemberInitializer", "explicitType", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitailized", "flowEnumMemberInit", "endOfInit", "literal", "flowEnumMemberRaw", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "hasUnknownMembers", "memberNode", "flowEnumStringMembers", "initializedMembers", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "afterNext", "entities", "quot", "amp", "apos", "lt", "gt", "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar", "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg", "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro", "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14", "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave", "eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc", "uuml", "yacute", "thorn", "yuml", "OElig", "oelig", "Scaron", "scaron", "Yuml", "fnof", "circ", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "thetasym", "upsih", "piv", "ensp", "emsp", "thinsp", "zwnj", "zwj", "lrm", "rlm", "ndash", "mdash", "lsquo", "rsquo", "sbquo", "ldquo", "rdquo", "bdquo", "dagger", "Dagger", "bull", "hellip", "permil", "prime", "Prime", "lsaquo", "rsaquo", "oline", "frasl", "euro", "image", "weierp", "real", "trade", "alefsym", "larr", "uarr", "rarr", "darr", "harr", "crarr", "lArr", "uArr", "rArr", "dArr", "hArr", "forall", "part", "exist", "nabla", "isin", "notin", "ni", "prod", "sum", "minus", "lowast", "radic", "infin", "ang", "and", "or", "cap", "cup", "int", "there4", "sim", "cong", "asymp", "ne", "equiv", "le", "ge", "sub", "sup", "nsub", "sube", "supe", "oplus", "otimes", "perp", "sdot", "lceil", "rceil", "lfloor", "rfloor", "lang", "rang", "loz", "spades", "clubs", "hearts", "diams", "HEX_NUMBER", "DECIMAL_NUMBER", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagElement", "MissingClosingTagFragment", "UnexpectedSequenceExpression", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "j_cTag", "jsxName", "jsxText", "jsxTagEnd", "isFragment", "object", "getQualifiedJSXName", "namespace", "jsxReadToken", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "jsxReadString", "count", "entity", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "jsxParseAttributeValue", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "jsxParseAttribute", "jsxParseOpeningElementAt", "jsxParseOpeningElementAfterName", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "lookaheadState", "TypeScriptScope", "enums", "constEnums", "classes", "exportOnlyBindings", "TypeScriptScopeHandler", "isConst", "wasConst", "nonNull", "x", "assert", "TSErrors", "AbstractMethodHasImplementation", "AbstractPropertyHasInitializer", "AccesorCannotDeclareThisParameter", "AccesorCannotHaveTypeParameters", "ClassMethodHasDeclare", "ClassMethodHasReadonly", "ConstructorHasTypeParameters", "DeclareAccessor", "DeclareClassFieldHasInitializer", "DeclareFunctionHasImplementation", "DuplicateAccessibilityModifier", "DuplicateModifier", "EmptyHeritageClauseType", "EmptyTypeArguments", "EmptyTypeParameters", "ExpectedAmbientAfterExportDeclare", "ImportAliasHasImportType", "IncompatibleModifiers", "IndexSignatureHasAbstract", "IndexSignatureHasAccessibility", "IndexSignatureHasDeclare", "IndexSignatureHasOverride", "IndexSignatureHasStatic", "InvalidModifierOnTypeMember", "InvalidModifiersOrder", "InvalidTupleMemberLabel", "MissingInterfaceName", "MixedLabeledAndUnlabeledElements", "NonAbstractClassHasAbstractMethod", "NonClassMethodPropertyHasAbstractModifer", "OptionalTypeBeforeRequired", "OverrideNotInSubClass", "PatternIsOptional", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "ReadonlyForMethodSignature", "SetAccesorCannotHaveOptionalParameter", "SetAccesorCannotHaveRestParameter", "SetAccesorCannotHaveReturnType", "StaticBlockCannotHaveModifier", "TypeAnnotationAfterAssign", "TypeImportCannotSpecifyDefaultAndNamed", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "keywordTypeFromName", "tsIsAccessModifier", "modifier", "typescript", "tsIsIdentifier", "tsTokenCanFollowModifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "allowedModifiers", "tsTryParse", "tsParseModifiers", "modified", "disallowedModifiers", "enforceOrder", "before", "after", "incompatible", "mod1", "mod2", "accessibility", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "tsParseDelimitedListWorker", "expectSuccess", "element", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "qualifier", "tsParseEntityName", "tsParseTypeArguments", "allowReservedWords", "tsParseTypeReference", "typeName", "tsParseThisTypePredicate", "lhs", "parameterName", "tsParseTypeAnnotation", "asserts", "tsParseThisTypeNode", "tsParseTypeQuery", "exprName", "tsParseTypeParameter", "tsParseTypeParameterName", "constraint", "tsEatThenParseType", "tsTryParseTypeParameters", "tsParseTypeParameters", "tsTryNextParseConstantContext", "tsFillSignature", "returnToken", "signature", "returnTokenRequired", "parameters", "tsParseBindingListForSignature", "tsParseTypeOrTypePredicateAnnotation", "parseBindingList", "tsParseTypeMemberSemicolon", "tsParseSignatureMember", "tsIsUnambiguouslyIndexSignature", "tsTryParseIndexSignature", "tsLookAhead", "tsTryParseTypeAnnotation", "tsParsePropertyOrMethodSignature", "readonly", "nodeAny", "firstParameter", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedTypeParameter", "tsExpectThenParseType", "tsParseMappedType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "labeledElements", "elementNode", "_labeledElements", "isLabeled", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "abstract", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "tsParseNonArrayType", "parseMaybeUnary", "tsParseArrayTypeOrHigher", "tsParseTypeOperator", "operator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "find", "tsParseUnionOrIntersectionType", "parseConstituentType", "hasLeadingOperator", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "braceStackCounter", "tsInType", "t", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "isAbstractConstructorSignature", "tsParseTypeAssertion", "tsNextThenParseType", "tsParseHeritageClause", "descriptor", "originalStart", "delimitedList", "tsParseExpressionWithTypeArguments", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInNoContext", "cb", "oldContext", "tsDoThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "isExport", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "res", "tsTryParseAndCatch", "tsTryParseDeclare", "nany", "starttype", "tsInAmbientContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsParseExpressionStatement", "mod", "tsCheckLineTerminator", "tsParseAbstractDeclaration", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "tsIsDeclarationStart", "parseAssignableListItem", "decorators", "override", "elt", "pp", "parameter", "bodilessType", "registerFunctionStatementId", "tsCheckForInvalidTypeCasts", "items", "isInParens", "nonNullExpression", "isOptionalCall", "missingParenErrorPos", "atPossibleAsyncArrow", "asyncArrowFn", "parseTaggedTemplateExpression", "parseExprOp", "leftStartPos", "leftStartLoc", "minPrec", "reScan_lt_gt", "checkKeywords", "checkDuplicateExports", "ahead", "importNode", "isAbstractClass", "cls", "interfaceNode", "parseStatementContent", "parseAccessModifier", "tsHasSomeModifiers", "modifiers", "invalidModifersForStaticBlocks", "callParseClassMemberWithIsStatic", "parseClassStaticBlock", "parseClassMemberWithIsStatic", "hadSuperClass", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "parseClassPropertyAnnotation", "definite", "_typeCast", "_typeCast2", "_jsx4", "_typeCast3", "typeCast", "_typeParameters", "toAssignableParenthesizedExpression", "_expr$extra2", "parseMaybeDecoratorArguments", "checkCommaAfterRest", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "parseCatchClauseParam", "oldIsAmbientContext", "oldInAbstractClass", "shouldParseAsAmbientContext", "getExpression", "placeholder", "PlaceHolderErrors", "ClassNameIsRequired", "placeholders", "parsePlaceholder", "finishPlaceholder", "isFinished", "verifyBreakContinue", "parseBlock", "parseFunctionId", "takeDecorators", "oldStrict", "parseClassBody", "startsWith", "maybeParseExportDefaultSpecifier", "checkExport", "filter", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "parseV8Intrinsic", "v8IntrinsicStart", "parseIdentifierName", "identifier", "option", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "RECORD_AND_TUPLE_SYNTAX_TYPES", "validatePlugins", "decoratorsBeforeExport", "proposal", "proposalList", "p", "tupleSyntaxIsHash", "topicToken", "tokenList", "missingPlugins", "mixinPlugins", "mixinPluginNames", "defaultOptions", "sourceFilename", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "createParenthesizedExpressions", "getOptions", "opts", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "last", "_node$extra2", "isLast", "raiseRestNotLast", "checkToRestConversion", "arg", "raiseTrailingCommaAfterRest", "toReferencedListDeep", "parseSpread", "refNeedsArrowPos", "parseRestBinding", "parseObjectLike", "closeCharCode", "allowEmpty", "elts", "parseDecorator", "_startLoc", "_startPos", "_left", "checkClashes", "disallowLetBinding", "strictModeChanged", "elem", "ExpressionParser", "checkProto", "isRecord", "protoRef", "used", "shouldExitDescending", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "expressions", "parseMaybeAssignDisallowIn", "resultError", "_resultError$pos", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "parseExprOps", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "nextOp", "withTopicBindingContext", "bodyExpr", "parseHackPipeBody", "checkHackPipeBodyEarlyErrors", "childExpr", "parseSmartPipelineBodyInStyle", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "parseExprOpBaseRightExpr", "checkExponentialAfterUnary", "sawUnary", "isAwait", "isAwaitAllowed", "parseAwait", "update", "isDelete", "parseUpdate", "isAmbiguousAwait", "parseExprSubscripts", "maybeAsyncArrow", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseMember", "parsePrivateName", "parseNoCallExpr", "tag", "quasi", "dynamicImport", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaProperty", "parseModuleExpression", "parseFunction", "parseAsyncArrowUnaryFunction", "parseDo", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "pipeProposal", "tokenType", "finishTopicReference", "lookaheadCh", "codePointAt", "testTopicReferenceConfiguration", "nodeType", "topicReferenceIsAllowedInCurrentContext", "registerTopicReference", "pluginTopicToken", "meta", "parseMetaProperty", "propertyName", "SourceTypeModuleErrors", "innerStartPos", "innerStartLoc", "spreadStart", "optionalCommaStart", "spreadNodeStartPos", "spreadNodeStartLoc", "innerEndPos", "innerEndLoc", "arrowNode", "parenExpression", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "cooked", "tail", "curElt", "quasis", "propHash", "parsePropertyDefinition", "maybeAsyncOrAccessorProp", "keyName", "_params", "oldInPropertyName", "generator", "isExpression", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "errorPos", "delegating", "delegate", "topicReferenceWasUsedInCurrentContext", "isSimpleReference", "checkSmartPipeTopicBodyEarlyErrors", "callback", "outerContextTopicState", "withSmartMixTopicForbiddingContext", "outerContextSoloAwaitState", "ret", "revertScopes", "parseProgram", "loopLabel", "switchLabel", "FUNC_NO_FLAGS", "FUNC_STATEMENT", "FUNC_HANGING_STATEMENT", "FUNC_NULLABLE_ID", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "hashEndPos", "hashEndLoc", "StatementParser", "interpreter", "parseInterpreterDirective", "isLetKeyword", "matched", "endCh", "parseBreakContinueStatement", "parseDebuggerStatement", "parseDoStatement", "parseForStatement", "parseIfStatement", "parseReturnStatement", "parseSwitchStatement", "parseThrowStatement", "parseTryStatement", "parseWhileStatement", "parseWithStatement", "parseEmptyStatement", "nextTokenCharCode", "isAsyncFunction", "maybeName", "parseLabeledStatement", "allowExport", "currentContextDecorators", "decorator", "isBreak", "lab", "parseHeaderExpression", "awaitAt", "parseFor", "startsWithLet", "parseVar", "declarations", "parseForIn", "startsWithUnescapedName", "isForOf", "description", "declarationPosition", "discriminant", "cases", "cur", "sawDefault", "isCase", "simple", "block", "handler", "clause", "finalizer", "statementStart", "allowDirectives", "createNewLexicalScope", "afterBlockParse", "parsedNonDirective", "isForIn", "await", "isFor", "isTypescript", "statement", "isHangingStatement", "requireId", "hadConstructor", "publicMethod", "privateMethod", "publicProp", "privateProp", "publicMember", "parseClassElementName", "isPrivate", "maybeQuestionTokenStart", "pushClassPrivateProperty", "pushClassProperty", "_member$decorators", "parseInitializer", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "maybeParseExportNamedSpecifiers", "hasDeclaration", "maybeParseExportDeclaration", "l", "hasFrom", "nextAfterFrom", "assertions", "maybeParseImportAssertions", "checkNames", "isDefault", "isFrom", "_declaration$extra", "exportedName", "nodes", "isString", "surrogate", "toString", "parseNext", "maybeParseModuleAttributes", "parseAssertEntries", "attrs", "attrNames", "importedIsString", "Parser", "pluginsMap", "pluginMap", "_options", "getParser", "ast", "moduleError", "getParserClass", "parserClassCache", "pluginsFromOptions", "pluginList", "require_estree_walker", "__commonJSMin", "exports", "module", "global", "factory", "WalkerBase", "node", "parent", "prop", "index", "SyncWalker", "enter", "leave", "_should_skip", "_should_remove", "_replacement", "skipped", "removed", "key", "value", "i", "AsyncWalker", "walk", "ast", "asyncWalk", "require_compiler_core_cjs", "__commonJSMin", "exports", "shared", "sourceMap", "parser", "estreeWalker", "defaultOnError", "error", "defaultOnWarn", "msg", "createCompilerError", "code", "loc", "messages", "additionalMessage", "errorMessages", "FRAGMENT", "TELEPORT", "SUSPENSE", "KEEP_ALIVE", "BASE_TRANSITION", "OPEN_BLOCK", "CREATE_BLOCK", "CREATE_ELEMENT_BLOCK", "CREATE_VNODE", "CREATE_ELEMENT_VNODE", "CREATE_COMMENT", "CREATE_TEXT", "CREATE_STATIC", "RESOLVE_COMPONENT", "RESOLVE_DYNAMIC_COMPONENT", "RESOLVE_DIRECTIVE", "RESOLVE_FILTER", "WITH_DIRECTIVES", "RENDER_LIST", "RENDER_SLOT", "CREATE_SLOTS", "TO_DISPLAY_STRING", "MERGE_PROPS", "NORMALIZE_CLASS", "NORMALIZE_STYLE", "NORMALIZE_PROPS", "GUARD_REACTIVE_PROPS", "TO_HANDLERS", "CAMELIZE", "CAPITALIZE", "TO_HANDLER_KEY", "SET_BLOCK_TRACKING", "PUSH_SCOPE_ID", "POP_SCOPE_ID", "WITH_SCOPE_ID", "WITH_CTX", "UNREF", "IS_REF", "WITH_MEMO", "IS_MEMO_SAME", "helperNameMap", "registerRuntimeHelpers", "helpers", "s", "locStub", "createRoot", "children", "createVNodeCall", "context", "tag", "props", "patchFlag", "dynamicProps", "directives", "isBlock", "disableTracking", "isComponent", "getVNodeBlockHelper", "getVNodeHelper", "createArrayExpression", "elements", "createObjectExpression", "properties", "createObjectProperty", "key", "value", "createSimpleExpression", "content", "isStatic", "constType", "createInterpolation", "createCompoundExpression", "createCallExpression", "callee", "args", "createFunctionExpression", "params", "returns", "newline", "isSlot", "createConditionalExpression", "test", "consequent", "alternate", "createCacheExpression", "index", "isVNode", "createBlockStatement", "body", "createTemplateLiteral", "createIfStatement", "createAssignmentExpression", "left", "right", "createSequenceExpression", "expressions", "createReturnStatement", "isStaticExp", "p", "isBuiltInType", "expected", "isCoreComponent", "nonIdentifierRE", "isSimpleIdentifier", "name", "validFirstIdentCharRE", "validIdentCharRE", "whitespaceRE", "isMemberExpression", "path", "state", "stateStack", "currentOpenBracketCount", "currentOpenParensCount", "currentStringType", "i", "char", "getInnerRange", "offset", "length", "newLoc", "advancePositionWithClone", "pos", "source", "numberOfCharacters", "advancePositionWithMutation", "linesCount", "lastNewLinePos", "assert", "condition", "findDir", "node", "allowEmpty", "findProp", "dynamicOnly", "isBindKey", "arg", "hasDynamicKeyVBind", "isText", "isVSlot", "isTemplateNode", "isSlotOutlet", "ssr", "propsHelperSet", "getUnnormalizedProps", "callPath", "injectProp", "prop", "propsWithInjection", "parentCall", "ret", "first", "alreadyExists", "propKeyName", "toValidAssetId", "type", "hasScopeRef", "ids", "c", "b", "getMemoedVNodeCall", "makeBlock", "helper", "removeHelper", "inSSR", "deprecationData", "getCompatValue", "config", "isCompatEnabled", "mode", "checkCompatEnabled", "enabled", "warnDeprecation", "message", "link", "err", "decodeRE", "decodeMap", "defaultParserOptions", "rawText", "_", "p1", "baseParse", "options", "createParserContext", "start", "getCursor", "parseChildren", "getSelection", "rawOptions", "ancestors", "parent", "last", "ns", "nodes", "isEnd", "startsWith", "parseInterpolation", "emitError", "parseComment", "parseBogusComment", "parseCDATA", "advanceBy", "parseTag", "parseElement", "isSpecialTemplateDirective", "parseText", "pushNode", "removedWhitespace", "shouldCondense", "prev", "next", "match", "prevIndex", "nestedIndex", "contentStart", "closeIndex", "wasInPre", "wasInVPre", "element", "isPreBoundary", "isVPreBoundary", "inlineTemplateProp", "startsWithEndTagOpen", "advanceSpaces", "cursor", "currentSource", "parseAttributes", "isSelfClosing", "hasIf", "hasFor", "tagType", "attributeNames", "attr", "parseAttribute", "nameSet", "pattern", "m", "parseAttributeValue", "isPropShorthand", "dirName", "startOffset", "getNewPosition", "valueLoc", "modifiers", "quote", "isQuoted", "endIndex", "parseTextData", "unexpectedChars", "open", "close", "innerStart", "innerEnd", "rawContentLength", "rawContent", "preTrimContent", "endOffset", "endTokens", "column", "line", "end", "xs", "searchString", "hoistStatic", "root", "walk", "isSingleElementRoot", "child", "doNotHoistNode", "canStringify", "originalCount", "hoistedCount", "constantType", "getConstantType", "codegenNode", "flag", "getPatchFlag", "getGeneratedPropsConstantType", "getNodeProps", "contentType", "constantCache", "cached", "returnType", "generatedPropsType", "childType", "expType", "allowHoistedHelperSet", "getConstantTypeOfHelperCall", "keyType", "valueType", "createTransformContext", "filename", "prefixIdentifiers", "cacheHandlers", "nodeTransforms", "directiveTransforms", "transformHoist", "isBuiltInComponent", "isCustomElement", "expressionPlugins", "scopeId", "slotted", "ssrCssVars", "bindingMetadata", "inline", "isTS", "onError", "onWarn", "compatConfig", "nameMatch", "count", "currentCount", "list", "removalIndex", "exp", "addId", "removeId", "identifier", "id", "identifiers", "transform", "traverseNode", "createRootCodegen", "patchFlagText", "traverseChildren", "nodeRemoved", "exitFns", "onExit", "createStructuralDirectiveTransform", "fn", "matches", "n", "PURE_ANNOTATION", "createCodegenContext", "ast", "sourceMap$1", "optimizeImports", "runtimeGlobalName", "runtimeModuleName", "addMapping", "withoutNewLine", "generate", "push", "indent", "deindent", "hasHelpers", "useWithBlock", "genScopeId", "isSetupInlined", "preambleContext", "genModulePreamble", "genFunctionPreamble", "functionName", "signature", "genAssets", "genNode", "VueBinding", "aliasHelper", "staticHelpers", "genHoists", "genImports", "assets", "resolver", "maybeSelfReference", "hoists", "importsOptions", "imports", "isText$1", "genNodeListAsArray", "multilines", "genNodeList", "comma", "genText", "genExpression", "genInterpolation", "genCompoundExpression", "genComment", "genVNodeCall", "genCallExpression", "genObjectExpression", "genArrayExpression", "genFunctionExpression", "genConditionalExpression", "genCacheExpression", "genTemplateLiteral", "genIfStatement", "genAssignmentExpression", "genSequenceExpression", "genReturnStatement", "pure", "genExpressionAsPropertyKey", "text", "callHelper", "genNullableArgs", "needNewline", "needsParens", "isNested", "l", "e", "isLiteralWhitelisted", "transformExpression", "processExpression", "dir", "asParams", "asRawStatements", "rewriteIdentifier", "raw", "isAssignmentLVal", "isUpdateArg", "isDestructureAssignment", "isInDestructureAssignment", "parentStack", "rVal", "operator", "rExp", "rawExp", "rExpString", "stringifyExpression", "isPrefix", "prefix", "postfix", "bailConstant", "isScopeVarReference", "isAllowedGlobal", "isLiteral", "knownIds", "isDuplicate", "needPrefix", "shouldPrefix", "isStaticProperty", "isStaticPropertyKey", "isFunction", "a", "leadingText", "transformIf", "processIf", "ifNode", "branch", "isRoot", "siblings", "sibling", "createCodegenNodeForBranch", "parentCondition", "getParentCondition", "processCodegen", "createIfBranch", "comments", "userKey", "isSameKey", "keyIndex", "createChildrenCodegenNode", "keyProperty", "firstChild", "vnodeCall", "branchExp", "transformFor", "processFor", "forNode", "renderExp", "memo", "keyProp", "keyExp", "isStableFragment", "fragmentFlag", "childBlock", "isTemplate", "needFragmentWrapper", "slotOutlet", "loop", "createForLoopParams", "parseResult", "parseForExpression", "addIdentifiers", "removeIdentifiers", "scopes", "forAliasRE", "forIteratorRE", "stripParensRE", "input", "inMatch", "LHS", "RHS", "result", "createAliasExpression", "valueContent", "trimmedOffset", "iteratorMatch", "keyContent", "keyOffset", "indexContent", "range", "memoArgs", "createParamsList", "defaultFallback", "trackSlotScopes", "vSlot", "slotProps", "trackVForSlotScopes", "vFor", "buildClientSlotFn", "buildSlots", "buildSlotFn", "slotsProperties", "dynamicSlots", "hasDynamicSlots", "onComponentSlot", "hasTemplateSlots", "hasNamedDefaultSlot", "implicitDefaultChildren", "seenSlotNames", "slotElement", "slotDir", "slotChildren", "slotLoc", "slotName", "dirLoc", "staticSlotName", "slotFunction", "vIf", "vElse", "buildDynamicSlot", "j", "conditional", "buildDefaultSlotProperty", "isNonWhitespaceContent", "slotFlag", "hasForwardedSlots", "slots", "directiveImportMap", "transformElement", "vnodeTag", "resolveComponentType", "isDynamicComponent", "vnodeProps", "vnodeChildren", "vnodePatchFlag", "vnodeDynamicProps", "dynamicPropNames", "vnodeDirectives", "shouldUseBlock", "propsBuildResult", "buildProps", "buildDirectiveArgs", "hasDynamicTextChild", "flagNames", "stringifyDynamicPropNames", "isExplicitDynamic", "isComponentTag", "isProp", "isDir", "builtIn", "fromSetup", "resolveSetupReference", "dotIndex", "bindings", "camelName", "PascalName", "checkType", "fromConst", "fromMaybeRef", "elementLoc", "mergeArgs", "runtimeDirectives", "hasRef", "hasClassBinding", "hasStyleBinding", "hasHydrationEventBinding", "hasDynamicKeys", "hasVnodeHook", "analyzePatchFlag", "isEventHandler", "isVBind", "isVOn", "dedupeProperties", "directiveTransform", "needRuntime", "propsExpression", "classKeyIndex", "styleKeyIndex", "hasDynamicKey", "classProp", "styleProp", "knownProps", "deduped", "existing", "mergeAsArray", "incoming", "dirArgs", "runtime", "trueExpression", "modifier", "propsNamesString", "cacheStringFunction", "cache", "str", "camelizeRE", "camelize", "transformSlotOutlet", "processSlotOutlet", "slotArgs", "nonNameProps", "fnExpRE", "transformOn", "augmentor", "eventName", "rawName", "shouldCache", "isMemberExp", "isInlineStatement", "hasMultipleStatements", "transformBind", "_node", "injectPrefix", "transformText", "currentContainer", "hasText", "callArgs", "seen", "transformOnce", "cur", "transformModel", "createTransformProps", "expString", "bindingType", "maybeRef", "propName", "assignmentExp", "eventArg", "altAssignment", "modifiersKey", "validDivisionCharRE", "transformFilter", "rewriteFilter", "parseFilter", "inSingle", "inDouble", "inTemplateString", "inRegex", "curly", "square", "paren", "lastFilterIndex", "expression", "filters", "pushFilter", "wrapFilter", "filter", "seen$1", "transformMemo", "getBaseTransformPreset", "baseCompile", "template", "isModuleMode", "noopDirectiveTransform", "beforeExpr", "startsExpr", "isLoop", "isAssign", "prefix", "postfix", "TokenType", "constructor", "label", "conf", "keyword", "rightAssociative", "binop", "updateContext", "keywords", "Map", "createKeyword", "name", "options", "token", "set", "createBinop", "types", "num", "bigint", "decimal", "regexp", "string", "eof", "bracketL", "bracketHashL", "bracketBarL", "bracketR", "bracketBarR", "braceL", "braceBarL", "braceHashL", "braceR", "braceBarR", "parenL", "parenR", "comma", "semi", "colon", "doubleColon", "dot", "question", "questionDot", "arrow", "template", "ellipsis", "backQuote", "dollarBraceL", "at", "hash", "interpreterDirective", "eq", "assign", "incDec", "bang", "tilde", "pipeline", "nullishCoalescing", "logicalOR", "logicalAND", "bitwiseOR", "bitwiseXOR", "bitwiseAND", "equality", "relational", "bitShift", "plusMin", "modulo", "star", "slash", "exponent", "_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", "SCOPE_OTHER", "SCOPE_PROGRAM", "SCOPE_FUNCTION", "SCOPE_ARROW", "SCOPE_SIMPLE_CATCH", "SCOPE_SUPER", "SCOPE_DIRECT_SUPER", "SCOPE_CLASS", "SCOPE_TS_MODULE", "SCOPE_VAR", "BIND_KIND_VALUE", "BIND_KIND_TYPE", "BIND_SCOPE_VAR", "BIND_SCOPE_LEXICAL", "BIND_SCOPE_FUNCTION", "BIND_FLAGS_NONE", "BIND_FLAGS_CLASS", "BIND_FLAGS_TS_ENUM", "BIND_FLAGS_TS_CONST_ENUM", "BIND_FLAGS_TS_EXPORT_ONLY", "BIND_CLASS", "BIND_LEXICAL", "BIND_VAR", "BIND_FUNCTION", "BIND_TS_INTERFACE", "BIND_TS_TYPE", "BIND_TS_ENUM", "BIND_TS_AMBIENT", "BIND_NONE", "BIND_OUTSIDE", "BIND_TS_CONST_ENUM", "BIND_TS_NAMESPACE", "CLASS_ELEMENT_FLAG_STATIC", "CLASS_ELEMENT_KIND_GETTER", "CLASS_ELEMENT_KIND_SETTER", "CLASS_ELEMENT_KIND_ACCESSOR", "CLASS_ELEMENT_STATIC_GETTER", "CLASS_ELEMENT_STATIC_SETTER", "CLASS_ELEMENT_INSTANCE_GETTER", "CLASS_ELEMENT_INSTANCE_SETTER", "CLASS_ELEMENT_OTHER", "lineBreak", "lineBreakG", "RegExp", "source", "isNewLine", "code", "skipWhiteSpace", "isWhitespace", "Position", "line", "col", "column", "SourceLocation", "start", "end", "filename", "identifierName", "getLineInfo", "input", "offset", "lineStart", "match", "lastIndex", "exec", "index", "BaseParser", "inModule", "scope", "classScope", "prodParam", "plugins", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "state", "length", "hasPlugin", "has", "getPluginOption", "plugin", "get", "last", "stack", "CommentsParser", "addComment", "comment", "loc", "trailingComments", "push", "leadingComments", "adjustCommentsAfterTrailingComma", "node", "elements", "takeAllComments", "lastElement", "i", "j", "commentPreviousNode", "splice", "newTrailingComments", "leadingComment", "undefined", "processComment", "type", "body", "commentStack", "firstChild", "lastChild", "lastInStack", "pop", "properties", "arguments", "slice", "innerComments", "firstTrailingCommentIndex", "findIndex", "ErrorMessages", "Object", "freeze", "AccessorIsGenerator", "ArgumentsInClass", "AsyncFunctionInSingleStatementContext", "AwaitBindingIdentifier", "AwaitExpressionFormalParameter", "AwaitNotInAsyncFunction", "BadGetterArity", "BadSetterArity", "BadSetterRestParameter", "ConstructorClassField", "ConstructorClassPrivateField", "ConstructorIsAccessor", "ConstructorIsAsync", "ConstructorIsGenerator", "DeclarationMissingInitializer", "DecoratorBeforeExport", "DecoratorConstructor", "DecoratorExportClass", "DecoratorSemicolon", "DecoratorStaticBlock", "DeletePrivateField", "DestructureNamedImport", "DuplicateConstructor", "DuplicateDefaultExport", "DuplicateExport", "DuplicateProto", "DuplicateRegExpFlags", "DuplicateStaticBlock", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportBindingIsString", "ImportCallArgumentTrailingComma", "ImportCallArity", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "ImportMetaOutsideModule", "ImportOutsideModule", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidDecimal", "InvalidDigit", "InvalidEscapeSequence", "InvalidEscapeSequenceTemplate", "InvalidEscapedReservedWord", "InvalidIdentifier", "InvalidLhs", "InvalidLhsBinding", "InvalidNumber", "InvalidOrMissingExponent", "InvalidOrUnexpectedToken", "InvalidParenthesizedAssignment", "InvalidPrivateFieldResolution", "InvalidPropertyBindingPattern", "InvalidRecordProperty", "InvalidRestAssignmentPattern", "LabelRedeclaration", "LetInLexicalBinding", "LineTerminatorBeforeArrow", "MalformedRegExpFlags", "MissingClassName", "MissingEqInAssignment", "MissingUnicodeEscape", "MixingCoalesceWithLogical", "ModuleAttributeDifferentFromType", "ModuleAttributeInvalidValue", "ModuleAttributesWithDuplicateKeys", "ModuleExportNameHasLoneSurrogate", "ModuleExportUndefined", "MultipleDefaultsInSwitch", "NewlineAfterThrow", "NoCatchOrFinally", "NumberIdentifier", "NumericSeparatorInEscapeSequence", "ObsoleteAwaitStar", "OptionalChainingNoNew", "OptionalChainingNoTemplate", "ParamDupe", "PatternHasAccessor", "PatternHasMethod", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "PrivateInExpectedIn", "PrivateNameRedeclaration", "RecordExpressionBarIncorrectEndSyntaxType", "RecordExpressionBarIncorrectStartSyntaxType", "RecordExpressionHashIncorrectStartSyntaxType", "RecordNoProto", "RestTrailingComma", "SloppyFunction", "StaticPrototype", "StrictDelete", "StrictEvalArguments", "StrictEvalArgumentsBinding", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "SuperNotAllowed", "SuperPrivateField", "TrailingDecorator", "TupleExpressionBarIncorrectEndSyntaxType", "TupleExpressionBarIncorrectStartSyntaxType", "TupleExpressionHashIncorrectStartSyntaxType", "UnexpectedArgumentPlaceholder", "UnexpectedAwaitAfterPipelineBody", "UnexpectedDigitAfterHash", "UnexpectedImportExport", "UnexpectedKeyword", "UnexpectedLeadingDecorator", "UnexpectedLexicalDeclaration", "UnexpectedNewTarget", "UnexpectedNumericSeparator", "UnexpectedPrivateField", "UnexpectedReservedWord", "UnexpectedSuper", "UnexpectedToken", "UnexpectedTokenUnaryExponentiation", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "VarRedeclaration", "YieldBindingIdentifier", "YieldInParameter", "ZeroDigitNumericSeparator", "ParserError", "getLocationForPosition", "pos", "startLoc", "lastTokStart", "lastTokStartLoc", "endLoc", "lastTokEnd", "lastTokEndLoc", "raise", "errorTemplate", "params", "raiseWithData", "data", "message", "replace", "_", "_raise", "errorContext", "err", "SyntaxError", "errorRecovery", "isLookahead", "errors", "isSimpleProperty", "kind", "method", "estree", "superClass", "estreeParseRegExpLiteral", "pattern", "flags", "regex", "estreeParseLiteral", "estreeParseBigIntLiteral", "value", "bigInt", "BigInt", "String", "estreeParseDecimalLiteral", "parseLiteral", "directiveToStmt", "directive", "directiveLiteral", "stmt", "startNodeAt", "expression", "raw", "extra", "finishNodeAt", "initFunction", "isAsync", "checkDeclaration", "getObjectOrClassMethodParams", "checkLVal", "expr", "bindingType", "checkClashes", "contextDescription", "disallowLetBinding", "forEach", "prop", "checkProto", "isRecord", "protoRef", "refExpressionErrors", "isValidDirective", "_stmt$expression$extr", "parenthesized", "stmtToDirective", "parseBlockBody", "allowDirectives", "topLevel", "directiveStatements", "directives", "map", "d", "concat", "pushClassMethod", "classBody", "isGenerator", "isConstructor", "allowsDirectSuper", "parseMethod", "typeParameters", "parseExprAtom", "tt", "startPos", "parseFunctionBody", "allowExpression", "isMethod", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "finishNode", "parseObjectMethod", "isPattern", "isAccessor", "shorthand", "parseObjectProperty", "toAssignable", "toAssignableObjectExpressionProp", "isLast", "key", "Errors", "finishCallExpression", "optional", "callee", "toReferencedListDeep", "exprList", "isParenthesizedExpr", "parseExport", "exported", "specifiers", "parseSubscript", "base", "noCalls", "optionalChainMember", "substring", "stop", "chain", "startNodeAtNode", "TokContext", "isExpr", "preserveSpace", "override", "braceStatement", "braceExpression", "recordExpression", "templateQuasi", "parenStatement", "parenExpression", "p", "readTmplToken", "functionExpression", "functionStatement", "context", "exprAllowed", "out", "curContext", "prevType", "allowed", "hasYield", "isIterator", "braceIsBlock", "statementParens", "hasPrecedingLineBreak", "b_stat", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "isIdentifierStart", "test", "fromCharCode", "isIdentifierChar", "reservedWords", "strict", "strictBind", "Set", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "isStrictReservedWord", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "keywordRelationalOperator", "isIteratorStart", "current", "next", "reservedTypes", "FlowErrors", "AmbiguousConditionalArrow", "AmbiguousDeclareModuleKind", "AssignReservedType", "DeclareClassElement", "DeclareClassFieldInitializer", "DuplicateDeclareModuleExports", "EnumBooleanMemberNotInitialized", "EnumDuplicateMemberName", "EnumInconsistentMemberValues", "EnumInvalidExplicitType", "EnumInvalidExplicitTypeUnknownSupplied", "EnumInvalidMemberInitializerPrimaryType", "EnumInvalidMemberInitializerSymbolType", "EnumInvalidMemberInitializerUnknownType", "EnumInvalidMemberName", "EnumNumberMemberNotInitialized", "EnumStringMemberInconsistentlyInitailized", "ImportTypeShorthandOnlyInPureImport", "InexactInsideExact", "InexactInsideNonObject", "InexactVariance", "InvalidNonTypeImportInDeclareModule", "MissingTypeParamDefault", "NestedDeclareModule", "NestedFlowComment", "OptionalBindingPattern", "SpreadVariance", "TypeBeforeInitializer", "TypeCastInPattern", "UnexpectedExplicitInexactInObject", "UnexpectedReservedType", "UnexpectedReservedUnderscore", "UnexpectedSpaceBetweenModuloChecks", "UnexpectedSpreadType", "UnexpectedSubtractionOperand", "UnexpectedTokenAfterTypeParameter", "UnexpectedTypeParameterBeforeAsyncArrowFunction", "UnsupportedDeclareExportKind", "UnsupportedStatementInDeclareModule", "UnterminatedFlowComment", "isEsModuleType", "bodyElement", "declaration", "hasTypeImportKind", "importKind", "isMaybeDefaultImport", "exportSuggestions", "const", "let", "interface", "partition", "list", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "_temp", "flowPragma", "shouldParseTypes", "shouldParseEnums", "finishToken", "val", "matches", "Error", "flowParseTypeInitialiser", "tok", "oldInType", "inType", "expect", "flowParseType", "flowParsePredicate", "moduloLoc", "moduloPos", "checksLoc", "expectContextual", "eat", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "id", "parseIdentifier", "typeNode", "typeContainer", "isRelational", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "rest", "returnType", "typeAnnotation", "resetEndLocation", "semicolon", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "eatContextual", "flowParseDeclareModuleExports", "flowParseDeclareModule", "isContextual", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "unexpected", "flowParseTypeAnnotatableIdentifier", "declareName", "enter", "bodyNode", "parseImport", "exit", "hasModuleExport", "default", "isLet", "suggestion", "exportKind", "flowParseTypeAnnotation", "flowParseTypeAlias", "flowParseOpaqueType", "isClass", "flowParseRestrictedIdentifier", "extends", "implements", "mixins", "flowParseInterfaceExtends", "flowParseObjectType", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "flowParseQualifiedTypeIdentifier", "flowParseTypeParameterInstantiation", "flowParseInterface", "checkNotUnderscore", "checkReservedType", "liberal", "right", "declare", "supertype", "impltype", "flowParseTypeParameter", "requireDefault", "nodeStart", "variance", "flowParseVariance", "ident", "bound", "jsxTagStart", "defaultRequired", "typeParameter", "expectRelational", "oldNoAnonFunctionType", "noAnonFunctionType", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "lookahead", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "valueNode", "callProperties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStart", "inexactStart", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "argument", "proto", "flowCheckGetterSetterParams", "property", "paramCount", "node2", "qualification", "flowParseGenericType", "flowParseTypeofType", "flowParsePrimaryType", "flowParseTupleType", "lh", "reinterpretTypeAsFunctionTypeParam", "flowIdentToTypeAnnotation", "isGroupedType", "createIdentifier", "flowParsePostfixType", "canInsertSemicolon", "elementType", "flowParsePrefixType", "flowParseAnonFunctionWithoutParens", "param", "flowParseIntersectionType", "flowParseUnionType", "allowPrimitiveOverride", "typeCastToParameter", "allowExpressionBody", "forwardNoArrowParamsConversionAt", "parseFunctionBodyAndFinish", "parseStatement", "flowParseEnumDeclaration", "parseExpressionStatement", "shouldParseExportDeclaration", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "refNeedsArrowPos", "result", "tryParse", "error", "failState", "clone", "originalNoArrowAt", "noArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "invalid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "noArrowParamsConversionAt", "parseMaybeAssignAllowIn", "disallowInvalid", "arrows", "finishArrowValidation", "every", "isAssignable", "_node$extra", "toAssignableList", "trailingComma", "checkParams", "parse", "indexOf", "parseParenItem", "typeCastNode", "assertModuleNodeAllowed", "decl", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "member", "parseClassMemberFromModifier", "getTokenFromCode", "charCodeAt", "finishOp", "readWord", "isBinding", "element", "operator", "trailingCommaPos", "toReferencedList", "_expr$extra", "parseClassProperty", "parseClassPrivateProperty", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "parsePropertyName", "isPrivateNameAllowed", "parseObjPropValue", "parseAssignableListItemTypes", "parseMaybeDefault", "left", "shouldParseDefaultImport", "parseImportSpecifierLocal", "specifier", "local", "maybeParseDefaultImportSpecifier", "parseImportSpecifier", "firstIdentLoc", "firstIdent", "specifierTypeKind", "isLookaheadContextual", "as_ident", "imported", "__clone", "nodeIsTypeImport", "specifierIsTypeImport", "checkReservedWord", "parseFunctionParams", "allowModifiers", "parseVarId", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "tc", "j_oTag", "j_expr", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "resetStartLocationFromNode", "maybeUnwrapTypeCastExpression", "aborted", "async", "thrown", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "parseParenAndDistinguishExpression", "canBeArrow", "parseSubscripts", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "subscriptState", "isLookaheadToken_lt", "typeArguments", "parseNewArguments", "targs", "parseArrowExpression", "readToken_mult_modulo", "hasFlowComment", "nextToken", "readToken_pipe_amp", "parseTopLevel", "file", "program", "fileNode", "skipBlockComment", "skipFlowComment", "hasFlowCommentCompletion", "shiftToFirstNonWhiteSpace", "includes", "ch2", "ch3", "flowEnumErrorBooleanMemberNotInitialized", "enumName", "memberName", "flowEnumErrorInvalidMemberName", "toUpperCase", "flowEnumErrorDuplicateMemberName", "flowEnumErrorInconsistentMemberValues", "flowEnumErrorInvalidExplicitType", "suppliedType", "flowEnumErrorInvalidMemberInitializer", "explicitType", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitailized", "flowEnumMemberInit", "endOfInit", "literal", "parseBooleanLiteral", "flowEnumMemberRaw", "init", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "memberNode", "add", "flowEnumStringMembers", "initializedMembers", "_i", "_i2", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "_i3", "_members$defaultedMem", "_i4", "_members$defaultedMem2", "nextTokenStart", "afterNext", "entities", "quot", "amp", "apos", "lt", "gt", "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar", "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg", "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro", "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14", "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave", "eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc", "uuml", "yacute", "thorn", "yuml", "OElig", "oelig", "Scaron", "scaron", "Yuml", "fnof", "circ", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "thetasym", "upsih", "piv", "ensp", "emsp", "thinsp", "zwnj", "zwj", "lrm", "rlm", "ndash", "mdash", "lsquo", "rsquo", "sbquo", "ldquo", "rdquo", "bdquo", "dagger", "Dagger", "bull", "hellip", "permil", "prime", "Prime", "lsaquo", "rsaquo", "oline", "frasl", "euro", "image", "weierp", "real", "trade", "alefsym", "larr", "uarr", "rarr", "darr", "harr", "crarr", "lArr", "uArr", "rArr", "dArr", "hArr", "forall", "part", "exist", "nabla", "isin", "notin", "ni", "prod", "sum", "minus", "lowast", "radic", "infin", "ang", "and", "or", "cap", "cup", "int", "there4", "sim", "cong", "asymp", "ne", "equiv", "le", "ge", "sub", "sup", "nsub", "sube", "supe", "oplus", "otimes", "perp", "sdot", "lceil", "rceil", "lfloor", "rfloor", "lang", "rang", "loz", "spades", "clubs", "hearts", "diams", "HEX_NUMBER", "DECIMAL_NUMBER", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagFragment", "MissingClosingTagElement", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "j_cTag", "jsxName", "jsxText", "jsxTagEnd", "isFragment", "object", "getQualifiedJSXName", "namespace", "jsxReadToken", "chunkStart", "ch", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "curLine", "jsxReadString", "quote", "str", "count", "entity", "substr", "fromCodePoint", "parseInt", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "newNode", "jsxParseAttributeValue", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "jsxParseAttribute", "jsxParseOpeningElementAt", "jsxParseOpeningElementAfterName", "attributes", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "inPropertyName", "Scope", "var", "lexical", "functions", "ScopeHandler", "scopeStack", "undefinedExports", "undefinedPrivateNames", "inFunction", "currentVarScope", "allowSuper", "currentThisScope", "inClass", "inNonArrowFunction", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "currentScope", "createScope", "checkRedeclarationInScope", "maybeExportDefined", "delete", "isRedeclaredInScope", "checkLocalExport", "TypeScriptScope", "args", "enums", "constEnums", "classes", "exportOnlyBindings", "TypeScriptScopeHandler", "isConst", "wasConst", "PARAM", "PARAM_YIELD", "PARAM_AWAIT", "PARAM_RETURN", "PARAM_IN", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasReturn", "hasIn", "functionFlags", "nonNull", "x", "assert", "TSErrors", "ClassMethodHasDeclare", "ClassMethodHasReadonly", "ConstructorHasTypeParameters", "DeclareClassFieldHasInitializer", "DeclareFunctionHasImplementation", "DuplicateModifier", "EmptyHeritageClauseType", "EmptyTypeArguments", "EmptyTypeParameters", "IndexSignatureHasAbstract", "IndexSignatureHasAccessibility", "IndexSignatureHasStatic", "IndexSignatureHasDeclare", "InvalidTupleMemberLabel", "MixedLabeledAndUnlabeledElements", "OptionalTypeBeforeRequired", "PatternIsOptional", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "TypeAnnotationAfterAssign", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "keywordTypeFromName", "typescript", "getScopeHandler", "tsIsIdentifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "allowedModifiers", "modifier", "tsTryParse", "bind", "tsParseModifiers", "modified", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "tsParseDelimitedListWorker", "expectSuccess", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "qualifier", "tsParseEntityName", "tsParseTypeArguments", "allowReservedWords", "tsParseTypeReference", "typeName", "tsParseThisTypePredicate", "lhs", "parameterName", "tsParseTypeAnnotation", "tsParseThisTypeNode", "tsParseTypeQuery", "exprName", "tsParseTypeParameter", "parseIdentifierName", "constraint", "tsEatThenParseType", "tsTryParseTypeParameters", "tsParseTypeParameters", "tsTryNextParseConstantContext", "tsFillSignature", "returnToken", "signature", "returnTokenRequired", "parameters", "tsParseBindingListForSignature", "tsParseTypeOrTypePredicateAnnotation", "parseBindingList", "tsParseTypeMemberSemicolon", "tsParseSignatureMember", "tsIsUnambiguouslyIndexSignature", "tsTryParseIndexSignature", "tsLookAhead", "tsTryParseTypeAnnotation", "tsParsePropertyOrMethodSignature", "readonly", "nodeAny", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedTypeParameter", "tsExpectThenParseType", "tsParseMappedType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "labeledElements", "elementNode", "_labeledElements", "isLabeled", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "tsParseNonArrayType", "lookaheadCharCode", "parseMaybeUnary", "tsParseArrayTypeOrHigher", "objectType", "indexType", "tsParseTypeOperator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "find", "kw", "tsParseUnionOrIntersectionType", "parseConstituentType", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "braceStackCounter", "tsInType", "t", "asserts", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "containsEsc", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "tsParseTypeAssertion", "tsNextThenParseType", "tsParseHeritageClause", "descriptor", "originalStart", "delimitedList", "tsParseExpressionWithTypeArguments", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInNoContext", "cb", "oldContext", "tsDoThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "isExport", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "res", "tsTryParseAndCatch", "tsTryParseDeclare", "nany", "isLineTerminator", "starttype", "tsInDeclareContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsParseExpressionStatement", "mod", "tsCheckLineTerminatorAndMatch", "cls", "abstract", "tokenType", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "maybeInArrowParameters", "oldYieldPos", "yieldPos", "oldAwaitPos", "awaitPos", "tsIsDeclarationStart", "parseAssignableListItem", "decorators", "accessibility", "parseAccessModifier", "elt", "pp", "parameter", "bodilessType", "isDeclareContext", "registerFunctionStatementId", "tsCheckForInvalidTypeCasts", "items", "isInParens", "nonNullExpression", "atPossibleAsyncArrow", "asyncArrowFn", "parseTaggedTemplateExpression", "parseExprOp", "leftStartPos", "leftStartLoc", "minPrec", "reScan_lt_gt", "checkKeywords", "checkDuplicateExports", "ahead", "importNode", "isAbstractClass", "parseStatementContent", "callParseClassMember", "parseClassMemberWithIsStatic", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "resetStartLocation", "parseClassPropertyAnnotation", "definite", "_typeCast", "_typeCast2", "_jsx4", "_typeCast3", "typeCast", "ct", "_typeParameters", "parseBindingAtom", "parseMaybeDecoratorArguments", "readToken_lt_gt", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "parseCatchClauseParam", "oldIsDeclareContext", "placeholder", "placeholders", "parsePlaceholder", "expectedNode", "assertNoSpace", "finishPlaceholder", "isFinished", "verifyBreakContinue", "parseBlock", "parseFunctionId", "takeDecorators", "oldStrict", "parseClassBody", "expectPlugin", "isUnparsedContextual", "startsWith", "nextTokenStartSince", "maybeParseExportDefaultSpecifier", "checkExport", "filter", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "parseV8Intrinsic", "v8IntrinsicStart", "identifier", "some", "Array", "isArray", "option", "PIPELINE_PROPOSALS", "RECORD_AND_TUPLE_SYNTAX_TYPES", "validatePlugins", "decoratorsBeforeExport", "join", "mixinPlugins", "mixinPluginNames", "keys", "defaultOptions", "sourceType", "sourceFilename", "startLine", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "strictMode", "ranges", "tokens", "createParenthesizedExpressions", "getOptions", "opts", "_Object$keys", "State", "potentialArrowAt", "inParameters", "maybeInAsyncArrowHead", "inPipeline", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "soloAwait", "inFSharpPipelineDirectBody", "labels", "decoratorStack", "comments", "octalPositions", "exportedIdentifiers", "tokensLength", "curPosition", "skipArrays", "VALID_REGEX_FLAGS", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "allowedNumericSeparatorSiblings", "bin", "oct", "dec", "Token", "Tokenizer", "ParserErrors", "pushToken", "checkKeywordEscapes", "old", "curr", "skip", "setStrict", "lastIndexOf", "skipSpace", "codePointAt", "pushComment", "block", "text", "skipLineComment", "startSkip", "loop", "readToken_numberSign", "readToken_interpreter", "nextPos", "readToken_dot", "readNumber", "readToken_slash", "readRegexp", "width", "readToken_caret", "readToken_plus_min", "size", "readToken_eq_excl", "readToken_question", "next2", "readRadixNumber", "readString", "escaped", "charAt", "content", "mods", "char", "charCode", "readInt", "radix", "len", "forceLen", "allowNumSeparator", "forbiddenSiblings", "allowedSiblings", "total", "e", "Infinity", "prev", "Number", "isNaN", "_isDigit", "isBigInt", "startsWithDot", "isFloat", "isDecimal", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "parseFloat", "readCodePoint", "throwOnInvalid", "codePos", "readHexChar", "readEscapedChar", "containsInvalid", "inTemplate", "octalStr", "octal", "n", "readWord1", "escStart", "identifierCheck", "esc", "keywordTypes", "parent", "update", "UtilParser", "addExtra", "op", "nameStart", "nameEnd", "messageOrType", "missingPlugin", "expectOnePlugin", "names", "checkYieldAwaitInDefaultParams", "fn", "oldState", "abortSignal", "checkExpressionErrors", "andThrow", "shorthandAssign", "doubleProto", "isLiteralPropertyName", "ExpressionErrors", "Node", "parser", "range", "NodeUtils", "locationNode", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "_node$extra2", "raiseRestNotLast", "checkToRestConversion", "arg", "raiseTrailingCommaAfterRest", "parseSpread", "parseRestBinding", "parseObjectLike", "close", "closeCharCode", "allowEmpty", "elts", "first", "checkCommaAfterRest", "parseDecorator", "_startLoc", "_startPos", "_left", "strictModeChanged", "_expr$properties", "_expr$elements", "elem", "ExpressionParser", "computed", "used", "shouldExitDescending", "getExpression", "paramFlags", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "expressions", "parseMaybeAssignDisallowIn", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "parseExprOps", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "nextOp", "withTopicPermittingContext", "parseSmartPipelineBody", "parseExprOpBaseRightExpr", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "isAwaitAllowed", "parseAwait", "isDelete", "parseUpdate", "parseExprSubscripts", "maybeAsyncArrow", "oldMaybeInAsyncArrowHead", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseMember", "parseMaybePrivateName", "usePrivateName", "parseNoCallExpr", "tag", "quasi", "_node$arguments", "possibleAsyncArrow", "dynamicImport", "allowPlaceholder", "nodeForExtra", "innerParenStart", "oldInFSharpPipelineDirectBody", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaProperty", "parseFunction", "parseAsyncArrowUnaryFunction", "parseDo", "parseArrayLike", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "primaryTopicReferenceIsAllowedInCurrentTopicContext", "registerTopicReference", "nextCh", "lookaheadCh", "oldLabels", "meta", "parseMetaProperty", "propertyName", "innerStartPos", "innerStartLoc", "spreadStart", "optionalCommaStart", "spreadNodeStartPos", "spreadNodeStartLoc", "innerEndPos", "innerEndLoc", "arrowNode", "parenStart", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "cooked", "tail", "curElt", "quasis", "propHash", "create", "parsePropertyDefinition", "maybeAsyncOrAccessorProp", "keyName", "checkGetterSetterParams", "_params", "oldInPropertyName", "generator", "canBePattern", "isTuple", "isExpression", "oldInParameters", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "errorPos", "nameHash", "delegate", "childExpression", "checkSmartPipelineBodyEarlyErrors", "parseSmartPipelineBodyInStyle", "isSimpleReference", "topicReferenceWasUsedInCurrentTopicContext", "callback", "outerContextTopicState", "withTopicForbiddingContext", "outerContextSoloAwaitState", "ret", "loopLabel", "switchLabel", "FUNC_NO_FLAGS", "FUNC_STATEMENT", "FUNC_HANGING_STATEMENT", "FUNC_NULLABLE_ID", "loneSurrogate", "StatementParser", "interpreter", "parseInterpreterDirective", "_Array$from", "from", "parseBreakContinueStatement", "parseDebuggerStatement", "parseDoStatement", "parseForStatement", "parseIfStatement", "parseReturnStatement", "parseSwitchStatement", "parseThrowStatement", "parseTryStatement", "parseWhileStatement", "parseWithStatement", "parseEmptyStatement", "nextTokenCharCode", "isAsyncFunction", "maybeName", "parseLabeledStatement", "allowExport", "currentContextDecorators", "decorator", "isBreak", "lab", "parseHeaderExpression", "awaitAt", "parseFor", "parseVar", "declarations", "parseForIn", "description", "declarationPosition", "discriminant", "cases", "cur", "sawDefault", "isCase", "simple", "handler", "clause", "finalizer", "_this$state$labels", "statementStart", "createNewLexicalScope", "afterBlockParse", "parsedNonDirective", "isForIn", "await", "isFor", "isTypescript", "statement", "isHangingStatement", "requireId", "constructorAllowsSuper", "hadConstructor", "hadStaticBlock", "parseClassStaticBlock", "publicMethod", "privateMethod", "publicProp", "privateProp", "publicMember", "parseClassElementName", "isPrivate", "isSimple", "maybeQuestionTokenStart", "pushClassPrivateProperty", "pushClassProperty", "_member$decorators", "declarePrivateName", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "maybeParseExportNamedSpecifiers", "hasDeclaration", "maybeParseExportDeclaration", "parseModuleExportName", "l", "hasFrom", "nextAfterFrom", "checkNames", "isDefault", "isFrom", "_declaration$extra", "_node$specifiers", "exportedName", "_i5", "_node$declaration$dec", "_i6", "_node$properties", "_i7", "_node$elements", "nodes", "surrogate", "toString", "parseNext", "assertions", "maybeParseImportAssertions", "maybeParseModuleAttributes", "parseAssertEntries", "attrs", "attrNames", "assertionKeyNode", "ClassScope", "privateNames", "loneAccessors", "ClassScopeHandler", "oldClassScope", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "_this$stack", "Parser", "pluginsMap", "pluginMap", "_options", "getParser", "ast", "moduleError", "getParserClass", "parserClassCache", "pluginsFromOptions", "pluginList", "require_shallowEqual", "__commonJSMin", "exports", "shallowEqual", "actual", "expected", "keys", "key", "require_generated", "__commonJSMin", "exports", "isArrayExpression", "isAssignmentExpression", "isBinaryExpression", "isInterpreterDirective", "isDirective", "isDirectiveLiteral", "isBlockStatement", "isBreakStatement", "isCallExpression", "isCatchClause", "isConditionalExpression", "isContinueStatement", "isDebuggerStatement", "isDoWhileStatement", "isEmptyStatement", "isExpressionStatement", "isFile", "isForInStatement", "isForStatement", "isFunctionDeclaration", "isFunctionExpression", "isIdentifier", "isIfStatement", "isLabeledStatement", "isStringLiteral", "isNumericLiteral", "isNullLiteral", "isBooleanLiteral", "isRegExpLiteral", "isLogicalExpression", "isMemberExpression", "isNewExpression", "isProgram", "isObjectExpression", "isObjectMethod", "isObjectProperty", "isRestElement", "isReturnStatement", "isSequenceExpression", "isParenthesizedExpression", "isSwitchCase", "isSwitchStatement", "isThisExpression", "isThrowStatement", "isTryStatement", "isUnaryExpression", "isUpdateExpression", "isVariableDeclaration", "isVariableDeclarator", "isWhileStatement", "isWithStatement", "isAssignmentPattern", "isArrayPattern", "isArrowFunctionExpression", "isClassBody", "isClassExpression", "isClassDeclaration", "isExportAllDeclaration", "isExportDefaultDeclaration", "isExportNamedDeclaration", "isExportSpecifier", "isForOfStatement", "isImportDeclaration", "isImportDefaultSpecifier", "isImportNamespaceSpecifier", "isImportSpecifier", "isMetaProperty", "isClassMethod", "isObjectPattern", "isSpreadElement", "isSuper", "isTaggedTemplateExpression", "isTemplateElement", "isTemplateLiteral", "isYieldExpression", "isAwaitExpression", "isImport", "isBigIntLiteral", "isExportNamespaceSpecifier", "isOptionalMemberExpression", "isOptionalCallExpression", "isAnyTypeAnnotation", "isArrayTypeAnnotation", "isBooleanTypeAnnotation", "isBooleanLiteralTypeAnnotation", "isNullLiteralTypeAnnotation", "isClassImplements", "isDeclareClass", "isDeclareFunction", "isDeclareInterface", "isDeclareModule", "isDeclareModuleExports", "isDeclareTypeAlias", "isDeclareOpaqueType", "isDeclareVariable", "isDeclareExportDeclaration", "isDeclareExportAllDeclaration", "isDeclaredPredicate", "isExistsTypeAnnotation", "isFunctionTypeAnnotation", "isFunctionTypeParam", "isGenericTypeAnnotation", "isInferredPredicate", "isInterfaceExtends", "isInterfaceDeclaration", "isInterfaceTypeAnnotation", "isIntersectionTypeAnnotation", "isMixedTypeAnnotation", "isEmptyTypeAnnotation", "isNullableTypeAnnotation", "isNumberLiteralTypeAnnotation", "isNumberTypeAnnotation", "isObjectTypeAnnotation", "isObjectTypeInternalSlot", "isObjectTypeCallProperty", "isObjectTypeIndexer", "isObjectTypeProperty", "isObjectTypeSpreadProperty", "isOpaqueType", "isQualifiedTypeIdentifier", "isStringLiteralTypeAnnotation", "isStringTypeAnnotation", "isSymbolTypeAnnotation", "isThisTypeAnnotation", "isTupleTypeAnnotation", "isTypeofTypeAnnotation", "isTypeAlias", "isTypeAnnotation", "isTypeCastExpression", "isTypeParameter", "isTypeParameterDeclaration", "isTypeParameterInstantiation", "isUnionTypeAnnotation", "isVariance", "isVoidTypeAnnotation", "isEnumDeclaration", "isEnumBooleanBody", "isEnumNumberBody", "isEnumStringBody", "isEnumSymbolBody", "isEnumBooleanMember", "isEnumNumberMember", "isEnumStringMember", "isEnumDefaultedMember", "isJSXAttribute", "isJSXClosingElement", "isJSXElement", "isJSXEmptyExpression", "isJSXExpressionContainer", "isJSXSpreadChild", "isJSXIdentifier", "isJSXMemberExpression", "isJSXNamespacedName", "isJSXOpeningElement", "isJSXSpreadAttribute", "isJSXText", "isJSXFragment", "isJSXOpeningFragment", "isJSXClosingFragment", "isNoop", "isPlaceholder", "isV8IntrinsicIdentifier", "isArgumentPlaceholder", "isBindExpression", "isClassProperty", "isPipelineTopicExpression", "isPipelineBareFunction", "isPipelinePrimaryTopicReference", "isClassPrivateProperty", "isClassPrivateMethod", "isImportAttribute", "isDecorator", "isDoExpression", "isExportDefaultSpecifier", "isPrivateName", "isRecordExpression", "isTupleExpression", "isDecimalLiteral", "isStaticBlock", "isTSParameterProperty", "isTSDeclareFunction", "isTSDeclareMethod", "isTSQualifiedName", "isTSCallSignatureDeclaration", "isTSConstructSignatureDeclaration", "isTSPropertySignature", "isTSMethodSignature", "isTSIndexSignature", "isTSAnyKeyword", "isTSBooleanKeyword", "isTSBigIntKeyword", "isTSIntrinsicKeyword", "isTSNeverKeyword", "isTSNullKeyword", "isTSNumberKeyword", "isTSObjectKeyword", "isTSStringKeyword", "isTSSymbolKeyword", "isTSUndefinedKeyword", "isTSUnknownKeyword", "isTSVoidKeyword", "isTSThisType", "isTSFunctionType", "isTSConstructorType", "isTSTypeReference", "isTSTypePredicate", "isTSTypeQuery", "isTSTypeLiteral", "isTSArrayType", "isTSTupleType", "isTSOptionalType", "isTSRestType", "isTSNamedTupleMember", "isTSUnionType", "isTSIntersectionType", "isTSConditionalType", "isTSInferType", "isTSParenthesizedType", "isTSTypeOperator", "isTSIndexedAccessType", "isTSMappedType", "isTSLiteralType", "isTSExpressionWithTypeArguments", "isTSInterfaceDeclaration", "isTSInterfaceBody", "isTSTypeAliasDeclaration", "isTSAsExpression", "isTSTypeAssertion", "isTSEnumDeclaration", "isTSEnumMember", "isTSModuleDeclaration", "isTSModuleBlock", "isTSImportType", "isTSImportEqualsDeclaration", "isTSExternalModuleReference", "isTSNonNullExpression", "isTSExportAssignment", "isTSNamespaceExportDeclaration", "isTSTypeAnnotation", "isTSTypeParameterInstantiation", "isTSTypeParameterDeclaration", "isTSTypeParameter", "isExpression", "isBinary", "isScopable", "isBlockParent", "isBlock", "isStatement", "isTerminatorless", "isCompletionStatement", "isConditional", "isLoop", "isWhile", "isExpressionWrapper", "isFor", "isForXStatement", "isFunction", "isFunctionParent", "isPureish", "isDeclaration", "isPatternLike", "isLVal", "isTSEntityName", "isLiteral", "isImmutable", "isUserWhitespacable", "isMethod", "isObjectMember", "isProperty", "isUnaryLike", "isPattern", "isClass", "isModuleDeclaration", "isExportDeclaration", "isModuleSpecifier", "isFlow", "isFlowType", "isFlowBaseAnnotation", "isFlowDeclaration", "isFlowPredicate", "isEnumBody", "isEnumMember", "isJSX", "isPrivate", "isTSTypeElement", "isTSType", "isTSBaseType", "isNumberLiteral", "isRegexLiteral", "isRestProperty", "isSpreadProperty", "_shallowEqual", "_interopRequireDefault", "obj", "node", "opts", "nodeType", "require_matchesPattern", "__commonJSMin", "exports", "matchesPattern", "_generated", "member", "match", "allowPartial", "parts", "nodes", "node", "i", "j", "value", "require_buildMatchMemberExpression", "__commonJSMin", "exports", "buildMatchMemberExpression", "_matchesPattern", "_interopRequireDefault", "obj", "match", "allowPartial", "parts", "member", "require_isReactComponent", "__commonJSMin", "exports", "_buildMatchMemberExpression", "_interopRequireDefault", "obj", "isReactComponent", "_default", "require_isCompatTag", "__commonJSMin", "exports", "isCompatTag", "tagName", "require_listCacheClear", "__commonJSMin", "exports", "module", "listCacheClear", "require_eq", "__commonJSMin", "exports", "module", "eq", "value", "other", "require_assocIndexOf", "__commonJSMin", "exports", "module", "eq", "assocIndexOf", "array", "key", "length", "require_listCacheDelete", "__commonJSMin", "exports", "module", "assocIndexOf", "arrayProto", "splice", "listCacheDelete", "key", "data", "index", "lastIndex", "require_listCacheGet", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheGet", "key", "data", "index", "require_listCacheHas", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheHas", "key", "require_listCacheSet", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheSet", "key", "value", "data", "index", "require_ListCache", "__commonJSMin", "exports", "module", "listCacheClear", "listCacheDelete", "listCacheGet", "listCacheHas", "listCacheSet", "ListCache", "entries", "index", "length", "entry", "require_stackClear", "__commonJSMin", "exports", "module", "ListCache", "stackClear", "require_stackDelete", "__commonJSMin", "exports", "module", "stackDelete", "key", "data", "result", "require_stackGet", "__commonJSMin", "exports", "module", "stackGet", "key", "require_stackHas", "__commonJSMin", "exports", "module", "stackHas", "key", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "require_isFunction", "__commonJSMin", "exports", "module", "baseGetTag", "isObject", "asyncTag", "funcTag", "genTag", "proxyTag", "isFunction", "value", "tag", "require_coreJsData", "__commonJSMin", "exports", "module", "root", "coreJsData", "require_isMasked", "__commonJSMin", "exports", "module", "coreJsData", "maskSrcKey", "uid", "isMasked", "func", "require_toSource", "__commonJSMin", "exports", "module", "funcProto", "funcToString", "toSource", "func", "require_baseIsNative", "__commonJSMin", "exports", "module", "isFunction", "isMasked", "isObject", "toSource", "reRegExpChar", "reIsHostCtor", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "reIsNative", "baseIsNative", "value", "pattern", "require_getValue", "__commonJSMin", "exports", "module", "getValue", "object", "key", "require_getNative", "__commonJSMin", "exports", "module", "baseIsNative", "getValue", "getNative", "object", "key", "value", "require_Map", "__commonJSMin", "exports", "module", "getNative", "root", "Map", "require_nativeCreate", "__commonJSMin", "exports", "module", "getNative", "nativeCreate", "require_hashClear", "__commonJSMin", "exports", "module", "nativeCreate", "hashClear", "require_hashDelete", "__commonJSMin", "exports", "module", "hashDelete", "key", "result", "require_hashGet", "__commonJSMin", "exports", "module", "nativeCreate", "HASH_UNDEFINED", "objectProto", "hasOwnProperty", "hashGet", "key", "data", "result", "require_hashHas", "__commonJSMin", "exports", "module", "nativeCreate", "objectProto", "hasOwnProperty", "hashHas", "key", "data", "require_hashSet", "__commonJSMin", "exports", "module", "nativeCreate", "HASH_UNDEFINED", "hashSet", "key", "value", "data", "require_Hash", "__commonJSMin", "exports", "module", "hashClear", "hashDelete", "hashGet", "hashHas", "hashSet", "Hash", "entries", "index", "length", "entry", "require_mapCacheClear", "__commonJSMin", "exports", "module", "Hash", "ListCache", "Map", "mapCacheClear", "require_isKeyable", "__commonJSMin", "exports", "module", "isKeyable", "value", "type", "require_getMapData", "__commonJSMin", "exports", "module", "isKeyable", "getMapData", "map", "key", "data", "require_mapCacheDelete", "__commonJSMin", "exports", "module", "getMapData", "mapCacheDelete", "key", "result", "require_mapCacheGet", "__commonJSMin", "exports", "module", "getMapData", "mapCacheGet", "key", "require_mapCacheHas", "__commonJSMin", "exports", "module", "getMapData", "mapCacheHas", "key", "require_mapCacheSet", "__commonJSMin", "exports", "module", "getMapData", "mapCacheSet", "key", "value", "data", "size", "require_MapCache", "__commonJSMin", "exports", "module", "mapCacheClear", "mapCacheDelete", "mapCacheGet", "mapCacheHas", "mapCacheSet", "MapCache", "entries", "index", "length", "entry", "require_stackSet", "__commonJSMin", "exports", "module", "ListCache", "Map", "MapCache", "LARGE_ARRAY_SIZE", "stackSet", "key", "value", "data", "pairs", "require_Stack", "__commonJSMin", "exports", "module", "ListCache", "stackClear", "stackDelete", "stackGet", "stackHas", "stackSet", "Stack", "entries", "data", "require_arrayEach", "__commonJSMin", "exports", "module", "arrayEach", "array", "iteratee", "index", "length", "require_defineProperty", "__commonJSMin", "exports", "module", "getNative", "defineProperty", "func", "require_baseAssignValue", "__commonJSMin", "exports", "module", "defineProperty", "baseAssignValue", "object", "key", "value", "require_assignValue", "__commonJSMin", "exports", "module", "baseAssignValue", "eq", "objectProto", "hasOwnProperty", "assignValue", "object", "key", "value", "objValue", "require_copyObject", "__commonJSMin", "exports", "module", "assignValue", "baseAssignValue", "copyObject", "source", "props", "object", "customizer", "isNew", "index", "length", "key", "newValue", "require_baseTimes", "__commonJSMin", "exports", "module", "baseTimes", "n", "iteratee", "index", "result", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "require_baseIsArguments", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "argsTag", "baseIsArguments", "value", "require_isArguments", "__commonJSMin", "exports", "module", "baseIsArguments", "isObjectLike", "objectProto", "hasOwnProperty", "propertyIsEnumerable", "isArguments", "value", "require_isArray", "__commonJSMin", "exports", "module", "isArray", "require_stubFalse", "__commonJSMin", "exports", "module", "stubFalse", "require_isBuffer", "__commonJSMin", "exports", "module", "root", "stubFalse", "freeExports", "freeModule", "moduleExports", "Buffer", "nativeIsBuffer", "isBuffer", "require_isIndex", "__commonJSMin", "exports", "module", "MAX_SAFE_INTEGER", "reIsUint", "isIndex", "value", "length", "type", "require_isLength", "__commonJSMin", "exports", "module", "MAX_SAFE_INTEGER", "isLength", "value", "require_baseIsTypedArray", "__commonJSMin", "exports", "module", "baseGetTag", "isLength", "isObjectLike", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "typedArrayTags", "baseIsTypedArray", "value", "require_baseUnary", "__commonJSMin", "exports", "module", "baseUnary", "func", "value", "require_nodeUtil", "__commonJSMin", "exports", "module", "freeGlobal", "freeExports", "freeModule", "moduleExports", "freeProcess", "nodeUtil", "types", "require_isTypedArray", "__commonJSMin", "exports", "module", "baseIsTypedArray", "baseUnary", "nodeUtil", "nodeIsTypedArray", "isTypedArray", "require_arrayLikeKeys", "__commonJSMin", "exports", "module", "baseTimes", "isArguments", "isArray", "isBuffer", "isIndex", "isTypedArray", "objectProto", "hasOwnProperty", "arrayLikeKeys", "value", "inherited", "isArr", "isArg", "isBuff", "isType", "skipIndexes", "result", "length", "key", "require_isPrototype", "__commonJSMin", "exports", "module", "objectProto", "isPrototype", "value", "Ctor", "proto", "require_overArg", "__commonJSMin", "exports", "module", "overArg", "func", "transform", "arg", "require_nativeKeys", "__commonJSMin", "exports", "module", "overArg", "nativeKeys", "require_baseKeys", "__commonJSMin", "exports", "module", "isPrototype", "nativeKeys", "objectProto", "hasOwnProperty", "baseKeys", "object", "result", "key", "require_isArrayLike", "__commonJSMin", "exports", "module", "isFunction", "isLength", "isArrayLike", "value", "require_keys", "__commonJSMin", "exports", "module", "arrayLikeKeys", "baseKeys", "isArrayLike", "keys", "object", "require_baseAssign", "__commonJSMin", "exports", "module", "copyObject", "keys", "baseAssign", "object", "source", "require_nativeKeysIn", "__commonJSMin", "exports", "module", "nativeKeysIn", "object", "result", "key", "require_baseKeysIn", "__commonJSMin", "exports", "module", "isObject", "isPrototype", "nativeKeysIn", "objectProto", "hasOwnProperty", "baseKeysIn", "object", "isProto", "result", "key", "require_keysIn", "__commonJSMin", "exports", "module", "arrayLikeKeys", "baseKeysIn", "isArrayLike", "keysIn", "object", "require_baseAssignIn", "__commonJSMin", "exports", "module", "copyObject", "keysIn", "baseAssignIn", "object", "source", "require_cloneBuffer", "__commonJSMin", "exports", "module", "root", "freeExports", "freeModule", "moduleExports", "Buffer", "allocUnsafe", "cloneBuffer", "buffer", "isDeep", "length", "result", "require_copyArray", "__commonJSMin", "exports", "module", "copyArray", "source", "array", "index", "length", "require_arrayFilter", "__commonJSMin", "exports", "module", "arrayFilter", "array", "predicate", "index", "length", "resIndex", "result", "value", "require_stubArray", "__commonJSMin", "exports", "module", "stubArray", "require_getSymbols", "__commonJSMin", "exports", "module", "arrayFilter", "stubArray", "objectProto", "propertyIsEnumerable", "nativeGetSymbols", "getSymbols", "object", "symbol", "require_copySymbols", "__commonJSMin", "exports", "module", "copyObject", "getSymbols", "copySymbols", "source", "object", "require_arrayPush", "__commonJSMin", "exports", "module", "arrayPush", "array", "values", "index", "length", "offset", "require_getPrototype", "__commonJSMin", "exports", "module", "overArg", "getPrototype", "require_getSymbolsIn", "__commonJSMin", "exports", "module", "arrayPush", "getPrototype", "getSymbols", "stubArray", "nativeGetSymbols", "getSymbolsIn", "object", "result", "require_copySymbolsIn", "__commonJSMin", "exports", "module", "copyObject", "getSymbolsIn", "copySymbolsIn", "source", "object", "require_baseGetAllKeys", "__commonJSMin", "exports", "module", "arrayPush", "isArray", "baseGetAllKeys", "object", "keysFunc", "symbolsFunc", "result", "require_getAllKeys", "__commonJSMin", "exports", "module", "baseGetAllKeys", "getSymbols", "keys", "getAllKeys", "object", "require_getAllKeysIn", "__commonJSMin", "exports", "module", "baseGetAllKeys", "getSymbolsIn", "keysIn", "getAllKeysIn", "object", "require_DataView", "__commonJSMin", "exports", "module", "getNative", "root", "DataView", "require_Promise", "__commonJSMin", "exports", "module", "getNative", "root", "Promise", "require_Set", "__commonJSMin", "exports", "module", "getNative", "root", "Set", "require_WeakMap", "__commonJSMin", "exports", "module", "getNative", "root", "WeakMap", "require_getTag", "__commonJSMin", "exports", "module", "DataView", "Map", "Promise", "Set", "WeakMap", "baseGetTag", "toSource", "mapTag", "objectTag", "promiseTag", "setTag", "weakMapTag", "dataViewTag", "dataViewCtorString", "mapCtorString", "promiseCtorString", "setCtorString", "weakMapCtorString", "getTag", "value", "result", "Ctor", "ctorString", "require_initCloneArray", "__commonJSMin", "exports", "module", "objectProto", "hasOwnProperty", "initCloneArray", "array", "length", "result", "require_Uint8Array", "__commonJSMin", "exports", "module", "root", "Uint8Array", "require_cloneArrayBuffer", "__commonJSMin", "exports", "module", "Uint8Array", "cloneArrayBuffer", "arrayBuffer", "result", "require_cloneDataView", "__commonJSMin", "exports", "module", "cloneArrayBuffer", "cloneDataView", "dataView", "isDeep", "buffer", "require_cloneRegExp", "__commonJSMin", "exports", "module", "reFlags", "cloneRegExp", "regexp", "result", "require_cloneSymbol", "__commonJSMin", "exports", "module", "Symbol", "symbolProto", "symbolValueOf", "cloneSymbol", "symbol", "require_cloneTypedArray", "__commonJSMin", "exports", "module", "cloneArrayBuffer", "cloneTypedArray", "typedArray", "isDeep", "buffer", "require_initCloneByTag", "__commonJSMin", "exports", "module", "cloneArrayBuffer", "cloneDataView", "cloneRegExp", "cloneSymbol", "cloneTypedArray", "boolTag", "dateTag", "mapTag", "numberTag", "regexpTag", "setTag", "stringTag", "symbolTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "initCloneByTag", "object", "tag", "isDeep", "Ctor", "require_baseCreate", "__commonJSMin", "exports", "module", "isObject", "objectCreate", "baseCreate", "object", "proto", "result", "require_initCloneObject", "__commonJSMin", "exports", "module", "baseCreate", "getPrototype", "isPrototype", "initCloneObject", "object", "require_baseIsMap", "__commonJSMin", "exports", "module", "getTag", "isObjectLike", "mapTag", "baseIsMap", "value", "require_isMap", "__commonJSMin", "exports", "module", "baseIsMap", "baseUnary", "nodeUtil", "nodeIsMap", "isMap", "require_baseIsSet", "__commonJSMin", "exports", "module", "getTag", "isObjectLike", "setTag", "baseIsSet", "value", "require_isSet", "__commonJSMin", "exports", "module", "baseIsSet", "baseUnary", "nodeUtil", "nodeIsSet", "isSet", "require_baseClone", "__commonJSMin", "exports", "module", "Stack", "arrayEach", "assignValue", "baseAssign", "baseAssignIn", "cloneBuffer", "copyArray", "copySymbols", "copySymbolsIn", "getAllKeys", "getAllKeysIn", "getTag", "initCloneArray", "initCloneByTag", "initCloneObject", "isArray", "isBuffer", "isMap", "isObject", "isSet", "keys", "keysIn", "CLONE_DEEP_FLAG", "CLONE_FLAT_FLAG", "CLONE_SYMBOLS_FLAG", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "genTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "symbolTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "cloneableTags", "baseClone", "value", "bitmask", "customizer", "key", "object", "stack", "result", "isDeep", "isFlat", "isFull", "isArr", "tag", "isFunc", "stacked", "subValue", "keysFunc", "props", "require_clone", "__commonJSMin", "exports", "module", "baseClone", "CLONE_SYMBOLS_FLAG", "clone", "value", "require_to_fast_properties", "__commonJSMin", "exports", "module", "fastProto", "FastObject", "o", "result", "require_isType", "__commonJSMin", "exports", "isType", "_definitions", "nodeType", "targetType", "aliases", "alias", "require_isPlaceholderType", "__commonJSMin", "exports", "isPlaceholderType", "_definitions", "placeholderType", "targetType", "aliases", "alias", "require_is", "__commonJSMin", "exports", "is", "_shallowEqual", "_interopRequireDefault", "_isType", "_isPlaceholderType", "_definitions", "obj", "type", "node", "opts", "require_identifier", "__commonJSMin", "exports", "isIdentifierStart", "isIdentifierChar", "isIdentifierName", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "code", "set", "pos", "i", "length", "name", "isFirst", "_i", "_Array$from", "cp", "require_keyword", "__commonJSMin", "exports", "isReservedWord", "isStrictReservedWord", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "reservedWords", "keywords", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "word", "inModule", "require_lib", "__commonJSMin", "exports", "_identifier", "_keyword", "require_isValidIdentifier", "__commonJSMin", "exports", "isValidIdentifier", "_helperValidatorIdentifier", "name", "reserved", "require_constants", "__commonJSMin", "exports", "STATEMENT_OR_BLOCK_KEYS", "FLATTENABLE_KEYS", "FOR_INIT_KEYS", "COMMENT_KEYS", "LOGICAL_OPERATORS", "UPDATE_OPERATORS", "BOOLEAN_NUMBER_BINARY_OPERATORS", "EQUALITY_BINARY_OPERATORS", "COMPARISON_BINARY_OPERATORS", "BOOLEAN_BINARY_OPERATORS", "NUMBER_BINARY_OPERATORS", "BINARY_OPERATORS", "ASSIGNMENT_OPERATORS", "op", "BOOLEAN_UNARY_OPERATORS", "NUMBER_UNARY_OPERATORS", "STRING_UNARY_OPERATORS", "UNARY_OPERATORS", "INHERIT_KEYS", "BLOCK_SCOPED_SYMBOL", "NOT_LOCAL_BINDING", "require_validate", "__commonJSMin", "exports", "validate", "validateField", "validateChild", "_definitions", "node", "key", "val", "fields", "field", "require_utils", "__commonJSMin", "exports", "validate", "typeIs", "validateType", "validateOptional", "validateOptionalType", "arrayOf", "arrayOfType", "validateArrayOfType", "assertEach", "assertOneOf", "assertNodeType", "assertNodeOrValueType", "assertValueType", "assertShape", "assertOptionalChainStart", "chain", "defineType", "_is", "_interopRequireDefault", "_validate", "obj", "VISITOR_KEYS", "ALIAS_KEYS", "FLIPPED_ALIAS_KEYS", "NODE_FIELDS", "BUILDER_KEYS", "DEPRECATED_KEYS", "NODE_PARENT_VALIDATIONS", "getType", "val", "typeName", "elementType", "callback", "validator", "node", "key", "i", "subkey", "v", "values", "types", "type", "shape", "errors", "property", "error", "_current", "current", "fns", "args", "fn", "validTypeOpts", "validFieldKeys", "opts", "inherits", "store", "fields", "keys", "field", "visitor", "aliases", "builder", "k", "alias", "require_core", "__commonJSMin", "exports", "_is", "_interopRequireDefault", "_isValidIdentifier", "_helperValidatorIdentifier", "_constants", "_utils", "_interopRequireWildcard", "_getRequireWildcardCache", "cache", "obj", "newObj", "hasPropertyDescriptor", "key", "desc", "identifier", "pattern", "node", "val", "expression", "inOp", "validator", "functionCommon", "functionTypeAnnotationCommon", "functionDeclarationCommon", "parent", "patternLikeCommon", "match", "parentKey", "nonComp", "invalid", "normal", "computed", "listKey", "index", "without", "sourced", "sourceless", "declaration", "lval", "property", "classMethodOrPropertyCommon", "classMethodOrDeclareMethodCommon", "require_flow", "__commonJSMin", "_utils", "_interopRequireWildcard", "_getRequireWildcardCache", "cache", "obj", "newObj", "hasPropertyDescriptor", "key", "desc", "defineInterfaceishType", "name", "typeParameterType", "require_jsx", "__commonJSMin", "_utils", "_interopRequireWildcard", "_getRequireWildcardCache", "cache", "obj", "newObj", "hasPropertyDescriptor", "key", "desc", "require_placeholders", "__commonJSMin", "exports", "_utils", "PLACEHOLDERS", "PLACEHOLDERS_ALIAS", "type", "alias", "PLACEHOLDERS_FLIPPED_ALIAS", "require_misc", "__commonJSMin", "_utils", "_interopRequireWildcard", "_placeholders", "_getRequireWildcardCache", "cache", "obj", "newObj", "hasPropertyDescriptor", "key", "desc", "require_experimental", "__commonJSMin", "_utils", "_interopRequireWildcard", "_core", "_getRequireWildcardCache", "cache", "obj", "newObj", "hasPropertyDescriptor", "key", "desc", "require_typescript", "__commonJSMin", "_utils", "_interopRequireWildcard", "_core", "_getRequireWildcardCache", "cache", "obj", "newObj", "hasPropertyDescriptor", "key", "desc", "bool", "tSFunctionTypeAnnotationCommon", "signatureDeclarationCommon", "callConstructSignatureDeclaration", "namedTypeElementCommon", "tsKeywordTypes", "type", "fnOrCtr", "unionOrIntersection", "require_definitions", "__commonJSMin", "exports", "_utils", "_placeholders", "_toFastProperties", "_interopRequireDefault", "obj", "TYPES", "require_builder", "__commonJSMin", "exports", "builder", "_clone", "_interopRequireDefault", "_definitions", "_validate", "obj", "type", "args", "keys", "countArgs", "node", "i", "key", "field", "arg", "require_generated", "__commonJSMin", "exports", "arrayExpression", "assignmentExpression", "binaryExpression", "interpreterDirective", "directive", "directiveLiteral", "blockStatement", "breakStatement", "callExpression", "catchClause", "conditionalExpression", "continueStatement", "debuggerStatement", "doWhileStatement", "emptyStatement", "expressionStatement", "file", "forInStatement", "forStatement", "functionDeclaration", "functionExpression", "identifier", "ifStatement", "labeledStatement", "stringLiteral", "numericLiteral", "nullLiteral", "booleanLiteral", "regExpLiteral", "logicalExpression", "memberExpression", "newExpression", "program", "objectExpression", "objectMethod", "objectProperty", "restElement", "returnStatement", "sequenceExpression", "parenthesizedExpression", "switchCase", "switchStatement", "thisExpression", "throwStatement", "tryStatement", "unaryExpression", "updateExpression", "variableDeclaration", "variableDeclarator", "whileStatement", "withStatement", "assignmentPattern", "arrayPattern", "arrowFunctionExpression", "classBody", "classExpression", "classDeclaration", "exportAllDeclaration", "exportDefaultDeclaration", "exportNamedDeclaration", "exportSpecifier", "forOfStatement", "importDeclaration", "importDefaultSpecifier", "importNamespaceSpecifier", "importSpecifier", "metaProperty", "classMethod", "objectPattern", "spreadElement", "_super", "taggedTemplateExpression", "templateElement", "templateLiteral", "yieldExpression", "awaitExpression", "_import", "bigIntLiteral", "exportNamespaceSpecifier", "optionalMemberExpression", "optionalCallExpression", "anyTypeAnnotation", "arrayTypeAnnotation", "booleanTypeAnnotation", "booleanLiteralTypeAnnotation", "nullLiteralTypeAnnotation", "classImplements", "declareClass", "declareFunction", "declareInterface", "declareModule", "declareModuleExports", "declareTypeAlias", "declareOpaqueType", "declareVariable", "declareExportDeclaration", "declareExportAllDeclaration", "declaredPredicate", "existsTypeAnnotation", "functionTypeAnnotation", "functionTypeParam", "genericTypeAnnotation", "inferredPredicate", "interfaceExtends", "interfaceDeclaration", "interfaceTypeAnnotation", "intersectionTypeAnnotation", "mixedTypeAnnotation", "emptyTypeAnnotation", "nullableTypeAnnotation", "numberLiteralTypeAnnotation", "numberTypeAnnotation", "objectTypeAnnotation", "objectTypeInternalSlot", "objectTypeCallProperty", "objectTypeIndexer", "objectTypeProperty", "objectTypeSpreadProperty", "opaqueType", "qualifiedTypeIdentifier", "stringLiteralTypeAnnotation", "stringTypeAnnotation", "symbolTypeAnnotation", "thisTypeAnnotation", "tupleTypeAnnotation", "typeofTypeAnnotation", "typeAlias", "typeAnnotation", "typeCastExpression", "typeParameter", "typeParameterDeclaration", "typeParameterInstantiation", "unionTypeAnnotation", "variance", "voidTypeAnnotation", "enumDeclaration", "enumBooleanBody", "enumNumberBody", "enumStringBody", "enumSymbolBody", "enumBooleanMember", "enumNumberMember", "enumStringMember", "enumDefaultedMember", "jsxAttribute", "jsxClosingElement", "jsxElement", "jsxEmptyExpression", "jsxExpressionContainer", "jsxSpreadChild", "jsxIdentifier", "jsxMemberExpression", "jsxNamespacedName", "jsxOpeningElement", "jsxSpreadAttribute", "jsxText", "jsxFragment", "jsxOpeningFragment", "jsxClosingFragment", "noop", "placeholder", "v8IntrinsicIdentifier", "argumentPlaceholder", "bindExpression", "classProperty", "pipelineTopicExpression", "pipelineBareFunction", "pipelinePrimaryTopicReference", "classPrivateProperty", "classPrivateMethod", "importAttribute", "decorator", "doExpression", "exportDefaultSpecifier", "privateName", "recordExpression", "tupleExpression", "decimalLiteral", "staticBlock", "tsParameterProperty", "tsDeclareFunction", "tsDeclareMethod", "tsQualifiedName", "tsCallSignatureDeclaration", "tsConstructSignatureDeclaration", "tsPropertySignature", "tsMethodSignature", "tsIndexSignature", "tsAnyKeyword", "tsBooleanKeyword", "tsBigIntKeyword", "tsIntrinsicKeyword", "tsNeverKeyword", "tsNullKeyword", "tsNumberKeyword", "tsObjectKeyword", "tsStringKeyword", "tsSymbolKeyword", "tsUndefinedKeyword", "tsUnknownKeyword", "tsVoidKeyword", "tsThisType", "tsFunctionType", "tsConstructorType", "tsTypeReference", "tsTypePredicate", "tsTypeQuery", "tsTypeLiteral", "tsArrayType", "tsTupleType", "tsOptionalType", "tsRestType", "tsNamedTupleMember", "tsUnionType", "tsIntersectionType", "tsConditionalType", "tsInferType", "tsParenthesizedType", "tsTypeOperator", "tsIndexedAccessType", "tsMappedType", "tsLiteralType", "tsExpressionWithTypeArguments", "tsInterfaceDeclaration", "tsInterfaceBody", "tsTypeAliasDeclaration", "tsAsExpression", "tsTypeAssertion", "tsEnumDeclaration", "tsEnumMember", "tsModuleDeclaration", "tsModuleBlock", "tsImportType", "tsImportEqualsDeclaration", "tsExternalModuleReference", "tsNonNullExpression", "tsExportAssignment", "tsNamespaceExportDeclaration", "tsTypeAnnotation", "tsTypeParameterInstantiation", "tsTypeParameterDeclaration", "tsTypeParameter", "NumberLiteral", "RegexLiteral", "RestProperty", "SpreadProperty", "_builder", "_interopRequireDefault", "obj", "args", "require_cleanJSXElementLiteralChild", "__commonJSMin", "exports", "cleanJSXElementLiteralChild", "_generated", "child", "args", "lines", "lastNonEmptyLine", "i", "str", "line", "isFirstLine", "isLastLine", "isLastNonEmptyLine", "trimmedLine", "require_buildChildren", "__commonJSMin", "exports", "buildChildren", "_generated", "_cleanJSXElementLiteralChild", "_interopRequireDefault", "obj", "node", "elements", "i", "child", "require_isNode", "__commonJSMin", "exports", "isNode", "_definitions", "node", "require_assertNode", "__commonJSMin", "exports", "assertNode", "_isNode", "_interopRequireDefault", "obj", "node", "_node$type", "type", "require_generated", "__commonJSMin", "exports", "assertArrayExpression", "assertAssignmentExpression", "assertBinaryExpression", "assertInterpreterDirective", "assertDirective", "assertDirectiveLiteral", "assertBlockStatement", "assertBreakStatement", "assertCallExpression", "assertCatchClause", "assertConditionalExpression", "assertContinueStatement", "assertDebuggerStatement", "assertDoWhileStatement", "assertEmptyStatement", "assertExpressionStatement", "assertFile", "assertForInStatement", "assertForStatement", "assertFunctionDeclaration", "assertFunctionExpression", "assertIdentifier", "assertIfStatement", "assertLabeledStatement", "assertStringLiteral", "assertNumericLiteral", "assertNullLiteral", "assertBooleanLiteral", "assertRegExpLiteral", "assertLogicalExpression", "assertMemberExpression", "assertNewExpression", "assertProgram", "assertObjectExpression", "assertObjectMethod", "assertObjectProperty", "assertRestElement", "assertReturnStatement", "assertSequenceExpression", "assertParenthesizedExpression", "assertSwitchCase", "assertSwitchStatement", "assertThisExpression", "assertThrowStatement", "assertTryStatement", "assertUnaryExpression", "assertUpdateExpression", "assertVariableDeclaration", "assertVariableDeclarator", "assertWhileStatement", "assertWithStatement", "assertAssignmentPattern", "assertArrayPattern", "assertArrowFunctionExpression", "assertClassBody", "assertClassExpression", "assertClassDeclaration", "assertExportAllDeclaration", "assertExportDefaultDeclaration", "assertExportNamedDeclaration", "assertExportSpecifier", "assertForOfStatement", "assertImportDeclaration", "assertImportDefaultSpecifier", "assertImportNamespaceSpecifier", "assertImportSpecifier", "assertMetaProperty", "assertClassMethod", "assertObjectPattern", "assertSpreadElement", "assertSuper", "assertTaggedTemplateExpression", "assertTemplateElement", "assertTemplateLiteral", "assertYieldExpression", "assertAwaitExpression", "assertImport", "assertBigIntLiteral", "assertExportNamespaceSpecifier", "assertOptionalMemberExpression", "assertOptionalCallExpression", "assertAnyTypeAnnotation", "assertArrayTypeAnnotation", "assertBooleanTypeAnnotation", "assertBooleanLiteralTypeAnnotation", "assertNullLiteralTypeAnnotation", "assertClassImplements", "assertDeclareClass", "assertDeclareFunction", "assertDeclareInterface", "assertDeclareModule", "assertDeclareModuleExports", "assertDeclareTypeAlias", "assertDeclareOpaqueType", "assertDeclareVariable", "assertDeclareExportDeclaration", "assertDeclareExportAllDeclaration", "assertDeclaredPredicate", "assertExistsTypeAnnotation", "assertFunctionTypeAnnotation", "assertFunctionTypeParam", "assertGenericTypeAnnotation", "assertInferredPredicate", "assertInterfaceExtends", "assertInterfaceDeclaration", "assertInterfaceTypeAnnotation", "assertIntersectionTypeAnnotation", "assertMixedTypeAnnotation", "assertEmptyTypeAnnotation", "assertNullableTypeAnnotation", "assertNumberLiteralTypeAnnotation", "assertNumberTypeAnnotation", "assertObjectTypeAnnotation", "assertObjectTypeInternalSlot", "assertObjectTypeCallProperty", "assertObjectTypeIndexer", "assertObjectTypeProperty", "assertObjectTypeSpreadProperty", "assertOpaqueType", "assertQualifiedTypeIdentifier", "assertStringLiteralTypeAnnotation", "assertStringTypeAnnotation", "assertSymbolTypeAnnotation", "assertThisTypeAnnotation", "assertTupleTypeAnnotation", "assertTypeofTypeAnnotation", "assertTypeAlias", "assertTypeAnnotation", "assertTypeCastExpression", "assertTypeParameter", "assertTypeParameterDeclaration", "assertTypeParameterInstantiation", "assertUnionTypeAnnotation", "assertVariance", "assertVoidTypeAnnotation", "assertEnumDeclaration", "assertEnumBooleanBody", "assertEnumNumberBody", "assertEnumStringBody", "assertEnumSymbolBody", "assertEnumBooleanMember", "assertEnumNumberMember", "assertEnumStringMember", "assertEnumDefaultedMember", "assertJSXAttribute", "assertJSXClosingElement", "assertJSXElement", "assertJSXEmptyExpression", "assertJSXExpressionContainer", "assertJSXSpreadChild", "assertJSXIdentifier", "assertJSXMemberExpression", "assertJSXNamespacedName", "assertJSXOpeningElement", "assertJSXSpreadAttribute", "assertJSXText", "assertJSXFragment", "assertJSXOpeningFragment", "assertJSXClosingFragment", "assertNoop", "assertPlaceholder", "assertV8IntrinsicIdentifier", "assertArgumentPlaceholder", "assertBindExpression", "assertClassProperty", "assertPipelineTopicExpression", "assertPipelineBareFunction", "assertPipelinePrimaryTopicReference", "assertClassPrivateProperty", "assertClassPrivateMethod", "assertImportAttribute", "assertDecorator", "assertDoExpression", "assertExportDefaultSpecifier", "assertPrivateName", "assertRecordExpression", "assertTupleExpression", "assertDecimalLiteral", "assertStaticBlock", "assertTSParameterProperty", "assertTSDeclareFunction", "assertTSDeclareMethod", "assertTSQualifiedName", "assertTSCallSignatureDeclaration", "assertTSConstructSignatureDeclaration", "assertTSPropertySignature", "assertTSMethodSignature", "assertTSIndexSignature", "assertTSAnyKeyword", "assertTSBooleanKeyword", "assertTSBigIntKeyword", "assertTSIntrinsicKeyword", "assertTSNeverKeyword", "assertTSNullKeyword", "assertTSNumberKeyword", "assertTSObjectKeyword", "assertTSStringKeyword", "assertTSSymbolKeyword", "assertTSUndefinedKeyword", "assertTSUnknownKeyword", "assertTSVoidKeyword", "assertTSThisType", "assertTSFunctionType", "assertTSConstructorType", "assertTSTypeReference", "assertTSTypePredicate", "assertTSTypeQuery", "assertTSTypeLiteral", "assertTSArrayType", "assertTSTupleType", "assertTSOptionalType", "assertTSRestType", "assertTSNamedTupleMember", "assertTSUnionType", "assertTSIntersectionType", "assertTSConditionalType", "assertTSInferType", "assertTSParenthesizedType", "assertTSTypeOperator", "assertTSIndexedAccessType", "assertTSMappedType", "assertTSLiteralType", "assertTSExpressionWithTypeArguments", "assertTSInterfaceDeclaration", "assertTSInterfaceBody", "assertTSTypeAliasDeclaration", "assertTSAsExpression", "assertTSTypeAssertion", "assertTSEnumDeclaration", "assertTSEnumMember", "assertTSModuleDeclaration", "assertTSModuleBlock", "assertTSImportType", "assertTSImportEqualsDeclaration", "assertTSExternalModuleReference", "assertTSNonNullExpression", "assertTSExportAssignment", "assertTSNamespaceExportDeclaration", "assertTSTypeAnnotation", "assertTSTypeParameterInstantiation", "assertTSTypeParameterDeclaration", "assertTSTypeParameter", "assertExpression", "assertBinary", "assertScopable", "assertBlockParent", "assertBlock", "assertStatement", "assertTerminatorless", "assertCompletionStatement", "assertConditional", "assertLoop", "assertWhile", "assertExpressionWrapper", "assertFor", "assertForXStatement", "assertFunction", "assertFunctionParent", "assertPureish", "assertDeclaration", "assertPatternLike", "assertLVal", "assertTSEntityName", "assertLiteral", "assertImmutable", "assertUserWhitespacable", "assertMethod", "assertObjectMember", "assertProperty", "assertUnaryLike", "assertPattern", "assertClass", "assertModuleDeclaration", "assertExportDeclaration", "assertModuleSpecifier", "assertFlow", "assertFlowType", "assertFlowBaseAnnotation", "assertFlowDeclaration", "assertFlowPredicate", "assertEnumBody", "assertEnumMember", "assertJSX", "assertPrivate", "assertTSTypeElement", "assertTSType", "assertTSBaseType", "assertNumberLiteral", "assertRegexLiteral", "assertRestProperty", "assertSpreadProperty", "_is", "_interopRequireDefault", "obj", "assert", "type", "node", "opts", "require_createTypeAnnotationBasedOnTypeof", "__commonJSMin", "exports", "createTypeAnnotationBasedOnTypeof", "_generated", "type", "require_removeTypeDuplicates", "__commonJSMin", "exports", "removeTypeDuplicates", "_generated", "nodes", "generics", "bases", "typeGroups", "types", "i", "node", "name", "existing", "type", "require_createFlowUnionType", "__commonJSMin", "exports", "createFlowUnionType", "_generated", "_removeTypeDuplicates", "_interopRequireDefault", "obj", "types", "flattened", "require_removeTypeDuplicates", "__commonJSMin", "exports", "removeTypeDuplicates", "_generated", "nodes", "generics", "bases", "typeGroups", "types", "i", "node", "type", "name", "require_createTSUnionType", "__commonJSMin", "exports", "createTSUnionType", "_generated", "_removeTypeDuplicates", "_interopRequireDefault", "obj", "typeAnnotations", "types", "type", "flattened", "require_cloneNode", "__commonJSMin", "exports", "cloneNode", "_definitions", "has", "cloneIfNode", "obj", "deep", "withoutLoc", "cloneIfNodeOrArray", "node", "type", "newNode", "field", "maybeCloneComments", "cloneCommentsWithoutLoc", "comments", "value", "require_clone", "__commonJSMin", "exports", "clone", "_cloneNode", "_interopRequireDefault", "obj", "node", "require_cloneDeep", "__commonJSMin", "exports", "cloneDeep", "_cloneNode", "_interopRequireDefault", "obj", "node", "require_cloneDeepWithoutLoc", "__commonJSMin", "exports", "cloneDeepWithoutLoc", "_cloneNode", "_interopRequireDefault", "obj", "node", "require_cloneWithoutLoc", "__commonJSMin", "exports", "cloneWithoutLoc", "_cloneNode", "_interopRequireDefault", "obj", "node", "require_addComments", "__commonJSMin", "exports", "addComments", "node", "type", "comments", "key", "require_addComment", "__commonJSMin", "exports", "addComment", "_addComments", "_interopRequireDefault", "obj", "node", "type", "content", "line", "require_inherit", "__commonJSMin", "exports", "inherit", "key", "child", "parent", "require_inheritInnerComments", "__commonJSMin", "exports", "inheritInnerComments", "_inherit", "_interopRequireDefault", "obj", "child", "parent", "require_inheritLeadingComments", "__commonJSMin", "exports", "inheritLeadingComments", "_inherit", "_interopRequireDefault", "obj", "child", "parent", "require_inheritTrailingComments", "__commonJSMin", "exports", "inheritTrailingComments", "_inherit", "_interopRequireDefault", "obj", "child", "parent", "require_inheritsComments", "__commonJSMin", "exports", "inheritsComments", "_inheritTrailingComments", "_interopRequireDefault", "_inheritLeadingComments", "_inheritInnerComments", "obj", "child", "parent", "require_removeComments", "__commonJSMin", "exports", "removeComments", "_constants", "node", "key", "require_generated", "__commonJSMin", "exports", "_definitions", "EXPRESSION_TYPES", "BINARY_TYPES", "SCOPABLE_TYPES", "BLOCKPARENT_TYPES", "BLOCK_TYPES", "STATEMENT_TYPES", "TERMINATORLESS_TYPES", "COMPLETIONSTATEMENT_TYPES", "CONDITIONAL_TYPES", "LOOP_TYPES", "WHILE_TYPES", "EXPRESSIONWRAPPER_TYPES", "FOR_TYPES", "FORXSTATEMENT_TYPES", "FUNCTION_TYPES", "FUNCTIONPARENT_TYPES", "PUREISH_TYPES", "DECLARATION_TYPES", "PATTERNLIKE_TYPES", "LVAL_TYPES", "TSENTITYNAME_TYPES", "LITERAL_TYPES", "IMMUTABLE_TYPES", "USERWHITESPACABLE_TYPES", "METHOD_TYPES", "OBJECTMEMBER_TYPES", "PROPERTY_TYPES", "UNARYLIKE_TYPES", "PATTERN_TYPES", "CLASS_TYPES", "MODULEDECLARATION_TYPES", "EXPORTDECLARATION_TYPES", "MODULESPECIFIER_TYPES", "FLOW_TYPES", "FLOWTYPE_TYPES", "FLOWBASEANNOTATION_TYPES", "FLOWDECLARATION_TYPES", "FLOWPREDICATE_TYPES", "ENUMBODY_TYPES", "ENUMMEMBER_TYPES", "JSX_TYPES", "PRIVATE_TYPES", "TSTYPEELEMENT_TYPES", "TSTYPE_TYPES", "TSBASETYPE_TYPES", "require_toBlock", "__commonJSMin", "exports", "toBlock", "_generated", "_generated2", "node", "parent", "blockNodes", "require_ensureBlock", "__commonJSMin", "exports", "ensureBlock", "_toBlock", "_interopRequireDefault", "obj", "node", "key", "require_toIdentifier", "__commonJSMin", "exports", "toIdentifier", "_isValidIdentifier", "_interopRequireDefault", "obj", "name", "match", "c", "require_toBindingIdentifierName", "__commonJSMin", "exports", "toBindingIdentifierName", "_toIdentifier", "_interopRequireDefault", "obj", "name", "require_toComputedKey", "__commonJSMin", "exports", "toComputedKey", "_generated", "_generated2", "node", "key", "require_toExpression", "__commonJSMin", "exports", "toExpression", "_generated", "node", "require_traverseFast", "__commonJSMin", "exports", "traverseFast", "_definitions", "node", "enter", "opts", "keys", "key", "subNode", "require_removeProperties", "__commonJSMin", "exports", "removeProperties", "_constants", "CLEAR_KEYS", "CLEAR_KEYS_PLUS_COMMENTS", "node", "opts", "map", "key", "symbols", "sym", "require_removePropertiesDeep", "__commonJSMin", "exports", "removePropertiesDeep", "_traverseFast", "_interopRequireDefault", "_removeProperties", "obj", "tree", "opts", "require_toKeyAlias", "__commonJSMin", "exports", "toKeyAlias", "_generated", "_cloneNode", "_interopRequireDefault", "_removePropertiesDeep", "obj", "node", "key", "alias", "require_getBindingIdentifiers", "__commonJSMin", "exports", "getBindingIdentifiers", "_generated", "node", "duplicates", "outerOnly", "search", "ids", "id", "keys", "i", "key", "require_gatherSequenceExpressions", "__commonJSMin", "exports", "gatherSequenceExpressions", "_getBindingIdentifiers", "_interopRequireDefault", "_generated", "_generated2", "_cloneNode", "obj", "nodes", "scope", "declars", "exprs", "ensureLastUndefined", "node", "declar", "bindings", "key", "consequent", "alternate", "body", "require_toSequenceExpression", "__commonJSMin", "exports", "toSequenceExpression", "_gatherSequenceExpressions", "_interopRequireDefault", "obj", "nodes", "scope", "declars", "result", "declar", "require_toStatement", "__commonJSMin", "exports", "toStatement", "_generated", "_generated2", "node", "ignore", "mustHaveId", "newType", "require_isPlainObject", "__commonJSMin", "exports", "module", "baseGetTag", "getPrototype", "isObjectLike", "objectTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "objectCtorString", "isPlainObject", "value", "proto", "Ctor", "require_baseIsRegExp", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "regexpTag", "baseIsRegExp", "value", "require_isRegExp", "__commonJSMin", "exports", "module", "baseIsRegExp", "baseUnary", "nodeUtil", "nodeIsRegExp", "isRegExp", "require_valueToNode", "__commonJSMin", "exports", "valueToNode", "_isPlainObject", "_interopRequireDefault", "_isRegExp", "_isValidIdentifier", "_generated", "obj", "value", "result", "numerator", "pattern", "flags", "props", "key", "nodeKey", "require_appendToMemberExpression", "__commonJSMin", "exports", "appendToMemberExpression", "_generated", "member", "append", "computed", "require_inherits", "__commonJSMin", "exports", "inherits", "_constants", "_inheritsComments", "_interopRequireDefault", "obj", "child", "parent", "key", "require_prependToMemberExpression", "__commonJSMin", "exports", "prependToMemberExpression", "_generated", "member", "prepend", "require_getOuterBindingIdentifiers", "__commonJSMin", "exports", "getOuterBindingIdentifiers", "_getBindingIdentifiers", "_interopRequireDefault", "obj", "node", "duplicates", "require_traverse", "__commonJSMin", "exports", "traverse", "_definitions", "node", "handlers", "state", "enter", "exit", "traverseSimpleImpl", "ancestors", "keys", "key", "subNode", "i", "child", "require_isBinding", "__commonJSMin", "exports", "isBinding", "_getBindingIdentifiers", "_interopRequireDefault", "obj", "node", "parent", "grandparent", "keys", "key", "val", "require_isLet", "__commonJSMin", "exports", "isLet", "_generated", "_constants", "node", "require_isBlockScoped", "__commonJSMin", "exports", "isBlockScoped", "_generated", "_isLet", "_interopRequireDefault", "obj", "node", "require_isImmutable", "__commonJSMin", "exports", "isImmutable", "_isType", "_interopRequireDefault", "_generated", "obj", "node", "require_isNodesEquivalent", "__commonJSMin", "exports", "isNodesEquivalent", "_definitions", "a", "b", "fields", "visitorKeys", "field", "i", "key", "require_isReferenced", "__commonJSMin", "exports", "isReferenced", "node", "parent", "grandparent", "require_isScope", "__commonJSMin", "exports", "isScope", "_generated", "node", "parent", "require_isSpecifierDefault", "__commonJSMin", "exports", "isSpecifierDefault", "_generated", "specifier", "require_isValidES3Identifier", "__commonJSMin", "exports", "isValidES3Identifier", "_isValidIdentifier", "_interopRequireDefault", "obj", "RESERVED_WORDS_ES3_ONLY", "name", "require_isVar", "__commonJSMin", "exports", "isVar", "_generated", "_constants", "node", "require_lib", "__commonJSMin", "exports", "_exportNames", "_assertNode", "_createTypeAnnotationBasedOnTypeof", "_createFlowUnionType", "_createTSUnionType", "_cloneNode", "_clone", "_cloneDeep", "_cloneDeepWithoutLoc", "_cloneWithoutLoc", "_addComment", "_addComments", "_inheritInnerComments", "_inheritLeadingComments", "_inheritsComments", "_inheritTrailingComments", "_removeComments", "_ensureBlock", "_toBindingIdentifierName", "_toBlock", "_toComputedKey", "_toExpression", "_toIdentifier", "_toKeyAlias", "_toSequenceExpression", "_toStatement", "_valueToNode", "_appendToMemberExpression", "_inherits", "_prependToMemberExpression", "_removeProperties", "_removePropertiesDeep", "_removeTypeDuplicates", "_getBindingIdentifiers", "_getOuterBindingIdentifiers", "_traverse", "_traverseFast", "_shallowEqual", "_is", "_isBinding", "_isBlockScoped", "_isImmutable", "_isLet", "_isNode", "_isNodesEquivalent", "_isPlaceholderType", "_isReferenced", "_isScope", "_isSpecifierDefault", "_isType", "_isValidES3Identifier", "_isValidIdentifier", "_isVar", "_matchesPattern", "_validate", "_buildMatchMemberExpression", "_isReactComponent", "_interopRequireDefault", "_isCompatTag", "_buildChildren", "_generated", "key", "_generated2", "_generated3", "_constants", "_definitions", "_generated4", "obj", "react", "require_node_ipc", "__commonJSMin", "exports", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__defNormalProp", "obj", "key", "value", "__markAsModule", "target", "__commonJS", "cb", "mod", "__export", "all", "name", "__reExport", "module2", "desc", "__toModule", "__publicField", "__accessCheck", "member", "msg", "__privateGet", "getter", "__privateAdd", "require_Message", "Message3", "getData", "setData", "getType", "setType", "parse", "getJSON", "type", "data", "message", "err", "badMessage", "require_queue", "Queue2", "asStack", "addToQueue", "run", "clearQueue", "getQueue", "setQueue", "queue", "running", "stop", "val", "i", "IPCModule", "singleton", "import_os", "Defaults", "getIPType", "networkInterfaces", "IPType", "import_net", "import_tls", "Parser", "config", "events", "import_js_message", "import_fs", "import_js_queue", "Fake", "FakeCore", "Is", "strict", "valueType", "expectedType", "constructor", "targetValue", "typeName", "typesString", "types", "weakIs", "pass", "is", "_handleOnce", "_all", "_once", "_events", "EventPubSub", "handlers", "args", "deleteOnceHandled", "handler", "once", "globalHandlers", "eventParser", "Client", "log2", "connect", "emit", "syncEmit", "client", "options", "eCount", "import_net2", "import_tls2", "import_fs2", "import_dgram", "import_js_message2", "eventParser2", "Server", "path", "port", "emit2", "broadcast", "serverClosed", "socket", "startServer", "count", "destroyedSocketId", "gotData", "UDPSocket", "sock", "socketClosed", "serverCreated", "rinfo", "startTLSServer", "UDPWrite", "bytes", "err2", "import_util", "IPC", "connect2", "connectNet", "disconnect", "serve", "serveNet", "log", "id", "callback", "emptyCallback", "host", "UDPType2", "Reflect", "factory", "root", "exporter", "makeExporter", "target", "previous", "key", "value", "hasOwn", "supportsSymbol", "toPrimitiveSymbol", "iteratorSymbol", "supportsCreate", "supportsProto", "downLevel", "HashMap", "MakeDictionary", "map", "functionPrototype", "usePolyfill", "_Map", "CreateMapPolyfill", "_Set", "CreateSetPolyfill", "_WeakMap", "CreateWeakMapPolyfill", "Metadata", "decorate", "decorators", "propertyKey", "attributes", "IsUndefined", "IsArray", "IsConstructor", "DecorateConstructor", "IsObject", "IsNull", "ToPropertyKey", "DecorateProperty", "metadata", "metadataKey", "metadataValue", "decorator", "IsPropertyKey", "OrdinaryDefineOwnMetadata", "defineMetadata", "hasMetadata", "OrdinaryHasMetadata", "hasOwnMetadata", "OrdinaryHasOwnMetadata", "getMetadata", "OrdinaryGetMetadata", "getOwnMetadata", "OrdinaryGetOwnMetadata", "getMetadataKeys", "OrdinaryMetadataKeys", "getOwnMetadataKeys", "OrdinaryOwnMetadataKeys", "deleteMetadata", "metadataMap", "GetOrCreateMetadataMap", "targetMetadata", "i", "decorated", "descriptor", "O", "P", "Create", "MetadataKey", "parent", "OrdinaryGetPrototypeOf", "ToBoolean", "MetadataValue", "ownKeys", "parentKeys", "set", "keys", "_i", "ownKeys_1", "hasKey", "_a", "parentKeys_1", "keysObj", "iterator", "GetIterator", "k", "next", "IteratorStep", "nextValue", "IteratorValue", "e", "IteratorClose", "Type", "x", "IsSymbol", "ToPrimitive", "input", "PreferredType", "hint", "exoticToPrim", "GetMethod", "result", "OrdinaryToPrimitive", "toString_1", "IsCallable", "valueOf", "toString_2", "argument", "ToString", "V", "func", "obj", "method", "iterResult", "f", "proto", "prototype", "prototypeProto", "constructor", "cacheSentinel", "arraySentinel", "MapIterator", "values", "selector", "index", "error", "Map", "size", "getKey", "getValue", "getEntry", "insert", "_", "Set", "UUID_SIZE", "rootKey", "CreateUniqueKey", "WeakMap", "table", "GetOrCreateWeakMapTable", "CreateUUID", "create", "FillRandomBytes", "buffer", "GenRandomBytes", "data", "offset", "byte", "charToInteger", "chars", "i", "decode", "mappings", "decoded", "line", "segment", "j", "shift", "value", "c", "segmentify", "integer", "hasContinuationBit", "shouldNegate", "encode", "sourceFileIndex", "sourceCodeLine", "sourceCodeColumn", "nameIndex", "generatedCodeColumn", "lineMappings", "_i", "line_1", "segmentMappings", "encodeInteger", "num", "result", "clamped", "import_tslib", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__createBinding", "__values", "__read", "__spread", "__spreadArrays", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "tslib", "SessionStatus", "Severity", "fromString", "level", "Status", "fromHttpCode", "code", "forget", "promise", "isError", "wat", "isInstanceOf", "isString", "wat", "isPrimitive", "isPlainObject", "isEvent", "isInstanceOf", "isElement", "isRegExp", "isThenable", "isSyntheticEvent", "base", "htmlTreeAsString", "elem", "currentElem", "MAX_TRAVERSE_HEIGHT", "MAX_OUTPUT_LEN", "out", "height", "len", "separator", "sepLength", "nextStr", "_htmlElementAsString", "el", "className", "classes", "key", "attr", "i", "isString", "allowedAttrs", "setPrototypeOf", "setProtoOf", "mixinProperties", "obj", "proto", "prop", "SentryError", "_super", "__extends", "message", "_this", "_newTarget", "setPrototypeOf", "DSN_REGEX", "ERROR_MESSAGE", "Dsn", "from", "withPassword", "_a", "host", "path", "pass", "port", "projectId", "protocol", "user", "str", "match", "SentryError", "__read", "_b", "_c", "lastPath", "split", "projectMatch", "components", "_this", "component", "Memo", "obj", "i", "value", "defaultFunctionName", "getFunctionName", "fn", "truncate", "str", "max", "snipLine", "line", "colno", "newLine", "ll", "start", "end", "isMatchingPattern", "value", "pattern", "isString", "isRegExp", "fill", "source", "name", "replacementFactory", "original", "wrapped", "urlEncode", "object", "key", "getWalkSource", "value", "isError", "error", "err", "i", "isEvent", "event_1", "isElement", "htmlTreeAsString", "isInstanceOf", "utf8Length", "jsonSize", "normalizeToSize", "depth", "maxSize", "serialized", "normalize", "serializeValue", "type", "normalized", "normalizeValue", "isPrimitive", "isSyntheticEvent", "getFunctionName", "walk", "memo", "Memo", "acc", "innerKey", "input", "extractExceptionKeysForMessage", "exception", "maxLength", "keys", "truncate", "includedKeys", "dropUndefinedKeys", "val", "isPlainObject", "obj", "rv", "_b", "__values", "_c", "isNodeEnv", "dynamicRequire", "mod", "request", "fallbackGlobalObject", "getGlobalObject", "isNodeEnv", "uuid4", "global", "crypto", "arr", "pad", "num", "v", "c", "r", "getEventDescription", "event", "exception", "consoleSandbox", "callback", "global", "getGlobalObject", "levels", "originalConsole", "wrappedLevels", "level", "result", "addExceptionTypeValue", "value", "type", "addExceptionMechanism", "mechanism", "key", "SEMVER_REGEXP", "parseSemver", "input", "match", "major", "minor", "patch", "defaultRetryAfter", "parseRetryAfterHeader", "now", "header", "headerDelay", "headerDate", "addContextToFrame", "lines", "frame", "linesOfContext", "lineno", "maxLines", "sourceLine", "line", "snipLine", "global", "getGlobalObject", "PREFIX", "Logger", "args", "_i", "consoleSandbox", "logger", "splitPathRe", "splitPath", "filename", "parts", "dirname", "path", "result", "splitPath", "root", "dir", "basename", "ext", "f", "States", "SyncPromise", "executor", "_this", "value", "reason", "state", "isThenable", "handler", "cachedHandlers", "e", "resolve", "_", "reject", "collection", "counter", "resolvedCollection", "item", "index", "onfulfilled", "onrejected", "result", "val", "onfinally", "isRejected", "PromiseBuffer", "_limit", "task", "_this", "SyncPromise", "SentryError", "removedTask", "timeout", "resolve", "capturedSetTimeout", "dateTimestampSource", "getBrowserPerformance", "performance", "getGlobalObject", "timeOrigin", "getNodePerformance", "perfHooks", "dynamicRequire", "platformPerformance", "isNodeEnv", "timestampSource", "dateTimestampInSeconds", "timestampInSeconds", "browserPerformanceTimeOrigin", "performance", "getGlobalObject", "Scope", "scope", "newScope", "__spread", "__assign", "callback", "user", "tags", "key", "value", "_a", "extras", "extra", "fingerprint", "level", "name", "context", "span", "_b", "_d", "_c", "session", "captureContext", "updatedScope", "isPlainObject", "breadcrumb", "maxBreadcrumbs", "mergedBreadcrumb", "dateTimestampInSeconds", "event", "hint", "transactionName", "getGlobalEventProcessors", "processors", "index", "_this", "SyncPromise", "resolve", "reject", "processor", "result", "isThenable", "final", "getGlobalEventProcessors", "global", "getGlobalObject", "addGlobalEventProcessor", "callback", "Session", "context", "uuid4", "SessionStatus", "status", "dropUndefinedKeys", "API_VERSION", "DEFAULT_BREADCRUMBS", "MAX_BREADCRUMBS", "Hub", "client", "scope", "_version", "Scope", "version", "top", "callback", "exception", "hint", "eventId", "uuid4", "finalHint", "syntheticException", "__assign", "message", "level", "event", "breadcrumb", "_a", "_b", "_c", "beforeBreadcrumb", "_d", "maxBreadcrumbs", "timestamp", "dateTimestampInSeconds", "mergedBreadcrumb", "finalBreadcrumb", "consoleSandbox", "user", "tags", "extras", "key", "value", "extra", "name", "context", "oldHub", "makeMain", "integration", "logger", "customSamplingContext", "release", "environment", "session", "Session", "method", "args", "_i", "__spread", "carrier", "getMainCarrier", "sentry", "getMainCarrier", "carrier", "getGlobalObject", "makeMain", "hub", "registry", "oldHub", "getHubFromCarrier", "setHubOnCarrier", "getCurrentHub", "hasHubOnCarrier", "API_VERSION", "Hub", "isNodeEnv", "getHubFromActiveDomain", "getActiveDomain", "sentry", "activeDomain", "registryHubTopStack", "Scope", "callOnHub", "method", "args", "_i", "hub", "getCurrentHub", "__spread", "captureException", "exception", "captureContext", "syntheticException", "captureMessage", "message", "level", "context", "__assign", "captureEvent", "event", "configureScope", "callback", "startTransaction", "context", "customSamplingContext", "callOnHub", "__assign", "SENTRY_API_VERSION", "API", "dsn", "Dsn", "protocol", "port", "clientName", "clientVersion", "header", "dialogOptions", "endpoint", "encodedOptions", "key", "target", "base", "auth", "urlEncode", "installedIntegrations", "getIntegrationsToSetup", "options", "defaultIntegrations", "__spread", "userIntegrations", "integrations", "userIntegrationsNames_1", "i", "pickedIntegrationsNames_1", "defaultIntegration", "userIntegration", "integrationsNames", "alwaysLastToRun", "setupIntegration", "integration", "addGlobalEventProcessor", "getCurrentHub", "logger", "setupIntegrations", "BaseClient", "backendClass", "options", "Dsn", "exception", "hint", "scope", "_this", "eventId", "event", "result", "message", "level", "promisedEvent", "isPrimitive", "session", "logger", "timeout", "ready", "transportFlushed", "setupIntegrations", "integration", "crashed", "errored", "userAgent", "exceptions", "exceptions_1", "__values", "exceptions_1_1", "ex", "mechanism", "user", "headers", "key", "__assign", "SessionStatus", "SyncPromise", "resolve", "ticked", "tick", "interval", "_a", "normalizeDepth", "prepared", "uuid4", "dateTimestampInSeconds", "finalScope", "Scope", "evt", "depth", "normalized", "b", "normalize", "environment", "release", "dist", "maxValueLength", "truncate", "request", "sdkInfo", "integrationsArray", "finalEvent", "reason", "beforeSend", "sampleRate", "SentryError", "isTransaction", "isInternalException", "beforeSendResult", "isThenable", "e", "processedEvent", "promise", "value", "NoopTransport", "_", "SyncPromise", "Status", "BaseBackend", "options", "logger", "_exception", "_hint", "SentryError", "_message", "_level", "event", "reason", "session", "NoopTransport", "eventToSentryRequest", "event", "api", "_a", "samplingMethod", "sampleRate", "otherTags", "__rest", "useEnvelope", "req", "envelopeHeaders", "itemHeaders", "envelope", "initAndBind", "clientClass", "options", "logger", "hub", "getCurrentHub", "client", "integrations_exports", "__export", "FunctionToString", "InboundFilters", "originalFunctionToString", "FunctionToString", "args", "_i", "context", "DEFAULT_IGNORE_ERRORS", "InboundFilters", "_options", "addGlobalEventProcessor", "event", "hub", "getCurrentHub", "self", "client", "clientOptions", "options", "logger", "getEventDescription", "message", "pattern", "isMatchingPattern", "url", "__spread", "_a", "_b", "type", "_c", "value", "frames_1", "frames_2", "import_lru_map", "readFile", "parse", "err", "lines", "line", "lineMatch", "object", "method", "functionName", "typeName", "methodName", "isNative", "methodStart", "objectEnd", "properties", "callSite", "DEFAULT_LINES_OF_CONTEXT", "FILE_CONTENT_CACHE", "getFunction", "frame", "mainModule", "__require", "dirname", "getModule", "filename", "base", "file", "basename", "n", "moduleName", "readSourceFiles", "filenames", "SyncPromise", "resolve", "sourceFiles", "count", "i", "cache", "FILE_CONTENT_CACHE", "readFile", "err", "data", "content", "extractStackFromError", "error", "stack", "parse", "parseStack", "options", "filesToRead", "linesOfContext", "DEFAULT_LINES_OF_CONTEXT", "frames", "parsedFrame", "isInternal", "addPrePostContext", "result", "lines", "addContextToFrame", "getExceptionFromError", "name", "prepareFramesForEvent", "parseError", "exception", "localStack", "firstFrameFunction", "fs", "url", "SDK_NAME", "SDK_VERSION", "BaseTransport", "options", "PromiseBuffer", "API", "_", "SentryError", "timeout", "uri", "headers", "__assign", "SDK_NAME", "SDK_VERSION", "hostname", "pathname", "port", "protocol", "path", "httpModule", "event", "resolve", "reject", "sentryReq", "eventToSentryRequest", "_this", "req", "res", "statusCode", "status", "Status", "now", "retryAfterHeader", "parseRetryAfterHeader", "logger", "rejectionMessage", "http", "HTTPTransport", "_super", "__extends", "options", "_this", "proxy", "http", "event", "SentryError", "BaseTransport", "https", "HTTPSTransport", "_super", "__extends", "options", "_this", "proxy", "https", "event", "SentryError", "BaseTransport", "NodeBackend", "_super", "__extends", "exception", "hint", "_this", "ex", "mechanism", "isError", "isPlainObject", "message", "extractExceptionKeysForMessage", "getCurrentHub", "scope", "normalizeToSize", "SyncPromise", "resolve", "reject", "parseError", "event", "addExceptionTypeValue", "addExceptionMechanism", "__assign", "level", "Severity", "stack", "extractStackFromError", "parseStack", "frames", "prepareFramesForEvent", "dsn", "Dsn", "transportOptions", "HTTPTransport", "HTTPSTransport", "BaseBackend", "NodeClient", "_super", "__extends", "options", "NodeBackend", "event", "scope", "hint", "__assign", "SDK_NAME", "__spread", "SDK_VERSION", "BaseClient", "domain", "integrations_exports", "__export", "Console", "Http", "LinkedErrors", "Modules", "OnUncaughtException", "OnUnhandledRejection", "util", "Console", "consoleModule", "_b", "__values", "_c", "level", "fill", "createConsoleWrapper", "createConsoleWrapper", "level", "originalConsoleMethod", "sentryLevel", "Severity", "getCurrentHub", "Console", "__spread", "URL", "isSentryRequest", "url", "dsn", "_a", "getCurrentHub", "extractUrl", "requestOptions", "protocol", "hostname", "port", "path", "cleanSpanDescription", "description", "request", "_d", "__read", "method", "requestUrl", "_b", "_c", "urlToOptions", "options", "normalizeRequestArgs", "requestArgs", "callback", "__assign", "NODE_VERSION", "parseSemver", "Http", "options", "wrappedHandlerMaker", "_createWrappedRequestMethodFactory", "httpModule", "fill", "httpsModule", "_createWrappedRequestMethodFactory", "breadcrumbsEnabled", "tracingEnabled", "originalRequestMethod", "args", "_i", "httpModule", "requestArgs", "normalizeRequestArgs", "requestOptions", "requestUrl", "extractUrl", "isSentryRequest", "span", "parentSpan", "scope", "getCurrentHub", "sentryTraceHeader", "logger", "__assign", "res", "req", "addRequestBreadcrumb", "cleanSpanDescription", "event", "url", "Http", "DEFAULT_SHUTDOWN_TIMEOUT", "logAndExitProcess", "error", "client", "getCurrentHub", "logger", "options", "timeout", "DEFAULT_SHUTDOWN_TIMEOUT", "forget", "result", "OnUncaughtException", "_options", "_this", "timeout", "caughtFirstError", "caughtSecondError", "calledFatalError", "firstError", "error", "onFatalError", "logAndExitProcess", "client", "getCurrentHub", "logger", "hub_1", "scope", "Severity", "OnUnhandledRejection", "_options", "reason", "promise", "hub", "getCurrentHub", "context", "scope", "rejectionWarning", "consoleSandbox", "logAndExitProcess", "DEFAULT_KEY", "DEFAULT_LIMIT", "LinkedErrors", "options", "addGlobalEventProcessor", "event", "hint", "self", "getCurrentHub", "handler", "_this", "isInstanceOf", "SyncPromise", "resolve", "linkedErrors", "__spread", "error", "key", "stack", "reject", "getExceptionFromError", "exception", "existsSync", "readFileSync", "dirname", "join", "moduleCache", "getPaths", "__require", "collectModules", "mainPaths", "paths", "infos", "seen", "path", "dir", "updir", "orig", "dirname", "pkgfile", "join", "existsSync", "info", "readFileSync", "Modules", "addGlobalEventProcessor", "getCurrentHub", "_this", "event", "__assign", "defaultIntegrations", "integrations_exports", "Console", "Http", "OnUncaughtException", "OnUnhandledRejection", "LinkedErrors", "init", "options", "tracesSampleRate", "global_1", "getGlobalObject", "setHubOnCarrier", "getMainCarrier", "getCurrentHub", "initAndBind", "NodeClient", "domain", "INTEGRATIONS", "__assign", "integrations_exports", "carrier", "getMainCarrier", "domain", "isNotNull", "value", "invariant", "message", "first", "items", "last", "nth", "index", "BinarySearchBias", "recursiveSearch", "low", "high", "needle", "haystack", "compare", "bias", "mid", "value", "comparison", "e", "binarySearch", "index", "binarySearchKey", "array", "key", "keySelector", "keyComparer", "offset", "middle", "middleValue", "invariant", "midKey", "BaseCache", "getter", "promise", "LRU", "maxSize", "WeakCache", "VersionedCache", "size", "getVersion", "compareVersion", "DEFAULT_CACHE_SIZE", "createCache", "createWeakMapCache", "createMultiKeyCache", "getSecondaryKey", "a", "b", "createVersionedCache", "store", "addToStore", "target", "property", "cache", "current", "getOrCreate", "map", "create", "key", "value", "versioned", "getKey", "args", "size", "DEFAULT_CACHE_SIZE", "versionFn", "isAsync", "method", "propertyKey", "descriptor", "fn", "caches", "using", "instance", "getVersion", "createVersionedCache", "isWeak", "createWeakMapCache", "createCache", "toPosixPath", "path", "toWindowsPath", "toPlatformPath", "isString", "value", "cacheStringFunction", "fn", "cache", "str", "camelizeRE", "camelize", "uncapitalize", "_", "c", "camelCase", "hyphenateRE", "hyphenate", "capitalize", "pascalCase", "generateUUID", "ucfirst", "str", "lcfirst", "getComponentName", "fileName", "name", "pascalCase", "toPosixPath", "prefixIfStartsWithNumber", "isDebugging", "setDebugging", "debugging", "debug", "printOnlyReturnStatement", "transformArgs", "args", "transformReturn", "ret", "target", "key", "descriptor", "fn", "inspect", "result", "suffixes", "parseFileName", "fileName", "isFilesystemSchemeFile", "invariant", "isVueTsxFile", "isVueJsxFile", "isVueSFCDescriptorFile", "isVueTemplateASTFile", "toFileName", "f", "isVueFile", "isVueRuntimeFile", "fileName", "suffixes", "isProjectRuntimeFile", "RAW_TEXT_TAGS", "isRawTextContainer", "tagName", "HTML_TAGS", "isHTMLTag", "SVG_TAGS", "isSVGTag", "VOID_TAGS", "isVoidTag", "HTML_TAG_NAME_TO_CLASS_NAME", "SVG_TAG_NAME_TO_CLASS_NAME", "getClassNameForTagName", "isObject", "obj", "DisposableScope", "disposable", "resource", "fn", "eventTarget", "context", "event", "listener", "effect", "model", "dependencies", "options", "scope", "emitter", "set", "property", "Event", "name", "detail", "EventEmitter", "listeners", "methodsRE", "createModel", "state", "ObservableState", "isProperty", "target", "receiver", "value", "_target", "ObservableState", "EventEmitter", "state", "key", "value", "changes", "entry", "previousValue", "change", "serializer", "obj", "_key", "value", "text", "isString", "createEndpoint", "channel", "defaultSource", "sources", "create", "id", "emitter", "EventEmitter", "event", "listener", "_event", "detail", "generateUUID", "data", "message", "MessageType", "release", "Symbols", "ValueType", "EXPOSED", "THROWN", "isObjectOrFunction", "isObject", "isThrowable", "createThrowable", "throwHandler", "serializedValue", "isExposed", "currentEndpoint", "withEndpoint", "endpoint", "fn", "createExposed", "target", "scope", "DisposableScope", "returnValue", "get", "parent", "property", "getParent", "fromValue", "arg", "Constructor", "error", "toValue", "path", "prop", "endpoints", "proxyHandler", "key", "createEndpointProxy", "callbackHandler", "Handlers", "name", "handler", "boundArgs", "isReleased", "proxy", "_", "throwIfProxyReleased", "PublicSymbols", "sendRequest", "p", "response", "_this", "args", "request", "resolve", "reject", "expose", "set", "t", "local", "remote", "LineColumnMapper", "source", "lines", "offset", "line", "position", "binarySearch", "a", "b", "BinarySearchBias", "invariant", "column", "offsets", "SourceTransformer", "fileName", "code", "sourceMap", "lastLine", "last", "mappings", "nameOffset", "getMappings", "mapping", "segment", "current", "first", "i", "start", "end", "mapper", "decode", "rebaseSourceMap", "startPosition", "originalLine", "originalColumn", "Telemetry", "key", "options", "defaults", "init", "platform", "name", "duration", "description", "activeTransaction", "getCurrentHub", "transaction", "startTransaction", "configureScope", "s", "captureMessage", "scope", "Severity", "child", "value", "tags", "allowed", "captureEvent", "payload", "inspect", "captureException", "packageName", "packageVersion", "tracesSampleRate", "enabled", "startMeasure", "name", "start", "performance", "duration", "Telemetry", "FullTextDocument", "uri", "languageId", "version", "content", "range", "start", "end", "changes", "_i", "changes_1", "change", "getWellformedRange", "startOffset", "endOffset", "startLine", "endLine", "lineOffsets", "addedLineOffsets", "computeLineOffsets", "i", "len", "diff", "offset", "low", "high", "mid", "line", "position", "lineOffset", "nextLineOffset", "event", "candidate", "TextDocument", "create", "update", "document", "applyEdits", "edits", "text", "sortedEdits", "mergeSort", "getWellformedEdit", "a", "b", "lastModifiedOffset", "spans", "sortedEdits_1", "e", "data", "compare", "p", "left", "right", "leftIdx", "rightIdx", "ret", "isAtLineStart", "textOffset", "result", "ch", "textEdit", "NodeTypes", "ElementTypes", "isSimpleIdentifier", "content", "_isSimpleIdentifier", "isNode", "node", "isRootNode", "isElementNode", "isPlainElementNode", "isComponentNode", "isSlotNode", "isTemplateNode", "isTextNode", "isCommentNode", "isExpressionNode", "isSimpleExpressionNode", "isInterpolationNode", "node", "isNode", "NodeTypes", "isAttributeNode", "isDirectiveNode", "createSimpleExpression", "content", "isStatic", "loc", "isConstant", "_createSimpleExpression", "VISITOR_KEYS", "traverse", "node", "handlers", "state", "enter", "exit", "traverseSimpleImpl", "ancestors", "isNode", "keys", "key", "subNode", "i", "child", "traverseEvery", "findTemplateNodeAt", "ast", "position", "findTemplateNodeInRange", "findTemplateNodeInRange", "ast", "start", "end", "mode", "found", "traverseEvery", "node", "ancestors", "init_shared_esm_bundler", "defaultOnError", "error", "defaultOnWarn", "msg", "createCompilerError", "code", "loc", "messages", "additionalMessage", "errorMessages", "FRAGMENT", "TELEPORT", "SUSPENSE", "KEEP_ALIVE", "BASE_TRANSITION", "OPEN_BLOCK", "CREATE_BLOCK", "CREATE_ELEMENT_BLOCK", "CREATE_VNODE", "CREATE_ELEMENT_VNODE", "CREATE_COMMENT", "CREATE_TEXT", "CREATE_STATIC", "RESOLVE_COMPONENT", "RESOLVE_DYNAMIC_COMPONENT", "RESOLVE_DIRECTIVE", "RESOLVE_FILTER", "WITH_DIRECTIVES", "RENDER_LIST", "RENDER_SLOT", "CREATE_SLOTS", "TO_DISPLAY_STRING", "MERGE_PROPS", "NORMALIZE_CLASS", "NORMALIZE_STYLE", "NORMALIZE_PROPS", "GUARD_REACTIVE_PROPS", "TO_HANDLERS", "CAMELIZE", "CAPITALIZE", "TO_HANDLER_KEY", "SET_BLOCK_TRACKING", "PUSH_SCOPE_ID", "POP_SCOPE_ID", "WITH_SCOPE_ID", "WITH_CTX", "UNREF", "IS_REF", "WITH_MEMO", "IS_MEMO_SAME", "helperNameMap", "registerRuntimeHelpers", "helpers", "s", "locStub", "createRoot", "children", "createVNodeCall", "context", "tag", "props", "patchFlag", "dynamicProps", "directives", "isBlock", "disableTracking", "isComponent", "getVNodeBlockHelper", "getVNodeHelper", "createObjectExpression", "properties", "loc", "locStub", "createObjectProperty", "key", "value", "isString", "createSimpleExpression", "content", "isStatic", "constType", "createCompoundExpression", "children", "loc", "locStub", "createCallExpression", "callee", "args", "createFunctionExpression", "params", "returns", "newline", "isSlot", "createConditionalExpression", "test", "consequent", "alternate", "createBlockStatement", "body", "locStub", "isStaticExp", "p", "isBuiltInType", "tag", "expected", "hyphenate", "isCoreComponent", "TELEPORT", "SUSPENSE", "KEEP_ALIVE", "BASE_TRANSITION", "getInnerRange", "loc", "offset", "length", "newLoc", "advancePositionWithClone", "pos", "source", "numberOfCharacters", "advancePositionWithMutation", "extend", "linesCount", "lastNewLinePos", "i", "findDir", "node", "name", "allowEmpty", "i", "p", "isString", "findProp", "dynamicOnly", "isBindKey", "arg", "isStaticExp", "isVSlot", "p", "isTemplateNode", "node", "isSlotOutlet", "getVNodeHelper", "ssr", "isComponent", "CREATE_VNODE", "CREATE_ELEMENT_VNODE", "getVNodeBlockHelper", "CREATE_BLOCK", "CREATE_ELEMENT_BLOCK", "propsHelperSet", "NORMALIZE_PROPS", "GUARD_REACTIVE_PROPS", "getUnnormalizedProps", "props", "callPath", "isString", "callee", "injectProp", "prop", "context", "propsWithInjection", "parentCall", "ret", "createObjectExpression", "first", "TO_HANDLERS", "createCallExpression", "MERGE_PROPS", "alreadyExists", "propKeyName", "getMemoedVNodeCall", "node", "WITH_MEMO", "makeBlock", "helper", "removeHelper", "inSSR", "getVNodeHelper", "OPEN_BLOCK", "getVNodeBlockHelper", "deprecationData", "key", "getCompatValue", "context", "config", "value", "isCompatEnabled", "mode", "checkCompatEnabled", "loc", "args", "enabled", "warnDeprecation", "message", "link", "msg", "err", "decodeRE", "decodeMap", "defaultParserOptions", "NO", "rawText", "_", "p1", "defaultOnError", "defaultOnWarn", "baseParse", "content", "options", "createParserContext", "start", "getCursor", "createRoot", "parseChildren", "getSelection", "rawOptions", "extend", "ancestors", "parent", "last", "ns", "nodes", "isEnd", "s", "startsWith", "parseInterpolation", "emitError", "parseComment", "parseBogusComment", "parseCDATA", "advanceBy", "parseTag", "parseElement", "p", "isSpecialTemplateDirective", "parseText", "isArray", "i", "pushNode", "removedWhitespace", "shouldCondense", "prev", "next", "first", "match", "prevIndex", "nestedIndex", "contentStart", "closeIndex", "wasInPre", "wasInVPre", "element", "isPreBoundary", "isVPreBoundary", "children", "inlineTemplateProp", "startsWithEndTagOpen", "makeMap", "type", "tag", "advanceSpaces", "cursor", "currentSource", "props", "parseAttributes", "isSelfClosing", "hasIf", "hasFor", "tagType", "isComponent", "isCoreComponent", "isBindKey", "attributeNames", "attr", "parseAttribute", "nameSet", "name", "pattern", "m", "parseAttributeValue", "isPropShorthand", "dirName", "arg", "isSlot", "startOffset", "getNewPosition", "isStatic", "valueLoc", "advancePositionWithClone", "modifiers", "quote", "isQuoted", "endIndex", "parseTextData", "unexpectedChars", "open", "close", "innerStart", "innerEnd", "rawContentLength", "rawContent", "preTrimContent", "advancePositionWithMutation", "endOffset", "endTokens", "index", "length", "column", "line", "offset", "end", "xs", "source", "searchString", "numberOfCharacters", "code", "createCompilerError", "traverseChildren", "parent", "context", "i", "nodeRemoved", "child", "isString", "traverseNode", "node", "nodeTransforms", "exitFns", "onExit", "isArray", "CREATE_COMMENT", "TO_DISPLAY_STRING", "createStructuralDirectiveTransform", "name", "fn", "matches", "n", "props", "isVSlot", "prop", "prohibitedKeywordRE", "stripStringRE", "validateBrowserExpression", "node", "context", "asParams", "asRawStatements", "exp", "e", "message", "keywordMatch", "createCompilerError", "transformIf", "createStructuralDirectiveTransform", "node", "dir", "context", "processIf", "ifNode", "branch", "isRoot", "siblings", "i", "key", "sibling", "createCodegenNodeForBranch", "parentCondition", "getParentCondition", "processCodegen", "loc", "createCompilerError", "createSimpleExpression", "validateBrowserExpression", "createIfBranch", "comments", "isBuiltInType", "userKey", "isSameKey", "onExit", "traverseNode", "findDir", "findProp", "keyIndex", "createConditionalExpression", "createChildrenCodegenNode", "createCallExpression", "CREATE_COMMENT", "helper", "keyProperty", "createObjectProperty", "locStub", "children", "firstChild", "vnodeCall", "injectProp", "patchFlag", "patchFlagText", "PatchFlagNames", "createVNodeCall", "FRAGMENT", "createObjectExpression", "ret", "getMemoedVNodeCall", "makeBlock", "a", "b", "exp", "branchExp", "transformFor", "removeHelper", "processFor", "forNode", "renderExp", "RENDER_LIST", "memo", "keyProp", "keyExp", "isStableFragment", "fragmentFlag", "childBlock", "isTemplate", "isTemplateNode", "c", "needFragmentWrapper", "slotOutlet", "isSlotOutlet", "OPEN_BLOCK", "getVNodeBlockHelper", "getVNodeHelper", "loop", "createFunctionExpression", "createForLoopParams", "createBlockStatement", "createCompoundExpression", "IS_MEMO_SAME", "parseResult", "parseForExpression", "addIdentifiers", "removeIdentifiers", "scopes", "source", "value", "index", "forAliasRE", "forIteratorRE", "stripParensRE", "input", "inMatch", "LHS", "RHS", "result", "createAliasExpression", "valueContent", "trimmedOffset", "iteratorMatch", "keyContent", "keyOffset", "indexContent", "range", "content", "offset", "getInnerRange", "memoArgs", "createParamsList", "args", "arg", "defaultFallback", "cacheStringFunction", "fn", "cache", "str", "camelizeRE", "camelize", "_", "c", "init_shared_esm_bundler", "V_MODEL_RADIO", "V_MODEL_CHECKBOX", "V_MODEL_TEXT", "V_MODEL_SELECT", "V_MODEL_DYNAMIC", "V_ON_WITH_MODIFIERS", "V_ON_WITH_KEYS", "V_SHOW", "TRANSITION", "TRANSITION_GROUP", "registerRuntimeHelpers", "decoder", "decodeHtmlBrowser", "raw", "asAttr", "isRawTextContainer", "makeMap", "parserOptions", "isVoidTag", "tag", "isHTMLTag", "isSVGTag", "isBuiltInType", "parent", "ns", "a", "transformStyle", "node", "p", "i", "createSimpleExpression", "parseInlineCSS", "cssText", "loc", "normalized", "parseStringStyle", "createDOMCompilerError", "code", "createCompilerError", "DOMErrorMessages", "warnTransitionChildren", "node", "context", "TRANSITION", "hasMultipleChildren", "createDOMCompilerError", "children", "c", "child", "DOMNodeTransforms", "transformStyle", "warnTransitionChildren", "parse", "template", "options", "baseParse", "extend", "parserOptions", "isParsingBrokenTemplate", "parse", "source", "compiler", "fallback", "descriptor", "string", "props", "p", "NodeTypes", "e", "errors", "node", "isSetup", "scriptBlock", "styleBlock", "createBlock", "end", "result", "start", "createDuplicateBlockError", "isScriptSetup", "err", "type", "content", "offset", "loc", "block", "attrs", "placeholder", "i", "output", "nl", "createProgram", "ts", "source", "fileName", "lang", "previous", "compilerHost", "filename", "id", "getScriptKind", "findIdentifiers", "program", "sourceFile", "checker", "identifiers", "sym", "name", "flags", "kind", "initializer", "type", "declaration", "first", "transformScript", "options", "key", "inputFile", "invariant", "defaultExport", "inheritAttrs", "getComponentName", "vars", "code", "SourceTransformer", "findNodes", "needsDefineComponent", "result", "statement", "modifier", "transformScriptSetup", "firstStatement", "internalPropsIdentifier", "internalPropsInitializer", "propsIdentifier", "propsType", "propsOptions", "emitsType", "emitsOptions", "exposeOptions", "exportedNodes", "exportedNames", "_", "generic", "offset", "genExportedNodes", "line", "node", "specifier", "internalName", "expose", "start", "end", "cursor", "s", "e", "getExportModifier", "isFnCall", "processProps", "definePropsExp", "processEmits", "processExpose", "advancePositionWithClone", "pos", "source", "numberOfCharacters", "advancePositionWithMutation", "linesCount", "lastNewLinePos", "i", "createLoc", "loc", "offset", "length", "start", "end", "sliceLoc", "getRuntimeFn", "prefix", "name", "annotations", "ctx", "generate", "root", "options", "createGenerateContext", "genRootNode", "genSlotTypes", "genAttrTypes", "genNode", "node", "NodeTypes", "ElementTypes", "genElementNode", "genComponentNode", "genSlotOutletNode", "genTemplateNode", "genExpressionNode", "genTextNode", "genInterpolationNode", "genCommentNode", "genForNode", "genIfNode", "indent", "fn", "writeLine", "code", "genKnownIdentifierGetters", "genGlobalDeclarations", "genNodeHoists", "genChildren", "ids", "id", "wrap", "knownId", "genDirectiveChecks", "el", "directives", "isDirectiveNode", "directive", "asConst", "isComponentNode", "modifier", "index", "hoist", "genProps", "genTypeGuards", "isAttributeNode", "pascalCase", "isExpressionNode", "slotNode", "isStaticExpression", "value", "guard", "accessor", "isSimpleIdentifier", "isSimpleExpressionNode", "genSlotAccessor", "props", "prop", "genObjectProperty", "isTextNode", "rendered", "genAttribute", "genVBindDirective", "invariant", "all", "genHandler", "isPlainElementNode", "getClassNameForTagName", "genExpressionNodeAsFunction", "capitalize", "genExp", "isCheckbox", "type", "attribute", "element", "camelize", "genSimpleExpressionNode", "genCompoundExpressionNode", "output", "line", "column", "names", "mappings", "shouldIndent", "shouldWriteMapping", "nl", "push", "chunk", "addMappingType", "lines", "last", "context", "enabled", "current", "slots", "traverse", "ancestors", "isSlotNode", "slot", "recurse", "path", "nodes", "isForNode", "genForNodeArgs", "next", "currentSlot", "typeCastAs", "newLine", "breakMapping", "items", "forExps", "quote", "args", "forNode", "genFn", "open", "close", "hasElse", "n", "branch", "isCommentNode", "parent", "key", "traverseEvery", "isRootNode", "isTemplateNode", "transformCustomBlock", "_block", "transformScript", "script", "content", "result", "transform", "transformScriptSetup", "generic", "transformStyle", "_style", "forAliasRE", "createTransformFor", "customContext", "dir", "Scope", "identifier", "withScope", "ast", "scope", "isOnDirective", "getIdentifiers", "isElementNode", "directiveScope", "localScope", "match", "LHS", "RHS", "ignoreFunctionParameters", "identifiers", "add", "isValidIdentifier", "parseUsingBabel", "definedInScope", "scopes", "pushScope", "popScope", "traverseBabel", "param", "shouldTrack", "RE", "withTS", "parse", "ancestor", "isStaticPropertyKey", "isKnownIdentifier", "KNOWN_IDENTIFIERS", "isStaticProperty", "ScopeManager", "expression", "createComponentChildrenTransform", "_customContext", "hasSlotsAsChildren", "_if", "createIfNode", "createIfBranchNode", "createTransformIf", "condition", "createSimpleExpression", "_ifNode", "s", "text", "createResolveComponentTransform", "h", "resolveComponentArgs", "camelCase", "mayBeRef", "isProp", "createSlotHoistScopeTransform", "namedCharacterReferences", "maxCRNameLength", "max", "decodeHtml", "rawText", "asAttr", "decodedText", "advance", "head", "remaining", "semi", "hex", "body", "cp", "CCR_REPLACEMENTS", "parserOptions", "isVoidTag", "tag", "isHTMLTag", "isSVGTag", "ns", "a", "isRawTextContainer", "preprocess", "createPlainElementNode", "nameEndOffset", "first", "isDynamic", "startTagIndex", "endOfStartTagOrLastChild", "endTagIndex", "template", "contentLoc", "compile", "errors", "compileFromAST", "error", "clone", "obj", "transformTemplate", "slotsIdentifier", "attrsIdentifier", "compileWithDecodedSourceMap", "source", "options", "cache", "createCache", "key", "name", "previous", "descriptor", "errors", "parse", "lang", "internalIdentifierPrefix", "contextIdentifier", "typeIdentifier", "resolvedOptions", "builder", "SourceTransformer", "isScriptChanged", "hasBlockChanged", "script", "runIfNeeded", "transformScript", "isScriptSetupChanged", "scriptSetup", "transformScriptSetup", "identifier", "template", "transformTemplate", "region", "fn", "rebaseSourceMap", "customBlocksResults", "block", "index", "result", "transformCustomBlock", "defaultExportIdentifier", "code", "style", "transformStyle", "exported", "props", "inheritAttrs", "propsType", "attrsType", "slotsType", "defineProperty", "generic", "typeArgs", "parseGenericArgNames", "component", "genericExp", "output", "type", "ts", "sourceFile", "createProgram", "invariant", "decl", "first", "p", "forceEvict", "current", "areObjectsEqual", "a", "b", "VueSFCDocument", "original", "options", "createCache", "position", "fileName", "ctx", "value", "map", "encode", "range", "offset", "block", "previous", "endCompileMeasure", "startMeasure", "result", "compileWithDecodedSourceMap", "mappings", "memoize", "line", "mapping", "descriptor", "mappingsByOriginalOrder", "compareOriginal", "mappingsByGeneratedOrder", "compareGenerated", "blocks", "isNotNull", "a", "b", "TextDocument", "e", "positionType", "searchBias", "BinarySearchBias", "snapshot", "needle", "index", "binarySearch", "originalOffset", "span", "spanInGeneratedText", "low", "generatedStart", "originalStart", "originalString", "generatedString", "prefixLength", "findCommonPrefixLength", "spanInOriginalText", "isZeroWidth", "start", "end", "kind", "name", "invariant", "generatedLength", "generated", "contains", "skipLength", "length", "originalLength", "diffLength", "generatedOffset", "content", "version", "changes", "comparison", "fn", "haystack", "high", "mid", "isSurrogatePair", "ch", "Space_Separator", "ID_Start", "ID_Continue", "unicode", "util", "c", "source", "parseState", "stack", "pos", "line", "column", "token", "key", "root", "parse", "text", "reviver", "lex", "parseStates", "internalize", "holder", "name", "value", "replacement", "lexState", "buffer", "doubleQuote", "sign", "peek", "lexStates", "read", "newToken", "invalidChar", "literal", "u", "unicodeEscape", "invalidIdentifier", "escape", "separatorChar", "type", "s", "hexEscape", "count", "invalidEOF", "push", "pop", "parent", "current", "syntaxError", "formatChar", "replacements", "hexString", "message", "err", "stringify", "replacer", "space", "indent", "propertyList", "replacerFunc", "gap", "quote", "v", "item", "serializeProperty", "quoteString", "serializeArray", "serializeObject", "quotes", "product", "i", "quoteChar", "a", "b", "stepback", "keys", "partial", "propertyString", "member", "serializeKey", "final", "properties", "separator", "firstChar", "JSON5", "lib", "dist_default", "DEFAULT_PROJECT_CONFIG", "deepDefaults", "a", "b", "key", "valueA", "valueB", "FileWatcherEventKind", "findNearestFile", "fs", "dir", "name", "cur", "toPosixPath", "fileName", "resolveComponents", "rootDir", "resources", "components", "add", "source", "sources", "item", "resource", "isString", "getComponentName", "resolve", "value", "Path", "resolveDirectives", "directives", "VueProject", "packageFile", "projectFile", "_fileName", "event", "content", "dist_default", "e", "error", "pkg", "vueVersion", "dependencies", "modulesDir", "packageName", "watcher", "config", "__decorate", "decorators", "target", "key", "desc", "c", "r", "d", "i", "__param", "paramIndex", "decorator", "__metadata", "metadataKey", "metadataValue", "__classPrivateFieldGet", "receiver", "state", "kind", "f", "__classPrivateFieldSet", "value", "TS_LANGUAGE_SERVICE", "PATCHED_METHODS", "overrideMethod", "methodName", "createOverride", "patched", "fn", "areOverlappingTextSpans", "a", "b", "aStart", "aEnd", "bStart", "bEnd", "LoggerService", "context", "level", "_LoggerService_id", "_LoggerService_context", "_LoggerService_level", "message", "args", "_LoggerService_instances", "_LoggerService_write", "writer", "_a", "_LoggerService_writer", "name", "_LoggerService_getPrefix", "line", "watchers", "createFilesystemProvider", "serverHost", "projectService", "logger", "fix", "fileName", "scriptInfo", "editContent", "start", "end", "newText", "current", "latestVersion", "version", "changes", "fs", "result", "snapshot", "onChange", "QuickLRU", "options", "cache", "item", "maxAge", "deleted", "newSize", "items", "removeCount", "oldCacheSize", "CacheService", "getVersion", "maxSize", "prevItem", "nextItem", "FilesystemService", "provider", "ts", "prevFile", "TextDocument", "ext", "cachedFile", "file", "VueSFCDocument", "project", "registerFileUpdate", "info", "stopWatching", "fsWatcher", "eventKind", "generatedScriptInfo", "originalScriptInfo", "doc", "span", "offset", "isVueRuntimeFile", "isProjectRuntimeFile", "uri", "range", "position", "stop", "changesByFileName", "textChanges", "transformedChanges", "change", "fileTextChanges", "asFileTextChanges", "textChange", "previous", "block", "last", "isNotNull", "ConfigManager", "createModel", "effect", "Telemetry", "config", "TypescriptContextService", "_TypescriptContextService_projectRuntimeFileCache", "_TypescriptContextService_projects", "_TypescriptContextService_isRunningSchemeMode", "_version", "toPosixPath", "runtimeFileName", "lines", "components", "globalComponentProperties", "sources", "types", "source", "index", "localName", "declaration", "code", "preferences", "find", "rootDir", "invariant", "VueProject", "before", "isVueFile", "sourceFile", "_TypescriptContextService_instances", "_TypescriptContextService_getTokenAtPositionWorker", "SyntaxKind", "outer", "children", "binarySearchKey", "_", "middle", "child", "nodeContainsPosition", "node", "CodeFixService", "errorCodes", "formatOptions", "scope", "fixId", "fns", "fixes", "makeMap", "str", "expectsLowerCase", "map", "list", "val", "PatchFlagNames", "slotFlagsText", "GLOBALS_WHITE_LISTED", "isGloballyWhitelisted", "generateCodeFrame", "newlineSequences", "idx", "count", "res", "j", "lineLength", "newLineSeqLength", "pad", "length", "specialBooleanAttrs", "isSpecialBooleanAttr", "isBooleanAttr", "unsafeAttrCharRE", "attrValidationCache", "isSSRSafeAttrName", "isUnsafe", "propsToAttrMap", "isNoUnitNumericStyleProp", "isKnownHtmlAttr", "isKnownSvgAttr", "normalizeStyle", "isArray", "normalized", "isString", "parseStringStyle", "isObject", "listDelimiterRE", "propertyDelimiterRE", "cssText", "ret", "tmp", "stringifyStyle", "styles", "normalizedKey", "hyphenate", "normalizeClass", "normalizeProps", "props", "klass", "style", "HTML_TAGS", "SVG_TAGS", "VOID_TAGS", "isHTMLTag", "isSVGTag", "isVoidTag", "escapeRE", "escapeHtml", "string", "match", "html", "escaped", "lastIndex", "commentStripRE", "escapeHtmlComment", "src", "looseCompareArrays", "equal", "looseEqual", "aValidType", "isDate", "bValidType", "aKeysCount", "bKeysCount", "aHasKey", "bHasKey", "looseIndexOf", "arr", "toDisplayString", "objectToString", "replacer", "_key", "isMap", "entries", "isSet", "isPlainObject", "babelParserDefaultPlugins", "EMPTY_OBJ", "EMPTY_ARR", "NOOP", "NO", "onRE", "isOn", "isModelListener", "extend", "remove", "el", "hasOwnProperty", "hasOwn", "toTypeString", "isFunction", "isSymbol", "isPromise", "toRawType", "isIntegerKey", "isReservedProp", "cacheStringFunction", "camelizeRE", "camelize", "hyphenateRE", "capitalize", "toHandlerKey", "hasChanged", "oldValue", "invokeArrayFns", "arg", "def", "obj", "toNumber", "n", "_globalThis", "getGlobalThis", "intToCharMap", "base64", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require$$0", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "base64Vlq", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "shift", "continuation", "getArg", "aArgs", "aName", "aDefaultValue", "exports", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "urlGenerate", "aParsedUrl", "url", "normalize", "aPath", "path", "isAbsolute", "parts", "part", "up", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "supportsNullProto", "identity", "s", "toSetString", "isProtoString", "fromSetString", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "sStr", "isDuplicate", "aIdx", "arraySet", "generatedPositionAfter", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "mappingList", "base64VLQ", "require$$1", "require$$2", "require$$3", "SourceMapGenerator", "aSourceMapConsumer", "generator", "mapping", "newMapping", "sourceRelative", "content", "generated", "original", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "next", "nameIdx", "sourceIdx", "mappings", "aSources", "aSourceRoot", "sourceMapGenerator", "recursiveSearch", "aLow", "aHigh", "aNeedle", "aHaystack", "aCompare", "aBias", "mid", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "comparator", "p", "pivotIndex", "pivot", "q", "quickSort", "binarySearch", "require$$4", "SourceMapConsumer", "aSourceMap", "aSourceMapURL", "sourceMap", "IndexedSourceMapConsumer", "BasicSourceMapConsumer", "aContext", "aOrder", "order", "needle", "originalLine", "originalColumn", "sourceMapConsumer", "names", "sourcesContent", "relativeSource", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "srcMapping", "destMapping", "Mapping", "generatedLine", "cachedSegments", "originalMappings", "segment", "aMappings", "aLineName", "aColumnName", "aComparator", "nextMapping", "sc", "nullOnMissing", "fileUriAbsPath", "sections", "lastOffset", "offsetLine", "offsetColumn", "sectionIndex", "section", "generatedPosition", "sectionMappings", "adjustedMapping", "REGEX_NEWLINE", "NEWLINE_CODE", "isSourceNode", "SourceNode", "aLine", "aColumn", "aChunks", "aGeneratedCode", "aRelativePath", "remainingLines", "remainingLinesIndex", "shiftNextLine", "lineContents", "getNextLine", "newLine", "lastGeneratedLine", "lastGeneratedColumn", "lastMapping", "addMappingWithCode", "nextLine", "aChunk", "chunk", "aFn", "aSep", "newChildren", "aPattern", "aReplacement", "lastChild", "sourceMappingActive", "lastOriginalSource", "lastOriginalLine", "lastOriginalColumn", "lastOriginalName", "sourceContent", "sourceNode", "lib", "beforeExpr", "startsExpr", "isLoop", "isAssign", "prefix", "postfix", "TokenType", "label", "conf", "keywords$1", "createKeyword", "token", "createBinop", "binop", "types$1", "lineBreak", "lineBreakG", "isNewLine", "skipWhiteSpace", "isWhitespace", "Position", "col", "SourceLocation", "getLineInfo", "input", "lineStart", "BaseParser", "plugin", "setTrailingComments", "comments", "setInnerComments", "adjustInnerComments", "elements", "commentWS", "lastElement", "CommentsParser", "comment", "commentStack", "commentStackLength", "lastCommentWS", "nodeStart", "commentEnd", "commentStart", "ErrorCodes", "ErrorMessages", "makeErrorTemplates", "SourceTypeModuleErrorMessages", "messages", "templates", "reasonCode", "ParserError", "pos", "loc", "template", "params", "errors", "error", "data", "errorTemplate", "errorContext", "err", "estree", "superClass", "pattern", "flags", "regex", "bigInt", "directive", "directiveLiteral", "stmt", "expression", "isAsync", "method", "_stmt$expression$extr", "directiveStatements", "classBody", "isGenerator", "isConstructor", "allowsDirectSuper", "type", "allowExpression", "isMethod", "allowDirectSuper", "inClassScope", "funcNode", "propertyNode", "prop", "isPattern", "isAccessor", "startPos", "startLoc", "refExpressionErrors", "isBinding", "isLHS", "optional", "_node$arguments$", "base", "noCalls", "chain", "TokContext", "preserveSpace", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "isIdentifierStart", "isIdentifierChar", "reservedWords", "keywords", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "inModule", "isStrictReservedWord", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "isIteratorStart", "reservedWordLikeSet", "canBeReservedWord", "SCOPE_OTHER", "SCOPE_PROGRAM", "SCOPE_FUNCTION", "SCOPE_ARROW", "SCOPE_SIMPLE_CATCH", "SCOPE_SUPER", "SCOPE_DIRECT_SUPER", "SCOPE_CLASS", "SCOPE_STATIC_BLOCK", "SCOPE_TS_MODULE", "SCOPE_VAR", "BIND_KIND_VALUE", "BIND_KIND_TYPE", "BIND_SCOPE_VAR", "BIND_SCOPE_LEXICAL", "BIND_SCOPE_FUNCTION", "BIND_FLAGS_NONE", "BIND_FLAGS_CLASS", "BIND_FLAGS_TS_ENUM", "BIND_FLAGS_TS_CONST_ENUM", "BIND_FLAGS_TS_EXPORT_ONLY", "BIND_FLAGS_FLOW_DECLARE_FN", "BIND_CLASS", "BIND_LEXICAL", "BIND_VAR", "BIND_FUNCTION", "BIND_TS_INTERFACE", "BIND_TS_TYPE", "BIND_TS_ENUM", "BIND_TS_AMBIENT", "BIND_NONE", "BIND_OUTSIDE", "BIND_TS_CONST_ENUM", "BIND_TS_NAMESPACE", "BIND_FLOW_DECLARE_FN", "CLASS_ELEMENT_FLAG_STATIC", "CLASS_ELEMENT_KIND_GETTER", "CLASS_ELEMENT_KIND_SETTER", "CLASS_ELEMENT_KIND_ACCESSOR", "CLASS_ELEMENT_STATIC_GETTER", "CLASS_ELEMENT_STATIC_SETTER", "CLASS_ELEMENT_INSTANCE_GETTER", "CLASS_ELEMENT_INSTANCE_SETTER", "CLASS_ELEMENT_OTHER", "Scope", "ScopeHandler", "raise", "bindingType", "id", "topLevelScope", "FlowScope", "FlowScopeHandler", "State", "skipArrays", "keys", "_isDigit", "VALID_REGEX_FLAGS", "forbiddenNumericSeparatorSiblings", "allowedNumericSeparatorSiblings", "Token", "Tokenizer", "old", "curr", "skip", "cp", "trail", "strict", "curContext", "startSkip", "ch", "spaceStart", "loop", "CommentWhitespace", "prevType", "nextPos", "width", "size", "next2", "inClass", "mods", "char", "radix", "forceLen", "allowNumSeparator", "forbiddenSiblings", "allowedSiblings", "invalid", "total", "e", "prev", "isBigInt", "startsWithDot", "isFloat", "isDecimal", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "throwOnInvalid", "codePos", "quote", "out", "chunkStart", "containsInvalid", "inTemplate", "octalStr", "octal", "firstCode", "escStart", "identifierCheck", "esc", "kw", "_this$state$type$upda", "_this$state$type", "ClassScope", "ClassScopeHandler", "oldClassScope", "elementType", "classScope", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "kExpression", "kMaybeArrowParameterDeclaration", "kMaybeAsyncArrowParameterDeclaration", "kParameterDeclaration", "ExpressionScope", "ArrowHeadParsingScope", "iterator", "ExpressionScopeHandler", "stack", "currentScope", "newParameterDeclarationScope", "newArrowHeadScope", "newAsyncArrowScope", "newExpressionScope", "PARAM", "PARAM_YIELD", "PARAM_AWAIT", "PARAM_RETURN", "PARAM_IN", "ProductionParameterHandler", "functionFlags", "UtilParser", "extra", "op", "nameStart", "nameEnd", "nextCh", "allowAsi", "messageOrType", "oldState", "abortSignal", "failState", "andThrow", "shorthandAssign", "doubleProto", "optionalParameters", "oldLabels", "oldExportedIdentifiers", "oldInModule", "oldScope", "oldProdParam", "oldExpressionScope", "paramFlags", "ExpressionErrors", "Node", "parser", "NodePrototype", "newNode", "clonePlaceholder", "cloneIdentifier", "cloned", "cloneStringLiteral", "NodeUtils", "endLoc", "locationNode", "reservedTypes", "FlowErrors", "isEsModuleType", "bodyElement", "hasTypeImportKind", "isMaybeDefaultImport", "exportSuggestions", "partition", "test", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "matches", "tok", "oldInType", "moduloPos", "predicate", "typeNode", "typeContainer", "insideModule", "bodyNode", "body", "hasModuleExport", "suggestion", "isClass", "liberal", "declare", "requireDefault", "variance", "ident", "defaultRequired", "typeParameter", "oldNoAnonFunctionType", "isStatic", "valueNode", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "endDelim", "exact", "inexact", "protoStart", "inexactStart", "lookahead", "propOrInexact", "property", "paramCount", "node2", "first", "typeAnnotation", "lh", "isThis", "rest", "_this", "isGroupedType", "seenOptionalIndexedAccess", "param", "allowPrimitiveOverride", "allowExpressionBody", "topLevel", "expr", "originalNoArrowAt", "consequent", "failed", "valid", "noArrowAt", "disallowInvalid", "arrows", "_node$extra", "parse", "typeCastNode", "decl", "declarationNode", "hasNamespace", "isStatement", "optionalId", "member", "fullWord", "exprList", "trailingCommaPos", "isParenthesizedExpr", "_expr$extra", "close", "canBePattern", "isTuple", "implemented", "isPrivateNameAllowed", "typeParameters", "left", "specifier", "contextDescription", "firstIdentIsString", "firstIdent", "specifierTypeKind", "as_ident", "nodeIsTypeImport", "specifierIsTypeImport", "allowModifiers", "call", "afterLeftParse", "_jsx", "jsx", "_jsx2", "_jsx3", "arrow", "abort", "_arrowExpression$extr", "arrowExpression", "allowDuplicates", "isArrowFunction", "canBeArrow", "subscriptState", "targs", "program", "fileNode", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "enumName", "memberName", "suppliedType", "explicitType", "endOfInit", "literal", "init", "expectedType", "seenNames", "members", "hasUnknownMembers", "memberNode", "initializedMembers", "defaultedMembers", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "afterNext", "entities", "HEX_NUMBER", "DECIMAL_NUMBER", "JsxErrors", "isFragment", "object", "getQualifiedJSXName", "normalizeCRLF", "entity", "attributes", "openingElement", "closingElement", "contents", "lookaheadState", "TypeScriptScope", "TypeScriptScopeHandler", "isConst", "wasConst", "nonNull", "assert", "TSErrors", "keywordTypeFromName", "tsIsAccessModifier", "modifier", "typescript", "allowedModifiers", "modified", "disallowedModifiers", "enforceOrder", "after", "incompatible", "mod1", "mod2", "parseElement", "expectSuccess", "element", "bracket", "skipFirstToken", "allowReservedWords", "lhs", "returnToken", "signature", "returnTokenRequired", "readonly", "nodeAny", "firstParameter", "seenOptionalElement", "labeledElements", "elementNode", "_labeledElements", "isLabeled", "labeledNode", "optionalTypeNode", "restNode", "abstract", "thisKeyword", "nextToken", "operator", "parseConstituentType", "hasLeadingOperator", "braceStackCounter", "t", "asserts", "thisTypePredicate", "typePredicateVariable", "containsEsc", "eatColon", "_const", "descriptor", "originalStart", "delimitedList", "cb", "oldContext", "nested", "inner", "isExport", "moduleReference", "nany", "starttype", "mod", "oldMaybeInArrowParameters", "accessibility", "override", "elt", "pp", "bodilessType", "isInParens", "nonNullExpression", "isOptionalCall", "missingParenErrorPos", "asyncArrowFn", "typeArguments", "leftStartPos", "leftStartLoc", "minPrec", "checkKeywords", "ahead", "importNode", "assign", "cls", "interfaceNode", "modifiers", "invalidModifersForStaticBlocks", "callParseClassMemberWithIsStatic", "methodOrProp", "isDeclare", "_typeCast", "_typeCast2", "_jsx4", "_typeCast3", "typeCast", "_typeParameters", "returnType", "_expr$extra2", "baseCount", "firstParam", "oldIsAmbientContext", "oldInAbstractClass", "PlaceHolderErrors", "placeholders", "expectedNode", "isFinished", "oldStrict", "placeholder", "specifiers", "v8intrinsic", "v8IntrinsicStart", "identifier", "hasPlugin", "plugins", "getPluginOption", "option", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "RECORD_AND_TUPLE_SYNTAX_TYPES", "validatePlugins", "decoratorsBeforeExport", "proposal", "proposalList", "tupleSyntaxIsHash", "topicToken", "tokenList", "mixinPlugins", "mixinPluginNames", "defaultOptions", "getOptions", "opts", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "parenthesized", "_node$extra2", "isLast", "refNeedsArrowPos", "closeCharCode", "allowEmpty", "elts", "_startLoc", "_startPos", "_left", "checkClashes", "disallowLetBinding", "strictModeChanged", "elem", "ExpressionParser", "isRecord", "protoRef", "potentialArrowAt", "disallowIn", "resultError", "_resultError$pos", "ownExpressionErrors", "prec", "logical", "coalesce", "nextOp", "bodyExpr", "childExpr", "sawUnary", "isAwait", "update", "isDelete", "computed", "privateName", "dynamicImport", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "_call$extra", "callee", "pipeProposal", "tokenType", "lookaheadCh", "nodeType", "pluginTopicToken", "meta", "propertyName", "innerStartPos", "innerStartLoc", "spreadStart", "optionalCommaStart", "spreadNodeStartPos", "spreadNodeStartLoc", "innerEndPos", "innerEndLoc", "arrowNode", "parenExpression", "metaProp", "isTagged", "curElt", "propHash", "keyName", "_params", "oldInPropertyName", "isExpression", "hasStrictModeDirective", "nonSimple", "errorPos", "delegating", "argument", "callback", "outerContextTopicState", "outerContextSoloAwaitState", "revertScopes", "loopLabel", "switchLabel", "FUNC_NO_FLAGS", "FUNC_STATEMENT", "FUNC_HANGING_STATEMENT", "FUNC_NULLABLE_ID", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "tokens", "hashEndPos", "hashEndLoc", "StatementParser", "sourceType", "raw", "matched", "endCh", "nextTokenCharCode", "maybeName", "allowExport", "currentContextDecorators", "keyword", "isBreak", "lab", "awaitAt", "startsWithLet", "isLet", "startsWithUnescapedName", "isForOf", "description", "declarationPosition", "cases", "cur", "sawDefault", "isCase", "simple", "clause", "allowDirectives", "createNewLexicalScope", "afterBlockParse", "directives", "parsedNonDirective", "isForIn", "isFor", "declarations", "isTypescript", "statement", "isHangingStatement", "requireId", "hadSuperClass", "publicMethod", "privateMethod", "publicProp", "privateProp", "publicMember", "isPrivateName", "isContextual", "isPrivate", "maybeQuestionTokenStart", "_member$decorators", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "hasDeclaration", "l", "hasFrom", "nextAfterFrom", "expect", "assertions", "checkNames", "isDefault", "isFrom", "_declaration$extra", "exported", "exportedName", "local", "nodes", "surrogate", "parseNext", "attrs", "attrNames", "importedIsString", "imported", "Parser", "pluginsMap", "pluginMap", "_options", "getParser", "ast", "moduleError", "parseExpression", "getParserClass", "parserClassCache", "pluginsFromOptions", "pluginList", "global", "factory", "this", "WalkerBase", "parent", "SyncWalker", "enter", "leave", "_should_skip", "_should_remove", "_replacement", "skipped", "removed", "AsyncWalker", "walk", "asyncWalk", "compilerCore_cjs", "shared", "estreeWalker", "defaultOnError", "defaultOnWarn", "msg", "createCompilerError", "additionalMessage", "errorMessages", "FRAGMENT", "TELEPORT", "SUSPENSE", "KEEP_ALIVE", "BASE_TRANSITION", "OPEN_BLOCK", "CREATE_BLOCK", "CREATE_ELEMENT_BLOCK", "CREATE_VNODE", "CREATE_ELEMENT_VNODE", "CREATE_COMMENT", "CREATE_TEXT", "CREATE_STATIC", "RESOLVE_COMPONENT", "RESOLVE_DYNAMIC_COMPONENT", "RESOLVE_DIRECTIVE", "RESOLVE_FILTER", "WITH_DIRECTIVES", "RENDER_LIST", "RENDER_SLOT", "CREATE_SLOTS", "TO_DISPLAY_STRING", "MERGE_PROPS", "NORMALIZE_CLASS", "NORMALIZE_STYLE", "NORMALIZE_PROPS", "GUARD_REACTIVE_PROPS", "TO_HANDLERS", "CAMELIZE", "CAPITALIZE", "TO_HANDLER_KEY", "SET_BLOCK_TRACKING", "PUSH_SCOPE_ID", "POP_SCOPE_ID", "WITH_SCOPE_ID", "WITH_CTX", "UNREF", "IS_REF", "WITH_MEMO", "IS_MEMO_SAME", "helperNameMap", "registerRuntimeHelpers", "helpers", "locStub", "createRoot", "createVNodeCall", "tag", "patchFlag", "dynamicProps", "isBlock", "disableTracking", "isComponent", "getVNodeBlockHelper", "getVNodeHelper", "createArrayExpression", "createObjectExpression", "properties", "createObjectProperty", "createSimpleExpression", "constType", "createInterpolation", "createCompoundExpression", "createCallExpression", "createFunctionExpression", "returns", "newline", "isSlot", "createConditionalExpression", "alternate", "createCacheExpression", "isVNode", "createBlockStatement", "createTemplateLiteral", "createIfStatement", "createAssignmentExpression", "right", "createSequenceExpression", "expressions", "createReturnStatement", "isStaticExp", "isBuiltInType", "expected", "isCoreComponent", "nonIdentifierRE", "isSimpleIdentifier", "validFirstIdentCharRE", "validIdentCharRE", "whitespaceRE", "isMemberExpression", "stateStack", "currentOpenBracketCount", "currentOpenParensCount", "currentStringType", "getInnerRange", "newLoc", "advancePositionWithClone", "numberOfCharacters", "advancePositionWithMutation", "linesCount", "lastNewLinePos", "condition", "findDir", "findProp", "dynamicOnly", "isBindKey", "hasDynamicKeyVBind", "isText", "isVSlot", "isTemplateNode", "isSlotOutlet", "ssr", "propsHelperSet", "getUnnormalizedProps", "callPath", "injectProp", "propsWithInjection", "parentCall", "alreadyExists", "propKeyName", "toValidAssetId", "hasScopeRef", "ids", "getMemoedVNodeCall", "makeBlock", "helper", "removeHelper", "inSSR", "deprecationData", "getCompatValue", "isCompatEnabled", "mode", "checkCompatEnabled", "enabled", "warnDeprecation", "link", "decodeRE", "decodeMap", "defaultParserOptions", "rawText", "p1", "baseParse", "createParserContext", "getCursor", "parseChildren", "getSelection", "rawOptions", "ancestors", "ns", "isEnd", "startsWith", "parseInterpolation", "emitError", "parseComment", "parseBogusComment", "parseCDATA", "advanceBy", "parseTag", "isSpecialTemplateDirective", "parseText", "pushNode", "removedWhitespace", "shouldCondense", "prevIndex", "nestedIndex", "contentStart", "closeIndex", "wasInPre", "wasInVPre", "isPreBoundary", "isVPreBoundary", "inlineTemplateProp", "startsWithEndTagOpen", "advanceSpaces", "cursor", "currentSource", "parseAttributes", "isSelfClosing", "hasIf", "hasFor", "tagType", "attributeNames", "attr", "parseAttribute", "nameSet", "m", "parseAttributeValue", "isPropShorthand", "dirName", "startOffset", "getNewPosition", "valueLoc", "isQuoted", "endIndex", "parseTextData", "unexpectedChars", "open", "innerStart", "innerEnd", "rawContentLength", "rawContent", "preTrimContent", "endOffset", "endTokens", "column", "xs", "searchString", "hoistStatic", "root", "isSingleElementRoot", "doNotHoistNode", "canStringify", "originalCount", "hoistedCount", "constantType", "getConstantType", "codegenNode", "flag", "getPatchFlag", "getGeneratedPropsConstantType", "getNodeProps", "contentType", "constantCache", "cached", "generatedPropsType", "childType", "expType", "allowHoistedHelperSet", "getConstantTypeOfHelperCall", "keyType", "valueType", "createTransformContext", "filename", "prefixIdentifiers", "cacheHandlers", "nodeTransforms", "directiveTransforms", "transformHoist", "isBuiltInComponent", "isCustomElement", "expressionPlugins", "scopeId", "slotted", "ssrCssVars", "bindingMetadata", "inline", "isTS", "onError", "onWarn", "compatConfig", "nameMatch", "currentCount", "removalIndex", "exp", "addId", "removeId", "identifiers", "transform", "traverseNode", "createRootCodegen", "patchFlagText", "traverseChildren", "nodeRemoved", "exitFns", "onExit", "createStructuralDirectiveTransform", "PURE_ANNOTATION", "createCodegenContext", "sourceMap$1", "optimizeImports", "runtimeGlobalName", "runtimeModuleName", "addMapping", "withoutNewLine", "generate", "push", "indent", "deindent", "hasHelpers", "useWithBlock", "genScopeId", "isSetupInlined", "preambleContext", "genModulePreamble", "genFunctionPreamble", "functionName", "genAssets", "genNode", "VueBinding", "aliasHelper", "staticHelpers", "genHoists", "genImports", "assets", "resolver", "maybeSelfReference", "hoists", "importsOptions", "imports", "isText$1", "genNodeListAsArray", "multilines", "genNodeList", "comma", "genText", "genExpression", "genInterpolation", "genCompoundExpression", "genComment", "genVNodeCall", "genCallExpression", "genObjectExpression", "genArrayExpression", "genFunctionExpression", "genConditionalExpression", "genCacheExpression", "genTemplateLiteral", "genIfStatement", "genAssignmentExpression", "genSequenceExpression", "genReturnStatement", "pure", "genExpressionAsPropertyKey", "text", "callHelper", "genNullableArgs", "needNewline", "needsParens", "isNested", "isLiteralWhitelisted", "transformExpression", "processExpression", "dir", "asParams", "asRawStatements", "rewriteIdentifier", "isAssignmentLVal", "isUpdateArg", "isDestructureAssignment", "isInDestructureAssignment", "parentStack", "rVal", "rExp", "rawExp", "rExpString", "stringifyExpression", "isPrefix", "bailConstant", "isScopeVarReference", "isAllowedGlobal", "isLiteral", "knownIds", "needPrefix", "shouldPrefix", "isStaticProperty", "isStaticPropertyKey", "leadingText", "transformIf", "processIf", "ifNode", "branch", "isRoot", "siblings", "sibling", "createCodegenNodeForBranch", "parentCondition", "getParentCondition", "processCodegen", "createIfBranch", "userKey", "isSameKey", "keyIndex", "createChildrenCodegenNode", "keyProperty", "firstChild", "vnodeCall", "branchExp", "transformFor", "processFor", "forNode", "renderExp", "memo", "keyProp", "keyExp", "isStableFragment", "fragmentFlag", "childBlock", "isTemplate", "needFragmentWrapper", "slotOutlet", "createForLoopParams", "parseResult", "parseForExpression", "addIdentifiers", "removeIdentifiers", "scopes", "forAliasRE", "forIteratorRE", "stripParensRE", "inMatch", "LHS", "RHS", "createAliasExpression", "valueContent", "trimmedOffset", "iteratorMatch", "keyContent", "keyOffset", "indexContent", "memoArgs", "createParamsList", "defaultFallback", "trackSlotScopes", "vSlot", "slotProps", "trackVForSlotScopes", "vFor", "buildClientSlotFn", "buildSlots", "buildSlotFn", "slotsProperties", "dynamicSlots", "hasDynamicSlots", "onComponentSlot", "hasTemplateSlots", "hasNamedDefaultSlot", "implicitDefaultChildren", "seenSlotNames", "slotElement", "slotDir", "slotChildren", "slotLoc", "slotName", "dirLoc", "staticSlotName", "slotFunction", "vIf", "vElse", "buildDynamicSlot", "conditional", "buildDefaultSlotProperty", "isNonWhitespaceContent", "slotFlag", "hasForwardedSlots", "slots", "directiveImportMap", "transformElement", "vnodeTag", "resolveComponentType", "isDynamicComponent", "vnodeProps", "vnodeChildren", "vnodePatchFlag", "vnodeDynamicProps", "dynamicPropNames", "vnodeDirectives", "shouldUseBlock", "propsBuildResult", "buildProps", "buildDirectiveArgs", "hasDynamicTextChild", "flagNames", "stringifyDynamicPropNames", "isExplicitDynamic", "isComponentTag", "isProp", "isDir", "builtIn", "fromSetup", "resolveSetupReference", "dotIndex", "bindings", "camelName", "PascalName", "checkType", "fromConst", "fromMaybeRef", "elementLoc", "mergeArgs", "runtimeDirectives", "hasRef", "hasClassBinding", "hasStyleBinding", "hasHydrationEventBinding", "hasDynamicKeys", "hasVnodeHook", "analyzePatchFlag", "isEventHandler", "isVBind", "isVOn", "dedupeProperties", "directiveTransform", "needRuntime", "propsExpression", "classKeyIndex", "styleKeyIndex", "hasDynamicKey", "classProp", "styleProp", "knownProps", "deduped", "existing", "mergeAsArray", "incoming", "dirArgs", "runtime", "trueExpression", "propsNamesString", "transformSlotOutlet", "processSlotOutlet", "slotArgs", "nonNameProps", "fnExpRE", "transformOn", "augmentor", "eventName", "rawName", "shouldCache", "isMemberExp", "isInlineStatement", "hasMultipleStatements", "transformBind", "_node", "injectPrefix", "transformText", "currentContainer", "hasText", "callArgs", "seen", "transformOnce", "transformModel", "createTransformProps", "expString", "maybeRef", "propName", "assignmentExp", "eventArg", "altAssignment", "modifiersKey", "validDivisionCharRE", "transformFilter", "rewriteFilter", "parseFilter", "inSingle", "inDouble", "inTemplateString", "inRegex", "curly", "square", "paren", "lastFilterIndex", "filters", "pushFilter", "wrapFilter", "filter", "seen$1", "transformMemo", "getBaseTransformPreset", "baseCompile", "isModuleMode", "noopDirectiveTransform", "V_MODEL_RADIO", "V_MODEL_CHECKBOX", "V_MODEL_TEXT", "V_MODEL_SELECT", "V_MODEL_DYNAMIC", "V_ON_WITH_MODIFIERS", "V_ON_WITH_KEYS", "V_SHOW", "TRANSITION", "TRANSITION_GROUP", "transformStyle", "parseInlineCSS", "createDOMCompilerError", "DOMErrorMessages", "warnTransitionChildren", "hasMultipleChildren", "takeAllComments", "newTrailingComments", "leadingComment", "trailingComments", "lastInStack", "leadingComments", "firstTrailingCommentIndex", "isSimpleProperty", "isExpr", "allowed", "statementParens", "_temp", "moduloLoc", "checksLoc", "firstIdentLoc", "_i", "_i2", "_i3", "_members$defaultedMem", "_i4", "_members$defaultedMem2", "oldYieldPos", "oldAwaitPos", "callParseClassMember", "oldIsDeclareContext", "_Object$keys", "exprAllowed", "_expr$properties", "_expr$elements", "oldMaybeInAsyncArrowHead", "_node$arguments", "possibleAsyncArrow", "innerParenStart", "oldInParameters", "nameHash", "childExpression", "isSimpleReference", "_Array$from", "_this$state$labels", "octalPositions", "constructorAllowsSuper", "isSimple", "_node$specifiers", "_i5", "_node$declaration$dec", "_i6", "_node$properties", "_i7", "_node$elements", "assertionKeyNode", "_this$stack", "shallowEqual_1", "shallowEqual", "actual", "isArrayExpression", "isAssignmentExpression", "isBinaryExpression", "isInterpreterDirective", "isDirective", "isDirectiveLiteral", "isBlockStatement", "isBreakStatement", "isCallExpression", "isCatchClause", "isConditionalExpression", "isContinueStatement", "isDebuggerStatement", "isDoWhileStatement", "isEmptyStatement", "isExpressionStatement", "isFile", "isForInStatement", "isForStatement", "isFunctionDeclaration", "isFunctionExpression", "isIdentifier", "isIfStatement", "isLabeledStatement", "isStringLiteral", "isNumericLiteral", "isNullLiteral", "isBooleanLiteral", "isRegExpLiteral", "isLogicalExpression", "isNewExpression", "isProgram", "isObjectExpression", "isObjectMethod", "isObjectProperty", "isRestElement", "isReturnStatement", "isSequenceExpression", "isParenthesizedExpression", "isSwitchCase", "isSwitchStatement", "isThisExpression", "isThrowStatement", "isTryStatement", "isUnaryExpression", "isUpdateExpression", "isVariableDeclaration", "isVariableDeclarator", "isWhileStatement", "isWithStatement", "isAssignmentPattern", "isArrayPattern", "isArrowFunctionExpression", "isClassBody", "isClassExpression", "isClassDeclaration", "isExportAllDeclaration", "isExportDefaultDeclaration", "isExportNamedDeclaration", "isExportSpecifier", "isForOfStatement", "isImportDeclaration", "isImportDefaultSpecifier", "isImportNamespaceSpecifier", "isImportSpecifier", "isMetaProperty", "isClassMethod", "isObjectPattern", "isSpreadElement", "isSuper", "isTaggedTemplateExpression", "isTemplateElement", "isTemplateLiteral", "isYieldExpression", "isAwaitExpression", "isImport", "isBigIntLiteral", "isExportNamespaceSpecifier", "isOptionalMemberExpression", "isOptionalCallExpression", "isAnyTypeAnnotation", "isArrayTypeAnnotation", "isBooleanTypeAnnotation", "isBooleanLiteralTypeAnnotation", "isNullLiteralTypeAnnotation", "isClassImplements", "isDeclareClass", "isDeclareFunction", "isDeclareInterface", "isDeclareModule", "isDeclareModuleExports", "isDeclareTypeAlias", "isDeclareOpaqueType", "isDeclareVariable", "isDeclareExportDeclaration", "isDeclareExportAllDeclaration", "isDeclaredPredicate", "isExistsTypeAnnotation", "isFunctionTypeAnnotation", "isFunctionTypeParam", "isGenericTypeAnnotation", "isInferredPredicate", "isInterfaceExtends", "isInterfaceDeclaration", "isInterfaceTypeAnnotation", "isIntersectionTypeAnnotation", "isMixedTypeAnnotation", "isEmptyTypeAnnotation", "isNullableTypeAnnotation", "isNumberLiteralTypeAnnotation", "isNumberTypeAnnotation", "isObjectTypeAnnotation", "isObjectTypeInternalSlot", "isObjectTypeCallProperty", "isObjectTypeIndexer", "isObjectTypeProperty", "isObjectTypeSpreadProperty", "isOpaqueType", "isQualifiedTypeIdentifier", "isStringLiteralTypeAnnotation", "isStringTypeAnnotation", "isSymbolTypeAnnotation", "isThisTypeAnnotation", "isTupleTypeAnnotation", "isTypeofTypeAnnotation", "isTypeAlias", "isTypeAnnotation", "isTypeCastExpression", "isTypeParameter", "isTypeParameterDeclaration", "isTypeParameterInstantiation", "isUnionTypeAnnotation", "isVariance", "isVoidTypeAnnotation", "isEnumDeclaration", "isEnumBooleanBody", "isEnumNumberBody", "isEnumStringBody", "isEnumSymbolBody", "isEnumBooleanMember", "isEnumNumberMember", "isEnumStringMember", "isEnumDefaultedMember", "isJSXAttribute", "isJSXClosingElement", "isJSXElement", "isJSXEmptyExpression", "isJSXExpressionContainer", "isJSXSpreadChild", "isJSXIdentifier", "isJSXMemberExpression", "isJSXNamespacedName", "isJSXOpeningElement", "isJSXSpreadAttribute", "isJSXText", "isJSXFragment", "isJSXOpeningFragment", "isJSXClosingFragment", "isNoop", "isPlaceholder", "isV8IntrinsicIdentifier", "isArgumentPlaceholder", "isBindExpression", "isClassProperty", "isPipelineTopicExpression", "isPipelineBareFunction", "isPipelinePrimaryTopicReference", "isClassPrivateProperty", "isClassPrivateMethod", "isImportAttribute", "isDecorator", "isDoExpression", "isExportDefaultSpecifier", "isRecordExpression", "isTupleExpression", "isDecimalLiteral", "isStaticBlock", "isTSParameterProperty", "isTSDeclareFunction", "isTSDeclareMethod", "isTSQualifiedName", "isTSCallSignatureDeclaration", "isTSConstructSignatureDeclaration", "isTSPropertySignature", "isTSMethodSignature", "isTSIndexSignature", "isTSAnyKeyword", "isTSBooleanKeyword", "isTSBigIntKeyword", "isTSIntrinsicKeyword", "isTSNeverKeyword", "isTSNullKeyword", "isTSNumberKeyword", "isTSObjectKeyword", "isTSStringKeyword", "isTSSymbolKeyword", "isTSUndefinedKeyword", "isTSUnknownKeyword", "isTSVoidKeyword", "isTSThisType", "isTSFunctionType", "isTSConstructorType", "isTSTypeReference", "isTSTypePredicate", "isTSTypeQuery", "isTSTypeLiteral", "isTSArrayType", "isTSTupleType", "isTSOptionalType", "isTSRestType", "isTSNamedTupleMember", "isTSUnionType", "isTSIntersectionType", "isTSConditionalType", "isTSInferType", "isTSParenthesizedType", "isTSTypeOperator", "isTSIndexedAccessType", "isTSMappedType", "isTSLiteralType", "isTSExpressionWithTypeArguments", "isTSInterfaceDeclaration", "isTSInterfaceBody", "isTSTypeAliasDeclaration", "isTSAsExpression", "isTSTypeAssertion", "isTSEnumDeclaration", "isTSEnumMember", "isTSModuleDeclaration", "isTSModuleBlock", "isTSImportType", "isTSImportEqualsDeclaration", "isTSExternalModuleReference", "isTSNonNullExpression", "isTSExportAssignment", "isTSNamespaceExportDeclaration", "isTSTypeAnnotation", "isTSTypeParameterInstantiation", "isTSTypeParameterDeclaration", "isTSTypeParameter", "isBinary", "isScopable", "isBlockParent", "isTerminatorless", "isCompletionStatement", "isConditional", "isWhile", "isExpressionWrapper", "isForXStatement", "isFunctionParent", "isPureish", "isDeclaration", "isPatternLike", "isLVal", "isTSEntityName", "isImmutable", "isUserWhitespacable", "isObjectMember", "isProperty", "isUnaryLike", "isModuleDeclaration", "isExportDeclaration", "isModuleSpecifier", "isFlow", "isFlowType", "isFlowBaseAnnotation", "isFlowDeclaration", "isFlowPredicate", "isEnumBody", "isEnumMember", "isJSX", "isTSTypeElement", "isTSType", "isTSBaseType", "isNumberLiteral", "isRegexLiteral", "isRestProperty", "isSpreadProperty", "_shallowEqual", "_interopRequireDefault", "matchesPattern_1", "matchesPattern", "_generated", "allowPartial", "buildMatchMemberExpression_1", "buildMatchMemberExpression", "_matchesPattern", "isReactComponent_1", "_buildMatchMemberExpression", "isReactComponent", "_default", "isCompatTag_1", "isCompatTag", "tagName", "listCacheClear", "_listCacheClear", "eq", "other", "eq_1", "assocIndexOf", "array", "_assocIndexOf", "arrayProto", "splice", "listCacheDelete", "_listCacheDelete", "listCacheGet", "_listCacheGet", "listCacheHas", "_listCacheHas", "listCacheSet", "_listCacheSet", "ListCache", "entry", "_ListCache", "stackClear", "_stackClear", "stackDelete", "_stackDelete", "stackGet", "_stackGet", "stackHas", "_stackHas", "freeGlobal", "_freeGlobal", "freeSelf", "_root", "Symbol", "_Symbol", "objectProto", "nativeObjectToString", "symToStringTag", "getRawTag", "isOwn", "unmasked", "_getRawTag", "_objectToString", "nullTag", "undefinedTag", "baseGetTag", "_baseGetTag", "isObject_1", "asyncTag", "funcTag", "genTag", "proxyTag", "isFunction_1", "coreJsData", "_coreJsData", "maskSrcKey", "uid", "isMasked", "func", "_isMasked", "funcProto", "funcToString", "toSource", "_toSource", "reRegExpChar", "reIsHostCtor", "reIsNative", "baseIsNative", "_baseIsNative", "getValue", "_getValue", "getNative", "_getNative", "Map", "_Map", "nativeCreate", "_nativeCreate", "hashClear", "_hashClear", "hashDelete", "_hashDelete", "HASH_UNDEFINED", "hashGet", "_hashGet", "hashHas", "_hashHas", "hashSet", "_hashSet", "Hash", "_Hash", "mapCacheClear", "_mapCacheClear", "isKeyable", "_isKeyable", "getMapData", "_getMapData", "mapCacheDelete", "_mapCacheDelete", "mapCacheGet", "_mapCacheGet", "mapCacheHas", "_mapCacheHas", "mapCacheSet", "_mapCacheSet", "MapCache", "_MapCache", "LARGE_ARRAY_SIZE", "stackSet", "pairs", "_stackSet", "require$$5", "Stack", "_Stack", "arrayEach", "iteratee", "_arrayEach", "defineProperty", "_defineProperty", "baseAssignValue", "_baseAssignValue", "assignValue", "objValue", "_assignValue", "copyObject", "customizer", "isNew", "newValue", "_copyObject", "baseTimes", "_baseTimes", "isObjectLike", "isObjectLike_1", "argsTag", "baseIsArguments", "_baseIsArguments", "propertyIsEnumerable", "isArguments", "isArguments_1", "isArray_1", "stubFalse", "stubFalse_1", "freeExports", "freeModule", "module", "moduleExports", "Buffer", "nativeIsBuffer", "isBuffer", "MAX_SAFE_INTEGER", "reIsUint", "isIndex", "_isIndex", "isLength", "isLength_1", "arrayTag", "boolTag", "dateTag", "errorTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "typedArrayTags", "baseIsTypedArray", "_baseIsTypedArray", "baseUnary", "_baseUnary", "freeProcess", "nodeUtil", "nodeIsTypedArray", "isTypedArray", "isTypedArray_1", "arrayLikeKeys", "inherited", "isArr", "isArg", "isBuff", "isType", "skipIndexes", "_arrayLikeKeys", "isPrototype", "Ctor", "proto", "_isPrototype", "overArg", "_overArg", "nativeKeys", "_nativeKeys", "baseKeys", "_baseKeys", "isArrayLike", "isArrayLike_1", "keys_1", "baseAssign", "_baseAssign", "nativeKeysIn", "_nativeKeysIn", "baseKeysIn", "isProto", "_baseKeysIn", "keysIn", "keysIn_1", "baseAssignIn", "_baseAssignIn", "allocUnsafe", "cloneBuffer", "buffer", "isDeep", "copyArray", "_copyArray", "arrayFilter", "resIndex", "_arrayFilter", "stubArray", "stubArray_1", "nativeGetSymbols", "getSymbols", "symbol", "_getSymbols", "copySymbols", "_copySymbols", "arrayPush", "values", "_arrayPush", "getPrototype", "_getPrototype", "getSymbolsIn", "_getSymbolsIn", "copySymbolsIn", "_copySymbolsIn", "baseGetAllKeys", "keysFunc", "symbolsFunc", "_baseGetAllKeys", "getAllKeys", "_getAllKeys", "getAllKeysIn", "_getAllKeysIn", "DataView", "_DataView", "Promise", "_Promise", "Set", "_Set", "WeakMap", "_WeakMap", "require$$6", "promiseTag", "dataViewCtorString", "mapCtorString", "promiseCtorString", "setCtorString", "weakMapCtorString", "getTag", "ctorString", "_getTag", "initCloneArray", "_initCloneArray", "Uint8Array", "_Uint8Array", "cloneArrayBuffer", "arrayBuffer", "_cloneArrayBuffer", "cloneDataView", "dataView", "_cloneDataView", "reFlags", "cloneRegExp", "regexp", "_cloneRegExp", "symbolProto", "symbolValueOf", "cloneSymbol", "_cloneSymbol", "cloneTypedArray", "typedArray", "_cloneTypedArray", "symbolTag", "initCloneByTag", "_initCloneByTag", "objectCreate", "baseCreate", "_baseCreate", "initCloneObject", "_initCloneObject", "baseIsMap", "_baseIsMap", "nodeIsMap", "isMap_1", "baseIsSet", "_baseIsSet", "nodeIsSet", "isSet_1", "require$$7", "require$$8", "require$$9", "require$$10", "require$$11", "require$$12", "require$$13", "require$$14", "require$$15", "require$$16", "require$$17", "require$$18", "require$$19", "require$$20", "require$$21", "CLONE_DEEP_FLAG", "CLONE_FLAT_FLAG", "CLONE_SYMBOLS_FLAG", "cloneableTags", "baseClone", "bitmask", "isFlat", "isFull", "isFunc", "stacked", "subValue", "_baseClone", "clone", "clone_1", "fastProto", "FastObject", "o", "toFastProperties", "isType_1", "_definitions", "targetType", "aliases", "alias", "isPlaceholderType_1", "isPlaceholderType", "placeholderType", "is_1", "is", "_isType", "_isPlaceholderType", "isIdentifierName", "isFirst", "_identifier", "_keyword", "isValidIdentifier_1", "isValidIdentifier", "_helperValidatorIdentifier", "reserved", "constants", "STATEMENT_OR_BLOCK_KEYS", "FLATTENABLE_KEYS", "FOR_INIT_KEYS", "COMMENT_KEYS", "LOGICAL_OPERATORS", "UPDATE_OPERATORS", "BOOLEAN_NUMBER_BINARY_OPERATORS", "EQUALITY_BINARY_OPERATORS", "COMPARISON_BINARY_OPERATORS", "BOOLEAN_BINARY_OPERATORS", "NUMBER_BINARY_OPERATORS", "BINARY_OPERATORS", "ASSIGNMENT_OPERATORS", "BOOLEAN_UNARY_OPERATORS", "NUMBER_UNARY_OPERATORS", "STRING_UNARY_OPERATORS", "UNARY_OPERATORS", "INHERIT_KEYS", "BLOCK_SCOPED_SYMBOL", "NOT_LOCAL_BINDING", "validate_1", "validate", "validateField", "validateChild", "fields", "field", "utils", "typeIs", "validateType", "validateOptional", "validateOptionalType", "arrayOf", "arrayOfType", "validateArrayOfType", "assertEach", "assertOneOf", "assertNodeType", "assertNodeOrValueType", "assertValueType", "assertShape", "assertOptionalChainStart", "defineType", "_is", "_validate", "VISITOR_KEYS", "ALIAS_KEYS", "FLIPPED_ALIAS_KEYS", "NODE_FIELDS", "BUILDER_KEYS", "DEPRECATED_KEYS", "NODE_PARENT_VALIDATIONS", "getType", "typeName", "validator", "subkey", "v", "shape", "_current", "validTypeOpts", "validFieldKeys", "inherits", "store", "visitor", "builder", "k", "core", "_isValidIdentifier", "_constants", "_utils", "_interopRequireWildcard", "_getRequireWildcardCache", "newObj", "hasPropertyDescriptor", "inOp", "functionCommon", "functionTypeAnnotationCommon", "functionDeclarationCommon", "patternLikeCommon", "parentKey", "nonComp", "normal", "listKey", "without", "sourced", "sourceless", "lval", "classMethodOrPropertyCommon", "classMethodOrDeclareMethodCommon", "defineInterfaceishType", "typeParameterType", "PLACEHOLDERS", "PLACEHOLDERS_ALIAS", "PLACEHOLDERS_FLIPPED_ALIAS", "_placeholders", "_core", "bool", "tSFunctionTypeAnnotationCommon", "signatureDeclarationCommon", "callConstructSignatureDeclaration", "namedTypeElementCommon", "tsKeywordTypes", "fnOrCtr", "unionOrIntersection", "_toFastProperties", "TYPES", "builder_1", "_clone", "countArgs", "arrayExpression", "assignmentExpression", "binaryExpression", "interpreterDirective", "blockStatement", "breakStatement", "callExpression", "catchClause", "conditionalExpression", "continueStatement", "debuggerStatement", "doWhileStatement", "emptyStatement", "expressionStatement", "forInStatement", "forStatement", "functionDeclaration", "functionExpression", "ifStatement", "labeledStatement", "stringLiteral", "numericLiteral", "nullLiteral", "booleanLiteral", "regExpLiteral", "logicalExpression", "memberExpression", "newExpression", "objectExpression", "objectMethod", "objectProperty", "restElement", "returnStatement", "sequenceExpression", "parenthesizedExpression", "switchCase", "switchStatement", "thisExpression", "throwStatement", "tryStatement", "unaryExpression", "updateExpression", "variableDeclaration", "variableDeclarator", "whileStatement", "withStatement", "assignmentPattern", "arrayPattern", "arrowFunctionExpression", "classExpression", "classDeclaration", "exportAllDeclaration", "exportDefaultDeclaration", "exportNamedDeclaration", "exportSpecifier", "forOfStatement", "importDeclaration", "importDefaultSpecifier", "importNamespaceSpecifier", "importSpecifier", "metaProperty", "classMethod", "objectPattern", "spreadElement", "_super", "taggedTemplateExpression", "templateElement", "templateLiteral", "yieldExpression", "awaitExpression", "_import", "bigIntLiteral", "exportNamespaceSpecifier", "optionalMemberExpression", "optionalCallExpression", "anyTypeAnnotation", "arrayTypeAnnotation", "booleanTypeAnnotation", "booleanLiteralTypeAnnotation", "nullLiteralTypeAnnotation", "classImplements", "declareClass", "declareFunction", "declareInterface", "declareModule", "declareModuleExports", "declareTypeAlias", "declareOpaqueType", "declareVariable", "declareExportDeclaration", "declareExportAllDeclaration", "declaredPredicate", "existsTypeAnnotation", "functionTypeAnnotation", "functionTypeParam", "genericTypeAnnotation", "inferredPredicate", "interfaceExtends", "interfaceDeclaration", "interfaceTypeAnnotation", "intersectionTypeAnnotation", "mixedTypeAnnotation", "emptyTypeAnnotation", "nullableTypeAnnotation", "numberLiteralTypeAnnotation", "numberTypeAnnotation", "objectTypeAnnotation", "objectTypeInternalSlot", "objectTypeCallProperty", "objectTypeIndexer", "objectTypeProperty", "objectTypeSpreadProperty", "opaqueType", "qualifiedTypeIdentifier", "stringLiteralTypeAnnotation", "stringTypeAnnotation", "symbolTypeAnnotation", "thisTypeAnnotation", "tupleTypeAnnotation", "typeofTypeAnnotation", "typeAlias", "typeCastExpression", "typeParameterDeclaration", "typeParameterInstantiation", "unionTypeAnnotation", "voidTypeAnnotation", "enumDeclaration", "enumBooleanBody", "enumNumberBody", "enumStringBody", "enumSymbolBody", "enumBooleanMember", "enumNumberMember", "enumStringMember", "enumDefaultedMember", "jsxAttribute", "jsxClosingElement", "jsxElement", "jsxEmptyExpression", "jsxExpressionContainer", "jsxSpreadChild", "jsxIdentifier", "jsxMemberExpression", "jsxNamespacedName", "jsxOpeningElement", "jsxSpreadAttribute", "jsxText", "jsxFragment", "jsxOpeningFragment", "jsxClosingFragment", "noop", "v8IntrinsicIdentifier", "argumentPlaceholder", "bindExpression", "classProperty", "pipelineTopicExpression", "pipelineBareFunction", "pipelinePrimaryTopicReference", "classPrivateProperty", "classPrivateMethod", "importAttribute", "doExpression", "exportDefaultSpecifier", "recordExpression", "tupleExpression", "decimalLiteral", "staticBlock", "tsParameterProperty", "tsDeclareFunction", "tsDeclareMethod", "tsQualifiedName", "tsCallSignatureDeclaration", "tsConstructSignatureDeclaration", "tsPropertySignature", "tsMethodSignature", "tsIndexSignature", "tsAnyKeyword", "tsBooleanKeyword", "tsBigIntKeyword", "tsIntrinsicKeyword", "tsNeverKeyword", "tsNullKeyword", "tsNumberKeyword", "tsObjectKeyword", "tsStringKeyword", "tsSymbolKeyword", "tsUndefinedKeyword", "tsUnknownKeyword", "tsVoidKeyword", "tsThisType", "tsFunctionType", "tsConstructorType", "tsTypeReference", "tsTypePredicate", "tsTypeQuery", "tsTypeLiteral", "tsArrayType", "tsTupleType", "tsOptionalType", "tsRestType", "tsNamedTupleMember", "tsUnionType", "tsIntersectionType", "tsConditionalType", "tsInferType", "tsParenthesizedType", "tsTypeOperator", "tsIndexedAccessType", "tsMappedType", "tsLiteralType", "tsExpressionWithTypeArguments", "tsInterfaceDeclaration", "tsInterfaceBody", "tsTypeAliasDeclaration", "tsAsExpression", "tsTypeAssertion", "tsEnumDeclaration", "tsEnumMember", "tsModuleDeclaration", "tsModuleBlock", "tsImportType", "tsImportEqualsDeclaration", "tsExternalModuleReference", "tsNonNullExpression", "tsExportAssignment", "tsNamespaceExportDeclaration", "tsTypeAnnotation", "tsTypeParameterInstantiation", "tsTypeParameterDeclaration", "tsTypeParameter", "NumberLiteral", "RegexLiteral", "RestProperty", "SpreadProperty", "_builder", "cleanJSXElementLiteralChild_1", "cleanJSXElementLiteralChild", "lastNonEmptyLine", "isFirstLine", "isLastLine", "isLastNonEmptyLine", "trimmedLine", "buildChildren_1", "buildChildren", "_cleanJSXElementLiteralChild", "isNode_1", "isNode", "assertNode_1", "assertNode", "_isNode", "_node$type", "assertArrayExpression", "assertAssignmentExpression", "assertBinaryExpression", "assertInterpreterDirective", "assertDirective", "assertDirectiveLiteral", "assertBlockStatement", "assertBreakStatement", "assertCallExpression", "assertCatchClause", "assertConditionalExpression", "assertContinueStatement", "assertDebuggerStatement", "assertDoWhileStatement", "assertEmptyStatement", "assertExpressionStatement", "assertFile", "assertForInStatement", "assertForStatement", "assertFunctionDeclaration", "assertFunctionExpression", "assertIdentifier", "assertIfStatement", "assertLabeledStatement", "assertStringLiteral", "assertNumericLiteral", "assertNullLiteral", "assertBooleanLiteral", "assertRegExpLiteral", "assertLogicalExpression", "assertMemberExpression", "assertNewExpression", "assertProgram", "assertObjectExpression", "assertObjectMethod", "assertObjectProperty", "assertRestElement", "assertReturnStatement", "assertSequenceExpression", "assertParenthesizedExpression", "assertSwitchCase", "assertSwitchStatement", "assertThisExpression", "assertThrowStatement", "assertTryStatement", "assertUnaryExpression", "assertUpdateExpression", "assertVariableDeclaration", "assertVariableDeclarator", "assertWhileStatement", "assertWithStatement", "assertAssignmentPattern", "assertArrayPattern", "assertArrowFunctionExpression", "assertClassBody", "assertClassExpression", "assertClassDeclaration", "assertExportAllDeclaration", "assertExportDefaultDeclaration", "assertExportNamedDeclaration", "assertExportSpecifier", "assertForOfStatement", "assertImportDeclaration", "assertImportDefaultSpecifier", "assertImportNamespaceSpecifier", "assertImportSpecifier", "assertMetaProperty", "assertClassMethod", "assertObjectPattern", "assertSpreadElement", "assertSuper", "assertTaggedTemplateExpression", "assertTemplateElement", "assertTemplateLiteral", "assertYieldExpression", "assertAwaitExpression", "assertImport", "assertBigIntLiteral", "assertExportNamespaceSpecifier", "assertOptionalMemberExpression", "assertOptionalCallExpression", "assertAnyTypeAnnotation", "assertArrayTypeAnnotation", "assertBooleanTypeAnnotation", "assertBooleanLiteralTypeAnnotation", "assertNullLiteralTypeAnnotation", "assertClassImplements", "assertDeclareClass", "assertDeclareFunction", "assertDeclareInterface", "assertDeclareModule", "assertDeclareModuleExports", "assertDeclareTypeAlias", "assertDeclareOpaqueType", "assertDeclareVariable", "assertDeclareExportDeclaration", "assertDeclareExportAllDeclaration", "assertDeclaredPredicate", "assertExistsTypeAnnotation", "assertFunctionTypeAnnotation", "assertFunctionTypeParam", "assertGenericTypeAnnotation", "assertInferredPredicate", "assertInterfaceExtends", "assertInterfaceDeclaration", "assertInterfaceTypeAnnotation", "assertIntersectionTypeAnnotation", "assertMixedTypeAnnotation", "assertEmptyTypeAnnotation", "assertNullableTypeAnnotation", "assertNumberLiteralTypeAnnotation", "assertNumberTypeAnnotation", "assertObjectTypeAnnotation", "assertObjectTypeInternalSlot", "assertObjectTypeCallProperty", "assertObjectTypeIndexer", "assertObjectTypeProperty", "assertObjectTypeSpreadProperty", "assertOpaqueType", "assertQualifiedTypeIdentifier", "assertStringLiteralTypeAnnotation", "assertStringTypeAnnotation", "assertSymbolTypeAnnotation", "assertThisTypeAnnotation", "assertTupleTypeAnnotation", "assertTypeofTypeAnnotation", "assertTypeAlias", "assertTypeAnnotation", "assertTypeCastExpression", "assertTypeParameter", "assertTypeParameterDeclaration", "assertTypeParameterInstantiation", "assertUnionTypeAnnotation", "assertVariance", "assertVoidTypeAnnotation", "assertEnumDeclaration", "assertEnumBooleanBody", "assertEnumNumberBody", "assertEnumStringBody", "assertEnumSymbolBody", "assertEnumBooleanMember", "assertEnumNumberMember", "assertEnumStringMember", "assertEnumDefaultedMember", "assertJSXAttribute", "assertJSXClosingElement", "assertJSXElement", "assertJSXEmptyExpression", "assertJSXExpressionContainer", "assertJSXSpreadChild", "assertJSXIdentifier", "assertJSXMemberExpression", "assertJSXNamespacedName", "assertJSXOpeningElement", "assertJSXSpreadAttribute", "assertJSXText", "assertJSXFragment", "assertJSXOpeningFragment", "assertJSXClosingFragment", "assertNoop", "assertPlaceholder", "assertV8IntrinsicIdentifier", "assertArgumentPlaceholder", "assertBindExpression", "assertClassProperty", "assertPipelineTopicExpression", "assertPipelineBareFunction", "assertPipelinePrimaryTopicReference", "assertClassPrivateProperty", "assertClassPrivateMethod", "assertImportAttribute", "assertDecorator", "assertDoExpression", "assertExportDefaultSpecifier", "assertPrivateName", "assertRecordExpression", "assertTupleExpression", "assertDecimalLiteral", "assertStaticBlock", "assertTSParameterProperty", "assertTSDeclareFunction", "assertTSDeclareMethod", "assertTSQualifiedName", "assertTSCallSignatureDeclaration", "assertTSConstructSignatureDeclaration", "assertTSPropertySignature", "assertTSMethodSignature", "assertTSIndexSignature", "assertTSAnyKeyword", "assertTSBooleanKeyword", "assertTSBigIntKeyword", "assertTSIntrinsicKeyword", "assertTSNeverKeyword", "assertTSNullKeyword", "assertTSNumberKeyword", "assertTSObjectKeyword", "assertTSStringKeyword", "assertTSSymbolKeyword", "assertTSUndefinedKeyword", "assertTSUnknownKeyword", "assertTSVoidKeyword", "assertTSThisType", "assertTSFunctionType", "assertTSConstructorType", "assertTSTypeReference", "assertTSTypePredicate", "assertTSTypeQuery", "assertTSTypeLiteral", "assertTSArrayType", "assertTSTupleType", "assertTSOptionalType", "assertTSRestType", "assertTSNamedTupleMember", "assertTSUnionType", "assertTSIntersectionType", "assertTSConditionalType", "assertTSInferType", "assertTSParenthesizedType", "assertTSTypeOperator", "assertTSIndexedAccessType", "assertTSMappedType", "assertTSLiteralType", "assertTSExpressionWithTypeArguments", "assertTSInterfaceDeclaration", "assertTSInterfaceBody", "assertTSTypeAliasDeclaration", "assertTSAsExpression", "assertTSTypeAssertion", "assertTSEnumDeclaration", "assertTSEnumMember", "assertTSModuleDeclaration", "assertTSModuleBlock", "assertTSImportType", "assertTSImportEqualsDeclaration", "assertTSExternalModuleReference", "assertTSNonNullExpression", "assertTSExportAssignment", "assertTSNamespaceExportDeclaration", "assertTSTypeAnnotation", "assertTSTypeParameterInstantiation", "assertTSTypeParameterDeclaration", "assertTSTypeParameter", "assertExpression", "assertBinary", "assertScopable", "assertBlockParent", "assertBlock", "assertStatement", "assertTerminatorless", "assertCompletionStatement", "assertConditional", "assertLoop", "assertWhile", "assertExpressionWrapper", "assertFor", "assertForXStatement", "assertFunction", "assertFunctionParent", "assertPureish", "assertDeclaration", "assertPatternLike", "assertLVal", "assertTSEntityName", "assertLiteral", "assertImmutable", "assertUserWhitespacable", "assertMethod", "assertObjectMember", "assertProperty", "assertUnaryLike", "assertPattern", "assertClass", "assertModuleDeclaration", "assertExportDeclaration", "assertModuleSpecifier", "assertFlow", "assertFlowType", "assertFlowBaseAnnotation", "assertFlowDeclaration", "assertFlowPredicate", "assertEnumBody", "assertEnumMember", "assertJSX", "assertPrivate", "assertTSTypeElement", "assertTSType", "assertTSBaseType", "assertNumberLiteral", "assertRegexLiteral", "assertRestProperty", "assertSpreadProperty", "createTypeAnnotationBasedOnTypeof_1", "createTypeAnnotationBasedOnTypeof", "removeTypeDuplicates_1", "removeTypeDuplicates", "generics", "bases", "typeGroups", "createFlowUnionType_1", "createFlowUnionType", "_removeTypeDuplicates", "flattened", "createTSUnionType_1", "createTSUnionType", "typeAnnotations", "cloneNode_1", "cloneNode", "cloneIfNode", "deep", "withoutLoc", "cloneIfNodeOrArray", "maybeCloneComments", "cloneCommentsWithoutLoc", "_cloneNode", "cloneDeep_1", "cloneDeep", "cloneDeepWithoutLoc_1", "cloneDeepWithoutLoc", "cloneWithoutLoc_1", "cloneWithoutLoc", "addComments_1", "addComments", "addComment_1", "addComment", "_addComments", "inherit_1", "inherit", "inheritInnerComments_1", "inheritInnerComments", "_inherit", "inheritLeadingComments_1", "inheritLeadingComments", "inheritTrailingComments_1", "inheritTrailingComments", "inheritsComments_1", "inheritsComments", "_inheritTrailingComments", "_inheritLeadingComments", "_inheritInnerComments", "removeComments_1", "removeComments", "EXPRESSION_TYPES", "BINARY_TYPES", "SCOPABLE_TYPES", "BLOCKPARENT_TYPES", "BLOCK_TYPES", "STATEMENT_TYPES", "TERMINATORLESS_TYPES", "COMPLETIONSTATEMENT_TYPES", "CONDITIONAL_TYPES", "LOOP_TYPES", "WHILE_TYPES", "EXPRESSIONWRAPPER_TYPES", "FOR_TYPES", "FORXSTATEMENT_TYPES", "FUNCTION_TYPES", "FUNCTIONPARENT_TYPES", "PUREISH_TYPES", "DECLARATION_TYPES", "PATTERNLIKE_TYPES", "LVAL_TYPES", "TSENTITYNAME_TYPES", "LITERAL_TYPES", "IMMUTABLE_TYPES", "USERWHITESPACABLE_TYPES", "METHOD_TYPES", "OBJECTMEMBER_TYPES", "PROPERTY_TYPES", "UNARYLIKE_TYPES", "PATTERN_TYPES", "CLASS_TYPES", "MODULEDECLARATION_TYPES", "EXPORTDECLARATION_TYPES", "MODULESPECIFIER_TYPES", "FLOW_TYPES", "FLOWTYPE_TYPES", "FLOWBASEANNOTATION_TYPES", "FLOWDECLARATION_TYPES", "FLOWPREDICATE_TYPES", "ENUMBODY_TYPES", "ENUMMEMBER_TYPES", "JSX_TYPES", "PRIVATE_TYPES", "TSTYPEELEMENT_TYPES", "TSTYPE_TYPES", "TSBASETYPE_TYPES", "toBlock_1", "toBlock", "_generated2", "blockNodes", "ensureBlock_1", "ensureBlock", "_toBlock", "toIdentifier_1", "toIdentifier", "toBindingIdentifierName_1", "toBindingIdentifierName", "_toIdentifier", "toComputedKey_1", "toComputedKey", "toExpression_1", "toExpression", "traverseFast_1", "traverseFast", "subNode", "removeProperties_1", "removeProperties", "CLEAR_KEYS", "CLEAR_KEYS_PLUS_COMMENTS", "symbols", "sym", "removePropertiesDeep_1", "removePropertiesDeep", "_traverseFast", "_removeProperties", "tree", "toKeyAlias_1", "toKeyAlias", "_removePropertiesDeep", "getBindingIdentifiers_1", "getBindingIdentifiers", "duplicates", "outerOnly", "search", "gatherSequenceExpressions_1", "gatherSequenceExpressions", "_getBindingIdentifiers", "declars", "exprs", "ensureLastUndefined", "declar", "toSequenceExpression_1", "toSequenceExpression", "_gatherSequenceExpressions", "toStatement_1", "toStatement", "ignore", "mustHaveId", "newType", "objectCtorString", "isPlainObject_1", "baseIsRegExp", "_baseIsRegExp", "nodeIsRegExp", "isRegExp", "isRegExp_1", "valueToNode_1", "valueToNode", "_isPlainObject", "_isRegExp", "numerator", "nodeKey", "appendToMemberExpression_1", "appendToMemberExpression", "append", "inherits_1", "_inheritsComments", "prependToMemberExpression_1", "prependToMemberExpression", "prepend", "getOuterBindingIdentifiers_1", "getOuterBindingIdentifiers", "traverse_1", "traverse", "handlers", "exit", "traverseSimpleImpl", "isBinding_1", "grandparent", "isLet_1", "isBlockScoped_1", "isBlockScoped", "_isLet", "isImmutable_1", "isNodesEquivalent_1", "isNodesEquivalent", "visitorKeys", "isReferenced_1", "isReferenced", "isScope_1", "isScope", "isSpecifierDefault_1", "isSpecifierDefault", "isValidES3Identifier_1", "isValidES3Identifier", "RESERVED_WORDS_ES3_ONLY", "isVar_1", "isVar", "_exportNames", "_assertNode", "_createTypeAnnotationBasedOnTypeof", "_createFlowUnionType", "_createTSUnionType", "_cloneDeep", "_cloneDeepWithoutLoc", "_cloneWithoutLoc", "_addComment", "_removeComments", "_ensureBlock", "_toBindingIdentifierName", "_toComputedKey", "_toExpression", "_toKeyAlias", "_toSequenceExpression", "_toStatement", "_valueToNode", "_appendToMemberExpression", "_inherits", "_prependToMemberExpression", "_getOuterBindingIdentifiers", "_traverse", "_isBinding", "_isBlockScoped", "_isImmutable", "_isNodesEquivalent", "_isReferenced", "_isScope", "_isSpecifierDefault", "_isValidES3Identifier", "_isVar", "_isReactComponent", "_isCompatTag", "_buildChildren", "_generated3", "require$$22", "require$$23", "require$$24", "require$$25", "require$$26", "require$$27", "require$$28", "require$$29", "require$$30", "require$$31", "require$$32", "require$$33", "require$$34", "require$$35", "require$$36", "require$$37", "require$$38", "require$$39", "require$$40", "require$$41", "require$$42", "require$$43", "require$$44", "require$$45", "require$$46", "require$$47", "require$$48", "require$$49", "require$$50", "require$$51", "require$$52", "require$$53", "require$$54", "require$$55", "require$$56", "require$$57", "require$$58", "require$$59", "require$$60", "require$$61", "require$$62", "_generated4", "require$$63", "react", "annotations", "namedCharacterReferences", "max", "isOffsetInSourceLocation", "TemplateContextService", "document", "offsetInDocument", "offsetInGenerated", "offsetInTemplate", "findTemplateNodeAt", "isElementNode", "inTagName", "inCloseTag", "isAttributeNode", "isDirectiveNode", "isLongHand", "nameEndOffset", "modifierOffset", "isInterpolationNode", "isSimpleExpressionNode", "isCommentNode", "isTextNode", "TemplateSlotsService", "component", "checker", "componentType", "propsType", "slotsType", "slotNames", "CompletionsService", "CompletionsService_1", "isComponentNode", "slot", "entryName", "actualEntryName", "ucfirst", "isLonghand", "vOn", "vBind", "lcfirst", "insertText", "attribute", "entryDetails", "action", "TemplateDeclarationsService", "TemplateDeclarationsService_1", "character", "output", "ContextVariableRE", "HoistedVariableRE", "findAnnotatedTextRanges", "prefixName", "initializer", "prefixInitializer", "references", "reference", "definitions", "definition", "prefixText", "globals", "templateGlobals", "typeChecker", "fallback", "templateRange", "inOpenTag", "versioned", "debug", "openTag", "closeTag", "ranges", "DefinitionService", "DefinitionService_1", "createCache", "textSpan", "cacheKey", "templateDeclaration", "contextSpan", "DiagnosticsService", "DiagnosticsService_1", "diagnostics", "category", "fakeSourceFile", "syntax", "duplicate", "diagnostic", "FoldingRangeService", "ImplementationService", "QuickInfoService", "QuickInfoService_1", "quickInfo", "RefactorService", "ReferencesService", "RenameService", "findInStrings", "findInComments", "providePrefixAndSuffixTextForRename", "oldFilePath", "newFilePath", "generatedOldFilePath", "generatedNewFilePath", "triggerSpan", "locations", "location", "SignatureHelpService", "openingBrace", "generatedOpeningBrace", "endPos", "generatedStartPos", "generatedEndPos", "EncodedClassificationsService", "format", "PluginSideChannel", "isVueSFCDescriptorFile", "vueFile", "parseFileName", "stringify", "isVueTemplateASTFile", "toFileName", "visited", "IPCService", "EventEmitter", "api", "generateUUID", "DisposableScope", "event", "previousValue", "client", "eventTarget", "isClosed", "channel", "handler", "endpoint", "TypescriptPluginService", "TypescriptPluginService_1", "completions", "rename", "classifications", "codeFix", "refactor", "folding", "implementation", "ipc", "_TypescriptPluginService_isVueProject", "_TypescriptPluginService_disposables", "all", "generatedFileName", "vue", "virtual", "fileNames", "originalPosition", "positionOrRange", "triggerReason", "refactorName", "actionName", "textRange", "filesToSearch", "emitOnlyDtsFiles", "forceDtsEmit", "searchValue", "maxResultCount", "excludeDtsFiles", "onlyMultiLine", "descriptors", "dispose", "forVueFile", "forOtherFiles", "PluginManager", "_PluginManager_containers", "_PluginManager_loggerIds", "containerKey", "_PluginManager_instances", "_PluginManager_setupLogger", "_PluginManager_patchTypescript", "container", "_PluginManager_createContainer", "_PluginManager_createLanguageService", "_PluginManager_patchProject", "_PluginManager_patchFilesystem", "_PluginManager_patchFilesystemWatcher", "_PluginManager_patchResolveModuleNames", "_PluginManager_patchGetScriptVersionAndGetScriptSnapshot", "console", "extraFileExtensions", "extensions", "getCompilerOptions", "compilerOptions", "getCompilationSettings", "compilationSettings", "setHostConfiguration", "detachScriptInfoFromProject", "uncheckedFileName", "noRemoveResolution", "languageServiceHost", "getScriptVersion", "getScriptSnapshot", "importedFrom", "resolveModuleNames", "moduleNames", "containingFile", "reusedNames", "redirectedReference", "containingSourceFile", "anyProjectFile", "known", "resolved", "host", "fileExists", "readFile", "encoding", "watchFile", "setDebugging", "LogLevel", "languageService", "pluginService", "bind", "instance", "pluginManager", "resolve"]
}
